hypher 将30种自然语言塞到1.1M空间内
这篇博文是关于hypher的,一个用于Rust的连字符解析库。
作者正在开发一个名为Typst
的纯rust实现的 LaTeX替代品。为了获得与 LaTeX 相同的解析结果,Typst
需要对连字符的支持。在 docs.rs上的快速搜索显示,真正相关的库只有一个,恰好就叫 hyphenation
。这个库有很多功能,支持很多语言。然而,它也有相当大的二进制开销(2.8MB)。虽然可以在运行时加载模式文件,但单独分发模式文件显然比直接嵌入它们要复杂得多。除此之外还遇到了一些因为频繁加载导致的性能问题,
于是作者决定建立一个新的crate,目标如下。没有分配,在运行时没有加载,更少的二进制开销和最小的依赖性。最终实现了将30种自然语言的音节解析塞到了1.1MB的空间内。
ReadMore: https://laurmaedje.github.io/posts/hypher/
flashmap 一个无锁的并发安全的 hashmap
一个无锁、部分无等待、最终一致、并发安全的 hashmap。极其快速的读取的代价是,当一个写被执行时,所有的读线程只有在完成他们的最后一次读并开始一个新的读时才会观察到这个写。
flashmap 是为读取远远大于写入的场景而优化的,适合使用的情况包括:
- 偶尔插入/删除的高频率读取
- 通过内部可变性对现有条目进行高频率的修改,并偶尔的插入/删除
- 高频读取,另一个线程执行适度的写入数据
不宜 flashmap 的情况包括:
- 频繁的、小规模的写入,不能分批进行
- 来自多个线程的并发写访问
ReadMore: https://github.com/Cassy343/flashmap
From 日报小组 Koalr
社区学习交流平台订阅:
- Rustcc论坛: 支持rss
- 微信公众号:Rust语言中文社区