Reddit 有人发帖发问:谁“拥有” Rust 语言?[1] 。因为他最近听说 Google 打算在 Golang pipline 中内置 telemetry, 这是他不可接受的,他想寻找一门完全开源不受某个公司控制的编程语言。
Rust 语言的创造者 Graydon 亲自回复如下。
目前和 Rust 语言相关有两个组织:
Rust项目不接受基金会的指导,基金会也不接受项目的指导。它们并行存在,并且是大部分独立的实体,具有大部分独立的责任领域,尽管有几个人在两者中都扮演着角色。到目前为止,据我所知,他们之间没有发生任何严重的冲突,我也不太清楚如果有会发生什么。但基金会的任务是支持该项目,所以如果他们发现自己发生冲突,情况会有些奇怪。
stc 是用 Rust 编写的 TypeScript 类型检查器 ,目标是性能更好,使用 Rust 实现。该 stc 的 issue[2] 的作者认为,stc如果做好了,会因此而获得控制 TS 规范的能力。并且让stc作者转而去实现另外一个 类型化js的实现。
stc作者回复:“typescript 本身没有规范,所以我无法控制它。如果 TypeScript 有规范,情况会有所不同,但事实并非如此,如果有,tsc它本身就是规范。”
我的观点:人们肯定期望更好的工具,并且它会带走流量,这是自然规律。这个 issues 作者太奇葩了,人们不能阻止竞争对手的发展来迎合自己的用户,这才是不道德的。
#[must_use]
没有成为函数的默认值违背了“Rust 具有最安全的默认值”的原则reddit 一篇题为 《`#[must_use]`没有成为函数的默认值违背了“Rust 具有最安全的默认值”的原则》[3]的文章,引起了社区的讨论。
作者认为,Rust 犯了与 C++17 的[[nodiscard]]
属性相同的错误,他认为:
#[must_use]
下reddit 下面一些回复摘要:
F#
中的这是默认值。它之所以有效,是因为 F#
主要是一种函数式语言,因此您通常创建纯函数,结果应该用于进一步的计算。然而,在 F#
中编写命令式代码时,您经常需要使用ignore
。考虑到纯函数很少而且介于两者之间,这将成为 Rust 的一大麻烦”。#[must_use]
与安全无关,它是为了明确某些返回值(少数)值得处理。如果它成为默认值,它就失去了意义。更糟糕的是,如果成本高到人们禁用 lint,带来的结果也许更糟糕。”更多的讨论内容可以参考原帖。
blackberry 官方平台发文宣称[4],软件定义汽车(SDV) 领域需要 Rust 语言带来更多安全优势。
“BlackBerry和 Elektrobit[5] 最近汇集了他们的专业知识,共同支持 Rust,使开发人员能够构建安全、可靠和高效的汽车软件。Elektrobit 和BlackBerry QNX作为合作伙伴有着悠久的历史,并且拥有强大的、经过生产验证的业绩记录。Elektrobit 在 Rust 项目上与 BlackBerry QNX 密切合作,贡献代码,确保代码质量,处理项目管理,并与 Rust 程序员互动。
在GitHub 新代码搜索背后的技术[6]一文中,提到 Github 目前的代码搜索引擎基于 Rust 实现。具体来说,是用 Rust 完全从零开始构建一个专门用于代码搜索领域的引擎,代号为 Blackbird。它创建并增量维护一个由 Git blob 对象 ID 分片的代码搜索索引,最终 Blackbird 满足了大家的性能目标:速度非常快,索引也非常紧凑,重量约为(去重)语料库大小的 1/3。
在 GitHub CodeSearch 首页上,展示的代码图片是 rust-lang/rust
项目中的 wtf8.rs
模块。WTF-8[7](Wobbly Transformation Format − 8-bit)是UTF-8的超集。
最近一周 ChatGPT 爆火,微软也已经宣布将 ChatGPT 集成到最新的 Bing 搜索引擎中。ChatGPT 确实令人惊艳,不同于以往的人工智障,它好像是可以作为我们日常工作中的一个助手了。
gptcommit[8] 就是利用 OpenAI 的模型来辅助帮助开发者来自动编写 git commit 信息。
gptcommit 背后原理简单描述:
类似于下面条目:
[title]
- [summary point 1]
- [summary point 2...]
[/changed/file A]
- [file summary point 1]
- [file summary point 2...]
[/changed/file B...]
- [file summary point 1...]
说明,使用 gptcommit 你需要一个 OpenAI API 密钥(默认模型是 GPT-3)。更多信息可以参考gptcommit作者的博客[9]。
SDKMAN 是一款管理多版本 SDK 的工具,可以实现在多个版本间的快速切换。
sdkman-cli-native[10] 现在使用 Rust 实现。
Meilisearch[11] 是一个轻量的搜索引擎,可以轻松集成到你的应用和网站中。
近日,其发布了第一个稳定版本 1.0,完善了中文和韩文的语言支持,提高了索引和搜索的速度,提供了一键升级的特性,详细内容可以参考Meilisearch 发布日志[12]。
Qdrant[13] 是用于下一代 AI 应用程序的矢量搜索引擎和数据库,目前发布 1.0 版本。Qdrant 可用于语义文本搜索、相似图片搜索和电商商品分类等领域。
这个实验项目旨在提供一个符合人体工程学的适配器,用于构建与 S3 兼容的服务。
timeblok[15] 一个简单的声明式 DSL,它结合了纯文本的多功能性和可扩展性以及数字日历的便利性,可用于个人日历规划。
比如可以使用以下内容来描述工作日的一天安排:
2023-1-1
7:30am wake up & eat beakfast
8am~11:30 work on TimeBlok
- Write Technical Documentation
2pm~6pm Study for exams
8pm~10pm Reading
- Finish an entire book
timeblok 将上述内容“编译”为 .ics 文件,这是一种数字日历文件格式,大多数日历应用程序都支持这种格式,人类几乎无法阅读,但可以直接导入到日历中。
stackdump[16] 是基于 DWARF 格式用于栈转存和栈跟踪的调试库,目前仅支持 Cortex M。
更多信息可以参考stackdump 官方的详细文章[17]。
man-in-the-middle-proxy[18]是一个中间人代理,旨在提供网络流量可见性。目前,它同时显示 HTTP 和 HTTPS 请求和响应,但未来的目标是允许为更高级的用例操纵流量。该工具是对 mitmproxy[19] (Python 实现)的 Rust 实现,但项目还处于早期。
GitHub 其他 Rust 实现: mitmproxy_rs[20] 和 hudsucker[21] 。
[1]
Reddit 有人发帖发问:谁“拥有” Rust 语言?: https://www.reddit.com/r/rust/comments/10z6qnu/who_owns_rust/
[2]
stc 的 issue: https://github.com/dudykr/stc/issues/647
[3]
reddit 一篇题为 《#[must_use]
没有成为函数的默认值违背了“Rust 具有最安全的默认值”的原则》: https://www.reddit.com/r/rust/comments/10wz3am/must_use_not_being_the_default_on_functions_goes/
[4]
blackberry 官方平台发文宣称: https://blogs.blackberry.com/en/2023/02/this-is-the-kind-of-rust-the-automotive-industry-needs
[5]
Elektrobit: https://www.elektrobit.com/
[6]
GitHub 新代码搜索背后的技术: https://github.blog/2023-02-06-the-technology-behind-githubs-new-code-search/
[7]
WTF-8: https://simonsapin.github.io/wtf-8/
[8]
gptcommit: https://github.com/zurawiki/gptcommit
[9]
gptcommit作者的博客: https://zura.wiki/post/never-write-a-commit-message-again-with-the-help-of-gpt-3/
[10]
sdkman-cli-native: https://github.com/sdkman/sdkman-cli-native
[11]
Meilisearch: https://github.com/meilisearch/meilisearch
[12]
Meilisearch 发布日志: https://blog.meilisearch.com/whats-new-in-v1-0/
[13]
Qdrant: https://github.com/qdrant/qdrant
[14]
s3s: https://github.com/Nugine/s3s
[15]
timeblok: https://github.com/JettChenT/timeblok
[16]
stackdump: https://github.com/tweedegolf/stackdump
[17]
stackdump 官方的详细文章: https://tweedegolf.nl/en/blog/82/crash-and-now-what
[18]
man-in-the-middle-proxy: https://github.com/emanuele-em/man-in-the-middle-proxy
[19]
mitmproxy: https://mitmproxy.org/
[20]
mitmproxy_rs: https://github.com/mitmproxy/mitmproxy_rs
[21]
hudsucker: https://github.com/omjadas/hudsucker
[22]
Rustproofing Linux: 研究如何将C驱动迁移到Rust上来的最佳实践系列文章: https://research.nccgroup.com/2023/02/06/rustproofing-linux-part-1-4-leaking-addresses/
[23]
减少 AccessKit(跨平台和编程语言的 UI 可访问性基础设施,Rust 实现) 的内存使用报告: https://accesskit.dev/dramatically-reducing-accesskits-memory-usage/
[24]
egui 的 PR: https://github.com/emilk/egui/commit/853d49272471cc930532798840f3101ae4bca81f
[25]
探讨如何使用 Rust 限制 Windows 上 DirectX 11 游戏的 FPS: https://zazama.de/blog/creating-an-fps-limiter-in-rust-by-hooking-directx
[26]
Video: 使用 nom-supreme 编写更好的解析器: https://www.youtube.com/watch?v=Ph7xHhBfH0w
[27]
nom-supreme: https://github.com/Lucretiel/nom-supreme
[28]
使用 Rust 和 PEG 编写解析器: https://blog.logrocket.com/building-rust-parser-pest-peg/
[29]
如果使用 Rustler 在 Elixir 项目中使用 Rust crate : https://mainmatter.com/blog/2023/02/01/using-rust-crates-in-elixir/
[30]
系列文章:探索 Rust 编写 Vulkan 驱动程序: https://www.collabora.com/news-and-blog/blog/2023/02/02/exploring-rust-for-vulkan-drivers-part-1/
[31]
PAC 上的 STM32F4 嵌入式 Rust:svd2rust: https://apollolabsblog.hashnode.dev/stm32f4-embedded-rust-at-the-pac-svd2rust
[32]
Tauri vs Iced vs egui:Rust GUI 框架性能比较(包括启动时间、输入滞后、调整大小测试): https://lukaskalbertodt.github.io/2023/02/03/tauri-iced-egui-performance-comparison.html
[33]
从 Erlang 到 Lunatic:一位 Eralng 程序员的 Rust 旅途: https://mattpo.pe/posts/from-erlang-to-lunatic/
[34]
Lunatic: https://github.com/lunatic-solutions/lunatic
[35]
submillisecond: https://github.com/lunatic-solutions/submillisecond