nom作者:不,Pest没有nom快
作者亲自做了基准测试:
- nom: - canada.json: 60,734,229 ns/iter (+/- 17,775,618) - data.json: 23,937 ns/iter (+/- 9,992)
- pest:
- canada.json: 35,041,472 ns/iter (+/- 5,454,302)
- data.json: 14,665 ns/iter (+/- 2,041)
以上是没有将json转换为Rust的类型,当然Pest比nom快。但是如果用nom4然而不转换为Rust类型会是什么结果呢?
- pest:
- canada.json: 35,041,472 ns/iter (+/- 5,454,302)
- data.json: 14,665 ns/iter (+/- 2,041)
- nom_spans (returning slices instead of converting to Rust types):
- canada.json: 20,623,381 ns/iter (+/- 1,952,297)
- data.json: 10,757 ns/iter (+/- 1,462)
这个才是公平的测试,因为Pest并不会转换为Rust类型。显然这种情况下nom更快。
(火药味十足啊)
crates.io上流行的crate的作者都是谁 ?
作者写了简单的代码对最近截至2018年10月3日有超过10万次下载的crate进行统计,得出以下结果:
authors count
----------------------------
alexcrichton 61 packages
carllerche 20 packages
7 authors 16-8 packages
8 authors 5-3 packages
14 authors 2 packages
233 authors 1 package
看来Alex是Rust社区的顶梁柱啊
SM: 静态状态机
特点:
- 100%静态,避免任何运行时开销
- 以宏声明来构建状态机
- 纯状态、事件和转换
作者学习Rust的一个项目,值得学习。比如里面使用了最新的syn 0.15,API有所改变,正好看看最新的用法
Red Hat 静态存储项目 Stratis 1.0 发布
前两天刚介绍过,是一个易于使用的Linux本地存储管理工具。
在他们决定放弃Btrfs支持之后,Stratis已经开发了两年,用于提供下一代Linux存储。 Stratis提供ZFS和Btrfs之类的功能和许多其他新功能,而上周标志着它的第一个稳定版本。
很快就可以向Fedora用户提供Stratis 1.0用于评估,并且它很快就会出现在其他发行版中。 Stratis组件依赖于Linux 4.14 +,Python 3和Rust 1.25+。 但值得一提的是,Stratis D-Bus API还不稳定。
WebAssembly和动态内存
本文介绍了C/C++/Rust下如何在面向WebAssembly体系下进行动态内存分配,并分别比较了它们的工具链。
结论是:Rust的编译器和动态内存分配器wee_alloc的组合是明显的赢家,其生成的WebAssmebly代码非常精简,可以用在任何WebAssembly环境中。主要是因为Rust工具链没有其他的依赖。像Clang这种工具链依赖于emscripten,就导致无法在通用的WebAssembly环境中使用。
EasyReader:一个专用于读取大型文件的库
作者在两个项目中使用它,读取140GB左右的文件
Tokio文档计划
Tokio作者准备重整文档,现在需要社区帮助
- 阅读现有文档,反馈令人困惑的部分或留下未解决的问题。
- 在doc-push存储库上打开一个问题以报告混淆。
- 解决问题。
- 重复以上步骤。
Rust文字冒险游戏 2
「Solana 、Zcash 和Parity 三家会面讨论为什么Rust适合区块链开发 」连载3
Jack: 实际上Parity里并没有那么多unsafe代码。事实上,在我加入之前,到处都是unsafe,你知道,我们必须要压榨出最大的性能。因为C++开发者喜欢这种「安慰剂」般的优化。
Sean: “我不需要对它进行运行时检查”
Jack: 没错。
Sean: “我不想恐慌”
Jack: 恐慌或缓慢,你都不想要。我的意思是,未定义行为是非常不可琢磨。但是在某一个同事加入之后,他开始删除这些unsafe代码,从那时起,我们就开始越来越多地删除unsafe代码。现在就变得安全多了。 当然也有一些unsafe hack,比如底层有些内容是需要性能,实际上现在无法对其优化。比如我们有个hash算法,必须将两个数组连接在一起。我们将两个数组放到一个结构里,然后将其替换为C,然后在C中将两个数组连接,再转回Rust的一个数组。因为这样,明显更快。但这样的代码也没有太多。
Anatoly: 没错,但是,谁能在一天内完成所有代码呢?( 表达罗马并非一天建成的意思)
Jack: 我希望是一天。
Anatoly: 我的下一个问题是和安全相关的。比如,C和Haskell。我发现现代类型系统实际上也没有增加太多的东西,就像是多了很多简单标签的C。在使用这些高级抽象类型的时候,怎么样证明这些代码的意义?比如这些类型的抽象目的是为了给你提供一些保证和确定性,你从哪里看到这些效果?
Greg: 我认为它们会更加方便你编写代码。比如刚开始需求简单的时候,并不知道要用到哪些类型,那么就可以编写一个泛型的数组,这可以帮助我们跳出困境。但是,随着需求越来越多,我只需要简单的包装类型,就可以改造泛型数组。再加上类型检查,我认为这是一个有用的保障。
Jack:我认为你这是一种类型驱动开发的做法。
Greg:是的。
「待续」
评论区
写评论排第二
辛苦大佬整理了,手动点赞!
那个叫carllerche的也贡献很多