之前也写过一些 JSON 解析,但感觉这类东西到处都有也没太大价值。 去年出现了 simdjson,使用 AVX2 和 NEON 来解析 JSON,号称是第一个达到 GB/s 的 JSON 解析库。 于是我就好奇在不使用 SIMD 的情况下 JSON 解析性能究竟能达到什么程度。
这个是我空闲时写的库,C89 、跨平台,对 JSON 可读可写,符合 RFC 标准: https://github.com/ibireme/yyjson
至于性能,在新一些的 x64 上通常比 simdjson 快一点,在旧 x64 和 arm64 上比 simdjson 快很多, 可以吹一下这是目前为止最快的 JSON Library 了,大家可以先猜猜看为什么这么快~
1
gugogo 2020 年 10 月 21 日
身体咋样啦
|
2
jzyff 2020 年 10 月 21 日
比 RapidJSON 快吗
|
3
felixin 2020 年 10 月 21 日 via Android
给大佬递茶🍵
|
4
fengjianxinghun 2020 年 10 月 21 日
大佬牛逼!
|
5
ytll21 2020 年 10 月 21 日
给大神点个赞
|
6
eudore 2020 年 10 月 21 日
大佬 6666666
|
7
fengjianxinghun 2020 年 10 月 21 日
编译器 128bit 支持?
编译器内建 clzll/BitScanReverse 这种? |
9
ibireme OP @fengjianxinghun 编译器不支持就没用啊,而且只在处理长浮点数时能快一点,普通 JSON 根本用不到。
|
10
fwee 2020 年 10 月 21 日
为什么比 SIMD 还要快?
|
11
littlewing 2020 年 10 月 21 日
可以分享一下为什么这么快吗?
|
12
ibireme OP |
13
myqoo 2020 年 10 月 21 日 要是能熟读 strlen, memcpy 等常用函数的内部实现细节,就可以充分利用硬件特性做优化。当年第一次看时被各种奇技淫巧震惊到。
|
14
beidounanxizi 2020 年 10 月 21 日
不相信,发一篇吹牛 PPT 看看呗 🐶
|
15
ryan0wang 2020 年 10 月 21 日 via Android
大佬牛逼
|
16
yazinnnn 2020 年 10 月 21 日
大佬牛逼!
|
17
neighbads 2020 年 10 月 21 日
蹲一个文章分享。。大佬 NB
|
18
nonduality 2020 年 10 月 21 日
大神能顺手 port 一个到 python 么?
ultrajason 在 Alpine Linux 下编译安装不方便,一直想找个高速的 json 库代替 python 内置的。 |
19
FH0 2020 年 10 月 21 日
star 了,c 语言难以企及的高度。想知道楼主做什么工作。
|
20
raaaaaar 2020 年 10 月 21 日 via Android
强
|
21
beyondex 2020 年 10 月 21 日
大佬,牛逼了
|
22
momo1999 2020 年 10 月 21 日
给大佬递茶🍵
|
23
yuanbo6 2020 年 10 月 21 日
大佬牛逼
|
25
youla 2020 年 10 月 21 日
等一个 yyjsonSharp
|
26
knightdf 2020 年 10 月 21 日
@nonduality ujson
|
27
zhangdasen 2020 年 10 月 21 日
变态
|
28
youxiachai 2020 年 10 月 21 日
忽然发现..这是 YY 系列组件大神...看来是病好了?
|
29
ydatong 2020 年 10 月 21 日 via iPhone
膜拜 yykit 大佬
|
31
BoarBoar 2020 年 10 月 21 日
身为同行感觉我们玩的不是一个游戏
|
32
ibireme OP |
34
justin2018 2020 年 10 月 21 日
YY 大佬~
|
35
Jasio 2020 年 10 月 21 日
给大佬递茶🍵
|
36
inframe 2020 年 10 月 21 日
给大佬递茶🍵
|
37
refine 2020 年 10 月 21 日
给大佬倒波波茶
|
38
Raven316 2020 年 10 月 21 日
给大佬递茶🍵
|
39
whypool 2020 年 10 月 21 日
给大佬递茶🍵
|
40
loveuqian 2020 年 10 月 21 日
这是 YY 吧?膜拜一下
|
41
wzzzx 2020 年 10 月 21 日
弱弱问一句,为什么使用 C89,不使用 C99 ?
|
42
creanme 2020 年 10 月 21 日
给大佬递茶🍵
|
43
IvanLi127 2020 年 10 月 22 日 via Android
给大佬递枸杞茶
|
44
lisonfan 2020 年 10 月 22 日 via iPhone
给大佬端一杯卡布奇诺
还做 iOS 吗? YYKit 还继续维护吗? |
45
mathzhaoliang 2020 年 10 月 22 日
大佬能在文章里讲讲代码结构么,我感觉单独看一行还能看懂,连起来就不知道在写什么了。
|
46
polymerdg 2020 年 10 月 22 日
C 大佬
|
47
yangshebing 2020 年 10 月 22 日
很好,很强大
|
48
arnoldxiao 2020 年 10 月 22 日
又见大佬出山
|
49
nicebird 2020 年 10 月 22 日
很猛的样子,
|
50
BreadBig 2020 年 10 月 22 日
敬仰 大佬
|
51
zjddp 2020 年 10 月 22 日
YYKit 大佬!
|
52
arthasliu 2020 年 10 月 22 日
给大佬递茶🍵
|
53
ibireme OP @mathzhaoliang 从外面的 json_read 和 json_write 入口看进来就挺清晰了,代码里面是按功能分开的,数据结构可以看这里: https://github.com/ibireme/yyjson/blob/master/doc/DataStructure.md
|
54
ibireme OP @wzzzx 其实用到 C99 的 stdint 和 stdbool,但加一点兼容逻辑就能适配 C89 了。有些编译器比如旧一点的 msvc 是不支持完整 C99 的。
|
55
codyfeng 2020 年 10 月 22 日 via Android
牛啊,膜拜一下
|
56
mathzhaoliang 2020 年 10 月 22 日
@ibireme 那个 md 文档我能看懂,多谢。顺便问下为什么你的项目名字都带个 yy ?
|
57
KeyboardManAnAn 2020 年 10 月 22 日
既然是使用的 C 语言编写的,那理论上岂不是几乎可以嵌入到任意语言和平台?
yyjson-Objective-C for iOS yyjson-Swift for iOS yyjson-Java for Android yyjson-Kotlin for Android yyjson-C# for Xamarin yyjson-dart for flutter 也是时候排上日程表了 (滑鸡 |
58
KeyboardManAnAn 2020 年 10 月 22 日
@mathzhaoliang 早期 iOS 开发语言是 Objective-C ,因为没有命名空间,为了防止命名冲突,都会在自定义的类前面加上自己的名字(或者是项目的名字,或者是公司的名字)的缩写前缀, 以作区别. 现在大佬的项目还是加上 yy 前缀(大佬个人名字的汉语拼音缩写), 可能是历史遗留问题, 可能是强迫症使然, 不过更多可能的是品牌策略(🐶🐶🐶)
|
59
KeyboardManAnAn 2020 年 10 月 22 日
@TangMonk 大佬的博客中有相关自述, 参见 https://blog.ibireme.com/2017/09/01/diary/#more-42043
|
60
thisisgpy 2020 年 10 月 22 日 大老牛逼,但是违反广告法了。
|
61
andyhuzhill 2020 年 10 月 22 日
@ibireme #54 话说 msvc 跳过 c99 开始支持 c11 和 c17 了
|
62
nonduality 2020 年 10 月 22 日
@KeyboardManAnAn yyjson 是 ANSI C 写的,可移植性强,能适应全平台、多语言,期待 yyjson 站到相当于 sqlite 的地位。前些天大牛 Agentzh 也说写了一个极其高效的 json 库,可惜目前不开源。
另,继续期待尽早支持 python,因为 rapidjson 是 rust 写的(编译不方便),ultrajson 不支持 musl 库(在 Alpine Linux 用起来别扭) @ibireme |
63
onevcat 2020 年 10 月 22 日
给大佬递茶🍵
|
64
exceldream 2020 年 10 月 22 日 via Android
为什么不叫 rocket json
|
65
Guaidaodl 2020 年 10 月 22 日
给大佬跪下了.
|
66
KeyboardManAnAn 2020 年 10 月 23 日 via iPhone
@onevcat 大佬给大佬递茶🍵🍵🍵
|
67
erpapa 2020 年 10 月 26 日
给大佬递茶🍵
|
68
nonduality 2020 年 10 月 28 日
对了,以你的 C 代码功力,章亦春很可能会要你,记得他创办的公司允许远程工作,兴许你可以看下他现在招不招人 github.com/agentzh weibo.com/agentzh
|
69
DinoStray 2021 年 1 月 7 日
研究了一下, 觉得不敢用, 个人能力问题, 源码理解实在困难. 而且 C 的 API, 用在 CPP 还是太别扭了.
|
70
sunblackshine 2021 年 6 月 11 日
我就一个问题,yy 是啥缩写
|
71
Erwinan 2021 年 9 月 9 日
给大佬递茶🍵
|