Jump to Navigation

C++

C/C++编程

ToxCore 客户端基本处理流程图

每一个使用toxcore的程序,都可以算是一个toxcore客户端程序。
而这个客户端大都有一个共有的处理流程,以下提供一个简单流程图,仅供参考:

ToxCore API本次升级总结

在2015年早些时候,ToxCore完成了一次比较大的升级API升级,影响到所有的使用原API的程序。
最近又拾起来了toxcore项目,在些基础上做些项目与研究,在升级API的过程中整理了一下,公布在之儿。如有不完善不正确之处,请指正。

这次api从外面看主要是命名的规范化的提升,其中也不乏大的改动,像文件API部分,有API的增删。

Qt5的ruby语言绑定实现系列:JIT ExecuteEngine与IR Module重用优化

# JIT ExecuteEngine与IR Module重用优化

在项目的原型阶段,为了代码的简洁与直接,很多地方都使用了新实例实现相关功能。
包括JIT ExecuteEngine和IR Module两个大模块。

这种方式由于大量使用了new操作,会浪费大量的内存与CPU资源。
本次改进的目的也是针对这两方面的,以提高现阶段该项目的可用性。

本文从优化的整体架构说明,到每个分模块一一介绍,到最后简单的测试,
希望能够对本次优化做到清晰说明。

###

概要

为什么提高效率,优化内存使用,可行的方式就是资源的重用。

经过项目原型实现的分析,基本整理出来两个关系性比较强,可以重用的模块:
第一个是自动生成的IR代码的重用。
第二个是JIT执行引擎的重用。

以下所有的改进都是围绕这两个部分进行的。

###

Category:

Qt库的ruby语言绑定的探索与实现过程笔记

# Qt库的ruby语言绑定的探索与实现过程笔记

一直一来我经常使用Qt做一些简单的linux桌面工具软件,也算是对Qt库比较熟悉了。
而真正开始搞Qt库的ruby语言的绑定,出于当时觉得ruby是个比较有意思的编程语言,并开始接触学习ruby语言。
虽然在ruby最热门的时期作为web快速开发框架面世的,实现上我认为ruby也是一种非常不错的系统脚本语言。

在不断深入的学习ruby语言的过程中,越来越希望所有的开发工作都使用ruby语言实现,
并且这不只是希望,也尽可能的使用ruby完成一些开发工作。

不过,在这时,遇到一个需要更复杂的项目,希望能为这项目开发GUI界面功能。
经过一番网上搜索,也发现其实已经有qt的ruby语言绑定相关库了,
像kde项目中的rubyqt,还有qtbindings这个gem包,这两个包也比较成熟稳定了。
在试用的过程中了解到这两个包其实是同源的,并且都只支持Qt4版本。

Category:

Qt5的ruby语言绑定实现系列: Clang AST 树遍历优化

目前要实现查找AST树中匹配方法或者函数symbol符号名字的Decl,通过遍历AST树方式实现。
但是,现在这个方式耗时很多,占用整个过程的50%时间,希望能在这个点上优化掉接近一半的时间。

以下就这个功能特点,分析整理可能的优化机制。

虽然所有是在整个AST树中,但实际不需要在整个树的根开始查找,而是从树的一个节点开始。
遍历过程,可能要加入新的新的结点。

实现上,可以看作一个森林数据结构,初始状态时,森林只有一个根节点。
执行过程中,遍历遇到另个函数声明,如果在这次调用中需要,则需要把这个节点加入到森林中,作为森林的一个新的根节点。

根据以上分析,实现执行会有回溯过程,并且回溯时的节点也变化了。
可以暂时把这种方式叫做回溯遍历方法。

考虑到这个过程,只需要关注inline的方法或者函数,可以不断进行深度遍历,
在整个遍历路径上遇符合条件的节点,回调执行相应的处理函数。
如果遍历方式没有问题的话,应该能够一次遍历完成所有的处理工作。
暂时把这种方式叫做单次扩展遍历方法。

分析完功能需求和可能的方式,接下来分析clang提供的遍历相关功能。

cgo封装C库总结

简介

cgo是go语言提供的一种与C语言相互调用的方式。

cgo能够让开发者直接在.go源代码文件中嵌入C代码。

在嵌入的C代码比较长的时候,还允许在分离.c文件中编写C代码。

cgo的基本处理机制是,根据特定格式的cgo指令,解析出C源代码和编译参数,

调用gcc编译并把结构合并到最终二进制程序中。

带来的问题,编译速度慢了很多。 两种模型,

cgo用法:

声明使用cgo

在.go文件中,插入这么几行,表示开启cgo功能:

/*

*/

import "C"

其实这并不是一个简单的开关,而是特定的语法序列标识,当go解析器遇到该语法序列时,

自动进入cgo模式,处理与cgo有关的功能。

注意,这个注释确实是注释,并没有写错。在这个注释段能够添加C源代码。

一般把这个块叫做“C语言嵌入注释块”。

还有一个需要注意的是在注释结尾处,要紧跟着import "C"语句,否则这块注释会被当作注释忽略了。

一种Qt5的Ruby语言绑定方式

ruby语言不再那么热门之后,对Qt的绑定项目支持的人数变少,进度比较慢。
自己本着学习llvm/clang和ruby语言的目的,试着实现了一个支持Qt5的ruby语言绑定。

目前该项目的状态是,已经能够使用ruby编写简单的Qt5程序,但还有许多不完善的地方,需求大量后续工作进行完善。

如果有兴趣欢迎参与。

项目代码:https://github.com/kitech/ruby-jit-qt

Category:

另一种Qt的Ruby语言绑定方式

hyperdex 不同数据类型hash算法

hyperdex使用hyperspace hashing算法对记录的每个字段做哈希, 并且所有字段的哈希值作为每个维度的值映射到多维度空间中的一个点上。

通过化分多维空间的方式,把所有的记录分布到不同的存储节点上,实现hyperdex的分布式NoSQL功能。

对于hyperdex的实现,它所支持的土原子数据类型各自有不同的哈希算法,

原子类型有float,int64,string,每种类型的哈希算法如下:

一、hyperdex数据类型

字符串,长度限制???

int64类型,

float类型,

二、hyperdex容器数据类型

list列表类型,

set集合类型,

map映射类型,

三、不同数据类型的hash值计算

字符串类型hash算法

使用cityhash算法计算该字段值的hash值。

int64类型hash算法

unpack64le 把值高字节与低字节交换位置,64位为8个字节,即1,8交换,2,7交换,3,6交换,4,5交换

Qt 5.3 正式版发布

Qt 5.3正式版发布了;发布会 click:May 20th, 2014

5.3新特性:

Category:

页面

订阅 RSS - C++


Main menu 2

by Dr. Radut