锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / yaml-cpp、yaml-cpp要点、yaml-cpp开源社区
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

yaml-cpp、yaml-cpp要点、yaml-cpp开源社区


近期研究rime的源代码,里面用了yaml-cpp,所以想写个文章,主要写yaml-cpp的代码剖析方面,随手写了一些,欢迎指正。

在rime里,yaml-cpp处理的文件有配置信息和码表文件,比如下面就是一个配置文件:

# Rime default settings
# encoding: utf-8

config_version: '0.40'

schema_list:
  - schema: luna_pinyin
  - schema: luna_pinyin_simp
  - schema: luna_pinyin_fluency
  - schema: bopomofo
  - schema: bopomofo_tw
  - schema: cangjie5
  - schema: stroke
  - schema: terra_pinyin

上面#是注释,config_version是个字符串变量,schema_list是个数组变量,下面行的-是数组的标志。

下面是码表行:

〇	ling
ㄓ	zhi
ㄔ	chi

码表行有几万行,最开始觉得yaml-cpp加载几万行,效率真够可以,后来发现yaml-cpp里的加载并不能实现这个功能,是另外的方式实现高效加载码表。在rime里,yaml文件和码表是可以放一起的,比较神奇。

yaml,从名称上有ml,这和html和xml都是一脉相承,文本标记,组织信息,只不过组织方式比json更简化,行文有点像python风格,书写比json少,所以更流行,一般新项目可以选用,旧项目从json升级到yaml也意义不大。

yaml对数据类型支持全面,比如数组和复合数组也都支持,所以在标准制订上有严格要求,所以json-cpp的代码也不像一般人想的那么简单,锐英源下载了yaml-cpp源代码后,发现源代码里任务量比较大,最大的文件emitter.cpp有24K,是比较大型的代码文件了,主要处理了节点组织和内容输出,是最重要的工作。emitterutils.cpp是emitter配套工具代码,节点和输出需要的依赖工具多,所以emitterutils.cpp是第二大文件,其它明显的文件有:scantoken.cpp,管理符号,emitterstate.cpp输出状态。

锐英源研究过读取ini的C++代码,300行就可以解决,但是yaml-cpp为什么有这么多源代码文件呢?基本上有数据类型、数组、节点管理、正则、状态机和文件IO的这类复杂标准的处理,代码都少不了,从多个方面构建处理模型是很复杂的任务,所以初学者想真正吃透C++,学习yaml-cpp有效果,如果想学yaml-cpp源代码,锐英源有开源服务,学精典开源代码,比死读书效果好太多了。


yaml-cpp开源社区
友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内