写一个最快的 JSON Library

2020-10-21 11:41:39 +08:00
 ibireme

之前也写过一些 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 了,大家可以先猜猜看为什么这么快~

11128 次点击
所在节点    C
71 条回复
wzzzx
2020-10-21 23:02:16 +08:00
弱弱问一句,为什么使用 C89,不使用 C99 ?
creanme
2020-10-21 23:02:38 +08:00
给大佬递茶🍵
IvanLi127
2020-10-22 00:09:18 +08:00
给大佬递枸杞茶
lisonfan
2020-10-22 00:27:17 +08:00
给大佬端一杯卡布奇诺

还做 iOS 吗? YYKit 还继续维护吗?
mathzhaoliang
2020-10-22 08:10:03 +08:00
大佬能在文章里讲讲代码结构么,我感觉单独看一行还能看懂,连起来就不知道在写什么了。
polymerdg
2020-10-22 08:35:54 +08:00
C 大佬
yangshebing
2020-10-22 09:28:48 +08:00
很好,很强大
arnoldxiao
2020-10-22 09:59:51 +08:00
又见大佬出山
nicebird
2020-10-22 10:20:08 +08:00
很猛的样子,
BreadBig
2020-10-22 10:30:38 +08:00
敬仰 大佬
zjddp
2020-10-22 10:39:42 +08:00
YYKit 大佬!
arthasliu
2020-10-22 11:52:11 +08:00
给大佬递茶🍵
ibireme
2020-10-22 13:19:10 +08:00
@mathzhaoliang 从外面的 json_read 和 json_write 入口看进来就挺清晰了,代码里面是按功能分开的,数据结构可以看这里: https://github.com/ibireme/yyjson/blob/master/doc/DataStructure.md
ibireme
2020-10-22 13:22:21 +08:00
@wzzzx 其实用到 C99 的 stdint 和 stdbool,但加一点兼容逻辑就能适配 C89 了。有些编译器比如旧一点的 msvc 是不支持完整 C99 的。
codyfeng
2020-10-22 13:38:36 +08:00
牛啊,膜拜一下
mathzhaoliang
2020-10-22 13:48:23 +08:00
@ibireme 那个 md 文档我能看懂,多谢。顺便问下为什么你的项目名字都带个 yy ?
KeyboardManAnAn
2020-10-22 16:29:06 +08:00
既然是使用的 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

也是时候排上日程表了 (滑鸡
KeyboardManAnAn
2020-10-22 16:36:27 +08:00
@mathzhaoliang 早期 iOS 开发语言是 Objective-C ,因为没有命名空间,为了防止命名冲突,都会在自定义的类前面加上自己的名字(或者是项目的名字,或者是公司的名字)的缩写前缀, 以作区别. 现在大佬的项目还是加上 yy 前缀(大佬个人名字的汉语拼音缩写), 可能是历史遗留问题, 可能是强迫症使然, 不过更多可能的是品牌策略(🐶🐶🐶)
KeyboardManAnAn
2020-10-22 16:40:28 +08:00
@TangMonk 大佬的博客中有相关自述, 参见 https://blog.ibireme.com/2017/09/01/diary/#more-42043
thisisgpy
2020-10-22 17:55:29 +08:00
大老牛逼,但是违反广告法了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/717021

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX