【Rust每日新闻】 2018-11-15
rand库 0.6版发布
「嵌入式工作组」嵌入式Rust年度回顾
#embedded #2018
今年嵌入式工作组开始构建Rust生态系统茁壮成长需要的坚实基础。这篇文章回顾当前进展并分享了今年所取得的成就。
嵌入式Rust稳定性:
稳定性:2018年嵌入式路线规划的一个最基本功能是:我的crate在升级到最新工具链时不应该被破坏。嵌入式开发从一开始就紧密和nightly相连,在一定时间内大家经历了很多重大变化。幸运的是,随着Rust 1.30的发布,这些痛苦都结束了。 Rust 1.30标志着嵌入式Rust开发迎来的第一个稳定版本。你可以在不依赖unstable功能的情况下构建出完整可用的嵌入式程序。
此外,还在编译器测试套件中提供了一些单元测试来检测嵌入式代码,因此,在Nightly之下也能检测到一些意外的break。
一个平稳的起点:
「我如何开始使用嵌入式Rust?」,这是长期存在于IRC的一个问题。但是想回答这个问题并不容易,因为维护长期依赖于unstable功能的文档是一场艰苦的战斗。所以,新手会经常看到过时的文档。
但是现在,稳定的嵌入式Rust已经准备好了。官方整合了一个权威稳定的文档给大家:《嵌入式之书(Embedded Rust Book)》。在一些模板和工具的帮助下,尽量使得第一次使用嵌入式Rust的开发者感受到丝般顺滑的体验。
《嵌入式之书》不仅仅是一本入门指南,它也包含着如何使用Rust编写正确的嵌入式软件。目前官方正在积极往里面添加更多的模式和开发技巧。
面向所有人群的学习资源
《嵌入式之书》是面向有嵌入式开发经验的人,但官方也意识到,Rust是有很大潜力可以成为任何开发者尝试嵌入式开发的首选语言。所以,官方还在继续努力研究提供相关的资源,比如面向人群的 《探索之书(Discovery)》。
另外,官方也知道嵌入式Rust目标受众对嵌入式系统领域的兴趣点和专业度都不太相同,所以官方推出了《嵌入式黑魔法(embedonomicon)》,并收集更多针对性的资源,比如各种awesome的第三方库列表。
当然,上面列出的资源,都可以在嵌入式文档站点找到。
有组织的社区成就
所有这一切都是通过很多志愿者、工作组成员和其他社区成员辛勤工作完成的。特别是工作组成员致力于维护生态系统所依赖的核心crate和文档。所有的这一切都是在Rust嵌入式工作组的庇护下进行的。
WG团队
嵌入式领域非常庞大: 在这个领域中存在多种架构体系。许多应用领域和嵌入式开发者使用不同的约束(constraint)集:实时约束(real-time constraints)、内存约束(memory constraints)、能量/功率约束(energy/power constraints)等。
出于这个原因,官方嵌入式WG团队通过增加不同专业领域的成员,并在工作组内发展和创建相关领域的专业团队。这保证了核心库中API设计在决策时,以及将嵌入式社区的需求传达给其他Rust工作组时可以产生不同的观点。拥有专业的团队也意味着在组织开发crate时,可以分配给具有适合相关技术背景的人。
即将迎来的Rust 2018
在Rust 2018即将发布的最后期限内,嵌入式工作组的重点是「文档」。这也需要大家的帮助。一个重要的事项:文档使用了2018版本,所以建议大家使用Rust beta版来测试文档。
超越2018
Rust 2018只是嵌入式Rust开发的一个起点。当前,嵌入式Rust支持的最成熟的的目标架构是「ARM Cortex-M」,crates.io上面大多数crate都是针对此架构。但也已经为支持其他目标架构奠定了很好的基础。比如如裸机ARM Cortex-A、ARM Cortex-R、MSP430和RISCV。明年会继续在这些目标上努力。
此外,嵌入式工作组还在收集「愿望清单」,如果你希望2019年嵌入式Rust支持一些你想要的功能,现在是时候提交了。
「工具」static-filez: 可以帮助你压缩静态文件并允许通过http server访问它们
#static_file #compress #static_server #http
使用cargo doc的时候会产生很多小的html文件(大约10w个,每个10kb),这些文件其实并不常用,所以作者提供了这样一个工具,帮助你压缩这些文件,并且通过该工具提供的http server来在需要的时候查看这些文件。这样就可以省空间。而且也可以加速一些备份或杀毒软件扫描。
这篇文章记录了关于该crate实现的一些细节。
「算法」探索航线谜题
#shipping_puzzle
在这系列文章里,作者探索了一道算法题:航线谜题(shipping puzzle)
第二篇是Rust实现方案。
航线谜题:
给定一组航段(leg)集合,每条航段分别对应于一周内的一天,包括起点和终点:
M PDX SEA (周一 PDX SEA)
T PDX SFO (周二 PDX SFO)
T SEA DEN (周二 SEA DEN)
W DEN PDX (周三 DEN PDX)
R PDX DEN (周四 PDX DEN)
F DEN JFK (周五 DEN JFK)
如何将以上航段划分为单个飞机的航线,受以下条件限制:
- 一条航段的目的地必须与下一条航段的起点相匹配
- 飞机必须持续航行(比如,一条航线不能包括:星期一 西雅图 -> 波特兰,然后是星期三 波特兰 -> 塔科马,此航线飞机在周二是闲置的。)
满足这些限制的简单方案是,将每条航段看作是一条单独的航线,但是需要多架飞机,但是一架飞机可以连续飞行的航段也可以看作是一条航线。现在问题是,如何找到最少的路线,也就是找到最少的飞机数。在此例中,我们最少需要两条航线。一种可能的解决方案是:让一架飞机飞行PDX、SEA、DEN、PDX、DEN、JFK航线,并且第二架飞机只在周二从PDX飞到SFO。
这里有一个1w条航段的数据集。可以开干了。
lifeguard 0.6 发布
#object_pool
lifeguard是Rust实现的一个对象池管理库,用来创建可重用的值,避免不断分配新值造成的开销。
static-assertions 0.3发布
#static_assertions
该库可以实现编译时断言。
「区块链」零知识证明库Bulletproofs :pre-release版本发布
#bulletproofs #blockchain #zero_knowledge_proof
预发布版本号称性能大幅提升:
- 比libsecp实现快1.83倍(使用endomorphisms);
- 比libsecp实现快2.00倍(没有endomorphisms);
- 比Monero实施快4.63倍。
并且还提供了干净、安全可扩展的API。
Bulletproofs是由斯坦福大学应用加密学小组最近发表的一篇有关于保密交易的有效范围证明的研究论文,文中提出了一种可以大幅降低区块链存储数据大小(约为十倍)的方法。
是之前这个库ristretto-bulletproofs迁移到了新的仓库里。
每日新闻订阅地址:
欢迎通过GitHub issues投稿。