【Rust日报】2020-11-03 《Rust日报》总第1000期

2024-06-22 23:58
文章标签 rust 日报 2020 03 总第 1000

本文主要是介绍【Rust日报】2020-11-03 《Rust日报》总第1000期,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今日头版

《Rust日报》第1000期,感谢有你

两年半的时间,我们一期期走来,到了今天发行的第1000期。回想我第一次看《Rust日报》,还是在Rust 2018刚推出的时候。丰富的新闻和思考让我眼前一亮,我慢慢开始喜欢这样的报纸。每天浏览日报,已经成为许多Rust爱好者的生活习惯。

Rust日报社很高兴能和读者们共同进步,也很乐于见到更多的企业、研究团队开始关注这门编程技术。希望在未来的时间里,我们能更好地推广Rust语言,传递更多的社区开发知识,第一时间传播各地Rust开发者的动态和新闻。

加油,Rust爱好者们!

生态圈

内存数据交换格式Apache Arrow发布了v2.0.0版本

Apache Arrow项目定义了基于内存的数据格式,致力于解决系统与系统间的数据传输问题。目前此项目已经发布了重大的更新v2.0.0版本,其中包含的Rust子项目尤为重要。Apache Arrow PMC认为,Rust实现正在缩短与C/C++实现的功能差距,慢慢赶上功能最多的Java、C/C++版本。

本次更新的重点包含很多个模块。核心的“Arrow”模块包含了数据的表示,更新增加了原始类型数组的支持,现在它能从一个迭代器里被加载和转换。实现内部现在使用动态长度的数组,来统一32、64位平台间的差异。Arrow的运算内核也有了较大的改进,添加了大量针对字符串、整数的函数。运算内核现在能使用SIMD,将性能提升到五倍以上。针对不含空变量的数组,一些计算内核也有了优化,明显地提高了速度。另外,更多的计算内核被优化,来降低内存复制的次数。其它的优化包括增加了Array trait的应用程序接口,方便确认数组已经分配的内存大小。

针对列式存储格式Parquet的写入器也正在制作中。这个写入器包含重要的提升,比如支持嵌套的Arrow类型,和针对空值写入的优化等等。另外,更新也面对Arrow之上编写的DataFusion模块,它是一个查询器引擎,支持DataFrame和SQL两种接口。它现在支持更多的DataFrame接口,它的实现也综合利用了async/await语言特性,相比直接使用线程,它能优化多线程表现。

Arrow IPC是进程间交互和序列化的格式。Apache基金会在网站上描述了这个格式,期望包括在流中和文件中,交换Arrow数据的应用程序都使用这个格式。从前的1.0.0版本已经更新到了Arrow IPC的第五版,也有对第四版的兼容性设计。在全新的2.0.0版本,Arrow使用Rust语言实现这个数据格式,正在支持最新的第五版标准。

Arrow项目期望在下一个版本前,支持稳定的Rust发行版,支持更多的运行平台,提高和其它语言的兼容性。它是一个开源项目,欢迎所有的开源软件开发者提供支持和帮助。

Apache Arrow项目主页: https://arrow.apache.org/blog/2020/10/27/rust-2.0.0-release/

IntelliJ Rust发布第一百三十四期更新公告

知名集成开发环境公司Jetbrains更新了IntelliJ Rust开发插件。现在,IDEA企业版和RubyMine软件都已能在Windows平台上开发,虽然目前只支持MSVC工具链,并且需要安装特殊的插件。另外,加载项目的每个步骤,都在软件的“同步”栏界面有一定的显示,能更方便地查找项目加载中可能的错误。

一些小的功能更新包括,针对Rustc编译器、Clippy静态检查软件的代码补全已经被支持。在Cargo.toml配置文件中,可以通过“跳转到定义”功能,查找当前包特性的定义来源。使用F6按键的重构代码不仅支持跨文件、目录的移动,还能移动到另一个包。内置的Rust REPL工具提供了新的“:clear”命令,可以清空界面变量的类型信息。

本次更新还包括更多的修复,包括非零类型在调试中的显示、移动语义项时较好地处理换行,以及帮助新的开发者设置工具链等等。IntelliJ Rust在项目主页中,详细地说明了本次更新的所有修改和有关信息。

IntelliJ Rust项目主页: https://intellij-rust.github.io/2020/11/02/changelog-134.html

Rust-analyzer发布第四十九期更新公告

广泛应用的rust-analyzer代码分析软件发布了本次更新公告。现在,VSCode插件的内联提示将使用更小的字体,来提高类型提示等的可读性。遇到JSON-RPC的错误,现在将会产生可控的错误提示,而非直接停止运行。

本期更新包括一定量的修复和内部提升。语法高亮模块已做少量更改,来修复一种较为不常见的尖括号高亮错误问题。语句开头的负号也得到了高亮提示。针对特定模块的可见性描述符,它的表示模块做了一定修复,包括一些针对内联提示的语法高亮提示。在包根部的全局标签现在能被正常识别。现在,结构体的文档测试也已经被支持。

这次更新内部的优化包括更新依赖库LSP的版本,和更新Rust trait解析器chalk的版本号。

Rust-analyzer项目主页: https://rust-analyzer.github.io/thisweek/2020/11/02/changelog-49.html

async-smux:异步TCP连接流复用软件

作者@BlackBinary编写了这个项目。async-smux实现了smux网络协议,允许我们复用同一条TCP连接,以构建在其上的多个TCP套接字。项目合理运用Rust语言的async/await语法,相比现有的Go语言实现,吞吐量提升到两到三倍,握手速度也达到一至两倍。项目接口包装友好、易于使用,已经发布到crates.io网站,并且使用MIT协议开源。

async-smux项目主页: https://github.com/black-binary/async-smux

Figment:半分层多源配置库

Rocket框架的作者塞尔吉奥·贝尼特斯编写了Figment项目。Figment是能从多个配置源中,提取配置信息并整合的库,比如从多个不同类型的配置文件。项目以Apache-2.0/MIT双协议在GitHub上开源。

Figment项目主页: https://github.com/SergioBenitez/Figment

我们能用Rust了吗?

开发者乌格拉罕·阿阔克发布了这个汇总项目。Rust语言在生态上的期望涉及到方方面面,包括网页、机器学习和游戏应用,也包括基础的图形和异步编程等等。项目给出了一系列的汇总,标记出Rust在这些领域的进度和发展状况,以供开发人员和贡献者参考。

项目主页: https://github.com/UgurcanAkkok/AreWeRustYet

思想碰撞

非泛型内部函数

Rust语言的泛型是在编译时单型化的。也就是说,编译器会复制需要泛型的源代码,填入具体的类型,然后再生成目标代码。这样生成的泛型代码运行速度较快,但牺牲了目标代码的体积。这是因为,如果我们的泛型可能性非常多,每个具体的类型,都需要完整地复制原有的泛型代码。最终生成的二进制文件中,每个类型都对应一部分一模一样的代码。

Possible Rust网站给出了一种解决方案,尝试解决这种问题。方案认为,可以把函数的非泛型部分置入函数内部,分为母函数和子函数。母函数具有泛型参数,它将简单转换泛型参数为非泛型的,然后传给非泛型参数的子函数里。这样对所有的类型,只需要生成一个共同的子函数,然后生成多个简单的转换函数即可。通过这种方式,我们完成了同时节省时间和空间的目标。

在具体的技术实现上,可以把子母函数并列位于模块中。但随着函数数量的增加,我们不得不小心命名私有的子函数,防止模块内的函数冲突。于是我们的考虑是,把子函数的定义放在母函数内部,这样就可以避免命名空间冲突了。这就构成了我们最终的“非泛型内部函数”的写法。

文章还从中层中间语言(MIR)的角度,分析了不同写法下Rust编译器前端输出代码的差别。文章认为,目前这种“提取公因式”的优化还需要手工完成,但随着时间的推移,未来的Rust编译器可以自己完成优化步骤,不需要开发者额外关心——这将会是非常好的结果。

Possible Rust网站: https://www.possiblerust.com/pattern/non-generic-inner-functions

用Rust重写EBU R.128声音响度算法库

EBU R.128是欧洲广播联盟发起的标准,定义了符合人类感知的响度标准和算法。为了计算统一的响度值,C语言的libebur128是常用的库。本次文章中,作者塞巴斯蒂安·德罗格将这个库移植到Rust语言,来为他的项目减少外部链接依赖的数目。作者的库参照了nnnoiseless的编写思路,使用了smallvec和bitflags两款小依赖。

编写这个库,作者首先编写C库的Rust应用接口。然后替换其中较小的函数到Rust语言,并导出到C语言的二进制接口。替换二进制接口到Rust语言,最终更换所有的函数到Rust语言。在这之后,整个库已经迁移完毕,可以选择保留或取消C语言的接口。

作者选用了bindgen工具,用于生成C库的Rust接口代码。这里,作者使用Rust语言里的结构体,慢慢替换C语言定义的类型。C语言的少量for语句,可以修改成Rust语言的迭代器语法。而后,作者使用Box类型的语法,编写导出到C语言的接口。为了测试编写的代码,作者需要比较输出的浮点数值,使用了quickcheck这款库。在C语言使用宏的部分,作者一部分使用了trait,来适配不同类型的同种函数。为了记录响度算法要求的历史记录,Rust语言带参数的枚举类型帮助了作者,运行时的“懒加载”作者使用了Rust标准库提供的Once类型,使用标准库提供的VecDeque结构体。最终,作者替换了应用程序接口,完成了重写过程。

作者做了简单的性能测试,最终对相同的样例,Rust语言的实现只用了原C语言实现50%~70%的时间,显著地提升了处理效率。

响度算法对广播电视、流媒体行业有一定的应用。人类倾向于听到响度更高的声音,于是节目制作人不惜牺牲动态范围,提高响度,以获取更多观众的注意。上世纪50年代开始,这场“响度大战”开始了,广告商、电视台不断拉高响度,观众只能调整音量来应对——久而久之,这样的军备竞赛开始影响观众的听觉和观感。最终,ITU-R BS.1770标准问世,各大国家、地区制定相应的音频技术规范,“响度大战”才最终结束。我国中央电视台的目标响度值为-24 LKFS±2LU。

博客链接: https://coaxion.net/blog/2020/09/porting-ebu-r128-audio-loudness-analysis-from-c-to-rust-porting-details/

《蜜月后的Rust语言》

作者德雷克·摩尔分享了它两年来的Rust开发经历。作者主要关注Rust在嵌入式处理器的运用,从开发到调试,包括宏、格式化到内联汇编,分享了很多Rust语言改进为开发带来的便利之处。Rust提供有别于传统C语言的思路,是丰富而功能强大的语言。作者认为,提升与Rust的关系将是他事业中最重要的部分。

博客链接: http://dtrace.org/blogs/bmc/2020/10/11/rust-after-the-honeymoon/

广而告之

Rust库团队发起“可移植SIMD”小组

SIMD是“单指令多数据流”运算技术的外文名称。这项技术通过引入较长的向量寄存器和指令,允许处理器使用单个指令同时处理多个数据。要达到这一点,每个处理器平台都给出了各不相同的指令集。Rust库团队发起这个小组,期望提出统一的std::simd包,在相同的程序接口下,涵盖尽可能多的处理器平台。

“可移植SIMD”并不是完全涵盖的,它将是一个最佳实践的标准,期望作为自动向量化优化的补充,允许在更多场合下使用这一统一的加速技术。另外,如果用户的平台不支持SIMD指令集,它将默认转换为普通的标量运算指令。

现在,“可移植SIMD”组织正在招收新的志愿者,帮助完成这一标准的开发和完善过程。这一组织的官方页面给出了目前的RFC草稿,和他们在Zulip协作软件上的联系方式。

Rust语言官方博客: https://blog.rust-lang.org/inside-rust/2020/09/29/Portable-SIMD-PG.html


来自 日报小组 洛佳

社区学习交流平台订阅:

  • Rustcc论坛: 支持rss

  • 微信公众号:Rust语言中文社区

这篇关于【Rust日报】2020-11-03 《Rust日报》总第1000期的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1085776

相关文章

一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

中国341城市生态系统服务价值数据集(2000-2020年)

生态系统服务反映了人类直接或者间接从自然生态系统中获得的各种惠益,对支撑和维持人类生存和福祉起着重要基础作用。目前针对全国城市尺度的生态系统服务价值的长期评估还相对较少。我们在Xie等(2017)的静态生态系统服务当量因子表基础上,选取净初级生产力,降水量,生物迁移阻力,土壤侵蚀度和道路密度五个变量,对生态系统供给服务、调节服务、支持服务和文化服务共4大类和11小类的当量因子进行了时空调整,计算了

图形编辑器基于Paper.js教程03:认识Paper.js中的所有类

先来认一下Paper的资源对象,小弟有哪些,有个整体的认识。认个脸。 在Paper.js的 官方文档中类大致有如下这些: 基类: ProjectViewItemPointToolSizeSegmentRectangleCurveCurveLocationMatrixColorStyleTweenToolEventGradientGradientStopEvent 二级或三级类 继承Ite

Rust:Future、async 异步代码机制示例与分析

0. 异步、并发、并行、进程、协程概念梳理 Rust 的异步机制不是多线程或多进程,而是基于协程(或称为轻量级线程、微线程)的模型,这些协程可以在单个线程内并发执行。这种模型允许在单个线程中通过非阻塞的方式处理多个任务,从而实现高效的并发。 关于“并发”和“并行”的区别,这是两个经常被提及但含义不同的概念: 并发(Concurrency):指的是同时处理多个任务的能力,这些任务可能在同一时

Android自定义View学习笔记03

Android自定义View学习笔记03 参考gitHub上面的开源项目CircleImageView 预备知识 BitMap类 BitMap位图类,其中有一个嵌套类叫Bitmap.Config,内部有四个枚举值。这个类的作用是定义位图存储质量,即存储一个像素的位数,以及是否能显示透明、半透明颜色(Possible bitmap configurations. A bitmap co

软考初级网络管理员_03_硬件单选题

1.CPU是一块超大规模的集成电路,其主要部件有()。 运算器、控制器和系统总线 运算器、寄存器组和内存储器 控制器、存储器和寄存器组 运算器、控制器和寄存器组 2.(请作答此空)是指CPU一次可以处理的二进制的位数,它直接关系到计算机的计算精度、速度等指标:运算速度是指计算机每秒能执行的指令条数,通常以()为单位来描述。 宽带 主频 字长 存储容量 3.CPU执行指令时,先根

解析Java中1000个常用类:AbstractSequentialList类,你学会了吗?

推荐一个我自己写的小报童专栏导航网站: http://xbt100.top 收录了生财有术项目精选、AI海外赚钱、纯银的产品分析等专栏,陆续会收录更多的专栏,欢迎体验~复制URL可直达。 以下是正文。 在 Java 集合框架中,AbstractSequentialList 是一个重要的抽象类,为实现自定义的顺序列表提供了基础结构和默认实现。 作为 java.util 包中的一部分,Ab

03 TensorFlow 2.0:TOPK Accuracy实战

这江山风雨 岁月山河 刀光剑影 美了多少世间传说 且看他口若悬河 衣上有风尘 却原来是一位江湖说书人                                                                                                                                 《说书人》 在分类问题中会遇到TO

Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!

代码仓库 会同步代码到 GitHub https://github.com/turbo-duck/flink-demo 当前章节 继续上一节的内容:https://blog.csdn.net/w776341482/article/details/139875037 上一节中,我们需要使用 nc 或者 telnet 等工具来模拟 Socket 流。这节我们写一个 ServerSocket

【python例子】 python 计算1000以内的水仙花数

如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。   例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数 求1000以内的水仙花数(3位数)  网上这样的例子很多,总结3种常用的方法: 代码实现: #coding:utf-8#5**3 B表示5的3次方#整除后取余数 1001%100# 方法一:for bai in range(1,1