Rust编译器得到LLVM的支持,LLVM是具有高效优化器的成熟基础架构 。它也可以针对WebAssembly,这使Web应用程序可以用Rust编写,并且可以允许在沙箱中运行不受信任的代码 。
效率Rust速度很快,运行速度可与C媲美 。因为它没有垃圾收集器,所以没有隐藏的成本-即使没有停顿,GC代码也会在单独的线程中运行并消耗资源 。
由于注重效率,因此社区很容易为所有事情运行基准 。因为代码共享既简单又安全,所以我们可以重用高性能的数据结构 。Bryan Cantrill在最近的博客中比较了程序的C版本和Rust版本,并将40%的运行时改进归因于使用了BTreeSet,这是Rust标准集合中的现成可用的高效数据结构 。
Rust使用户可以控制其数据结构的内存布局,并使间接表达明确 。这不仅有助于编写缓存友好的代码,而且还可以与C接口 。Rust的FFI与C一样简单,没有开销,这使得调用任何系统原语都很容易(但不安全,应适当包装) 。我们不愿意在Java中执行此操作,特别是出于稳定性方面的考虑-段错误将使JVM崩溃-但这可能很有用 。例如,最快的Java Web服务器之一正在使用JNI调用Linux的epoll,并且似乎比Java的标准无阻塞网络库NIO更好 。
说到这一点,如果我们阻塞了一个等待IO的线程,那就太快了 。Rust具有零成本的期货,包括无阻塞,反压的流 。因为期货和流链接可能变得很冗长,所以可能已经使用async / await编写了惯用的Rust代码之类的异步代码 。现在,await被实现为一个宏,但是正在进行使它成为标准Rust功能的工作 。
Rust的旗舰无阻塞IO库Tokio建立在期货的基础上,为无阻塞编程提供了一致且流畅的抽象 。Web框架使用Hyper HTTP库依次使用Tokio 。
在我看来,Rust的核心开发人员一直在积极寻求更好的想法,这是对Sun指导Java很久的"此处未发明"综合症的一种令人耳目一新的变化 。在这些好主意中,Rust的特性和缺乏结构继承性提供了出色的设计原语,可帮助构建模块化且可维护的系统 。
Rust开发人员在错误处理方面有了另一个不错的选择 。Rust具有Result <T,E>类型,可以是具有成功值的Ok(T)或具有错误的Err(E) 。Haskell程序员将识别出两种类型 。使用常规结构处理错误意味着可以使用所有常用的机制-包括模式匹配,将Result作为值传递或序列化它 。
Rust还使用特质使代码不那么冗长 。像Java的Iterable及其foreach循环,或Haskell的monad表示法一样,Rust除了特质外还使用了一些健康的语法糖,可以轻松构建自然的类型 。
例如,当尝试使用+操作时,将使用Rust的std :: ops :: Add特性 。运算符重载在C ++中总是带来负面影响,但这也是Python在数据分析方面如此强大的一个重要原因 。Numpy的数组和矩阵可以方便地支持我们在纸上使用的相同运算符 。为了防止冲突,Rust仅允许定义特征的模块或定义目标类型的模块实现特征 。这是进行自定义Point类型支持汇总的简单示例 。
社区与生态系统可以看到Rust社区多年来为该语言及其生态系统做出的巨大努力 。他们使从Rust开始的体验非常愉快和热情 。我发现了一种精神,使所谓的"锈病"变得动人心魄 。
Rust拥有官方论坛和讨论渠道,您可以在其中获得帮助,并可以与核心开发人员讨论技术问题 。一切都是公开开发和辩论的,欢迎贡献 。
每周时事通讯会提供更新和不断改进的感觉 。它选出了"每周一箱",以宣传社区的努力 。它要求就问题进行帮助,有时甚至在Rust官方发行版中也是如此 。
Rust社区在GitHub上非常活跃,并将许多问题标记为任何想成为贡献者的"第一好问题" 。实际上,Rust中没有像Apache或Eclipse这样的开源基金会,但是有很强的自由软件文化 。Mozilla提供了Rust的赞助-许多核心开发人员都是Mozilla的雇员-但随后许多大型项目仍然存在于单独的GitHub帐户上 。
社区仍然很紧张,每个人都在共同努力以建立一个完整的生态系统 。为了安全起见,Rust开发人员基本上重写了所有内容,以尽可能地依赖Rust代码而不是包装的C,C ++或Go库 。
开发人员可以将其包装箱发布到crates.io 。Rust标准库很小,甚至是可选的,通过设计,大多数常用功能的开发(例如期货,序列化或日志记录)都发生在不同的包装箱中 。一些包装箱是通过RFC流程标准化的 。
由于其品质和社区,Rust吸引了很多人才 。Rust具有出色的密码学生态系统,用于并发和数据并行性的库 。您可能对使用QUIC感兴趣吗? 有一个图书馆! 您是否在考虑Haskell的Quickcheck? 校验! 还是模糊测试? GTK +用户界面? 没问题! 您喜欢GraalVM吗? 鲁斯特有HolyJit! Nom和Pest是用于解析的两个库 。人们在Rust中编写OpenGL视频游戏,其他人则编写网络服务或WebAssembly VM 。
推荐阅读
- 杨国忠为什么说安禄山会反 安禄山与杨国忠的矛盾
- 三国赵云与樊氏 赵云的妻子樊氏
- 绿茶与咽喉炎,舒缓咽喉炎
- 山楂葡萄干泡水的功效
- 一起跟刘邦从沛县出来的将领?沛县县令与刘邦的关系
- 安溪茶的功效与作用,茉莉毛尖属于什么茶茉莉花茶毛尖的功效与作用
- 白茶饼的功效与禁忌,胖大海的禁忌与功效作用
- 安史之乱的唐玄宗与杨贵妃跑到哪地方? 唐玄宗赐死杨贵妃时的心情
- 安眠茶功效及作用介绍,洋甘菊茶的功效与作用
- 万历朝鲜之役时,丰臣秀吉为何相信能和明朝长期抗衡-?丰臣秀吉与明朝的战争