从今天开始,「每日新闻」会增加一些试验内容,选择翻译一些文章,时间有限,选择连载的方式。
「Solana 、Zcash 和Parity 三家会面讨论为什么Rust适合区块链开发 」连载1
内容里涉及的人物我不清楚他们具体谁是对应哪家公司,但可能通过聊天内容猜的出来。
正文:
Anatoly: 我的Rust经历实际上是来自于上一份工作,在Dropbox的时候,用Rust编写压缩相关的工作。当时,没有使用标准库的内存分配器,自己实现了一个类型安全的沙箱。非常酷。但是在开始这个项目之前,Rust并没有吸引我。 我用了两周时间使用C语言,但是当用到一些外部库的时候,还得写makefile,手动下载这些库,比较麻烦。所以,我决定尝试一下Rust。就在那一刻,“Holy shit, this is amazing.”。我才觉醒到,这是一个和C语言一样快的语言,并且还给了我Haskell般的类型安全。Rust击中了我,这真的很酷。
Jack: Rust击中我并不是因为速度或者其他因素。那是很久以后的事了,就像我现在才非常关心编写正式的Rust代码,才发现Rust中真正有趣的东西。(慢热) 但是最初的时候是因为我之前写C#,总是碰到运行时错误。因为这种动态类型,完全没有经过类型检查。我都无法列出遇到过的运行时错误数量了,感觉随便一个简单的操作都能碰到错误。给我的感觉是,这根本不像是编程,因为我还得处理这些运行时的错误(代码里感觉像多了很多“废话”,不精炼)。但是Rust就没有这种感觉。我喜欢Rust的人体工程学,比如包管理、类型安全和Null指针安全等。
Anatoly: Sean呢?
Sean: 是的,对我来说也是一样的。速度,可以说是一个我为什么用Rust工作的合理的解释。我可以说,“哦,好吧,它非常快,而且很容易合作,而且非常容易审核”等等。 但实际上,当我第一次学习Rust的时候,我的感觉是,“我再次爱上了编程”。因为我不太想再次求助于Haskell了(在某些情况下)。当然,Haskell很棒。
Jack:Haskell有太多的return废话了。
Sean: Rust将我的编程心智模型和程序思维恰到好处的结合了起来,我太喜欢这些概念了。当我第一次使用Rust的时候,它和现在有很大不同,还有垃圾回收之类的内容。但是过去这几年发生了变化,随着时间的推移它会更加优雅。我想这就是为什么我非常喜欢它的原因之一,就是我看到它的改进比原来越来越好。
Greg: 这些年我涉足了很多不同的编程语言。C、C++、Haskell、Python等。而且每一次,我都尽力在每个项目上只选择两种语言。我会说,“好吧,如果我想做这些高级的东西,我会选择Python,如果我想选函数式类型的东西,我会选Haskell,当我想做一些底层的东西,我会选C++”。我在这些跨语言交互过渡中被折磨了多次。这真的非常艰难,尤其是涉及垃圾回收的时候,实际上不可组合。 然后,C++那里没有垃圾回收也没有安全性可言。如果你用C++给Python写个插件,突然间你的程序就崩溃了。它不应该崩溃,对吗?但它就是崩溃了。因此,Rust对我来说,就是一股新鲜空气。我现在使用Rust这一种语言就可以完成整个软件堆栈的绝大部分功能,而不必切换语言了。
Jack: 我认为C++其实也不是完全不安全的。它还是安全的,但它的安全只存在于简单的情况下,但是当处理复杂的情况,就不安全了。表现就像安全性是一个谎言一样。
Greg: 你是指未定义行为吧?
Jack: 是的。
Greg: 所以,假设你的程序有一个整数溢出,它只是在你正在使用的编译器中出现,但是在语言定义中并没有定义整数溢出的情况,这就是未定义行为。你的编译器允许是允许做任何事情的,任何事情。 当然,它也许不会出现在你正使用的编译器中。然后你升级编译器,它就崩溃了。或者它在其他人的库中发生崩溃,因为它们有整数溢出,这就很烦。
Jack: 我的意思是,像Linux内核禁用了空指针检查优化(-fno-delete-null-pointer-checks , GCC会默认把空指针检查优化掉)。这是因为曾经有一个错误,是编译器将空指针检查优化掉了,也就是说,把空指针检查给删除了。这就导致Linux内核的安全性大大降低,所以Linux内核要禁止这种优化。 当我想到Rust,只要Rust的不安全规则是正确的,那么建立在这些不安全上面的一切也是正确的。(就像Linux禁止空指针检查优化那样,建立不安全规则,在这个规则之上构建安全)
Sean:是的,所以说Rust实际上是有一层抽象的屏障,将安全作为第一等概念,因为在语言层面unsafe是第一等概念。
「未完待续」
将CUDA Path Tracer 移植到ptx-builder/linker
该文作者一直致力于将Rust应用于CUDA。目前他还不建议用Rust应用于CUDA,但是他认为现在已经有了稳定的基础。
该文记录了PTX链接器和相关构建脚本,因此可以在Rust里可靠地构建CUDA内核,这是朝Rust的GPGPU迈出重要的一步。
witnet 月报
Witnet去中心Oracle网络协议(Witnet Decentralized Oracle Network protocol)的第一个开源实现,是witnet-rust
Witnet协议将智能合约连接到任何在线数据源,例如股票价格,天气预报,以及其他区块链,该协议由被称为目击者的分布式矿工节点运行,这些节点可以检索并向智能合约提交数据从而获得代币奖励,建立一个分布式的,不可更改的,抗审查的数据档案。
witnet-rust 包括了一些区块链组件,比如持久化区块链的存储引擎等, 2019年会发布测试网络。感兴趣的可以看看。
「远程工作」编译器和分布式系统工程师
公司(很可能没有公司)在悉尼,但是你可以在全球任何地方工作。 但可能只是临时工,并且可能只提供1-2个月的工资。 不过想参与到编译器和分布式开发的开源项目的人,也可以关注下。
评论区
写评论还没有评论