试试用常量函数画曼德布洛特图
一位Reddit贴主使用全新的常量函数,回顾了作者两年前编写曼德布洛特图小项目。如今的Rust常量函数已经支持while、loop等语句,可以编写较为复杂的函数,并直接将输出结果字符串保存到以const语句定义的全局常量中。相比作者两年前使用类型系统较麻烦的方法,新的方法快捷、便利,思考量更少,开发效率更高。评论认为,相比竞品C++目前的灵活性,Rust语言拥有的编译期保障更强。
代码中展示了在常量函数里定义可变变量、使用while循环语句、访问数组下标和调用其它常量函数的方法。需要注意的是,作者使用的全局常量是[u8; SSIZE]
类型,其中类型里的常量类型SSIZE
也是通过常量运算得到的。我们可以直接把这个类型转换为&str
类型;如果我们能确定它是合法的UTF-8串,那么这个转换将是一个零开销函数。
Linux每周新闻网:编写Rust语言开发的Linux内核
在我们编写操作系统内核时,常常使用Rust语言,作为替代C语言的开发方法。Linux每周新闻网报道了一次在线会议,主要讨论用Rust编写Linux内核的可行性。选用Rust是考虑到它在内存安全上的保证更强,且近期安卓、乌邦图系统的大量漏洞也和内存安全有关。参会者强调,他们更专注于如何在新的Linux内核模块上运用Rust语言。
Linux内核是庞大的生态,新的Rust语言目前应当兼容已有的C语言二进制接口。Rust语言有较好的包容性,能很好地与其它语言兼容;这种兼容互操作包括从Rust里调用C语言的特性,也反过来包含在C语言里使用Rust函数的支持。对开发而言,跨语言的类型检查也是需要的。Rust提供的bindgen工具可从C语言的头文件生成Rust的函数定义,这对内核开发来说是非常好用的工具。这个bindgen工具未来将需要更多的功能,来适合更多C语言函数标签的定义,对此贡献者分享了一个用Rust语言编写的Linux模块作为例子。参会者认为,即使只用Rust语言作为包装,也对关键性和通用的程序接口有一定的意义。
作为适用面广、历史悠久的操作系统,Linux适用于非常多款指令集架构。目前的Rust语言成熟的编译器有rustc,它基于LLVM编写,但不一定支持所有Linux支持的指令集架构。参会成员提出了与已有模块保持兼容的规则和方法,帮助理解和判断是否能用rustc编译兼容性好的模块。如果Rust语言在操作系统内核有更广的指令集架构支持,也将吸引更多的贡献者,丰富Rust语言本身的生态。除了rustc,也存在用C语言编写Rust编译器的项目,也有在GCC框架下添加Rust语言前端的想法,这将帮助Rust编写的驱动程序兼容更多的指令集架构。
内核的其它模块也需要和新模块保持二进制兼容性。Linux内核通常使用GCC编译,这和通常使用LLVM编译的Rust语言程序有所区分。在苛刻的条件下,二进制兼容性需要更强的保证。达到这一点,Rust语言目前编写的模块可以和Clang编译器编译的模块共同链接。参会人员提到,在目前的Rust语言开发里,链接GCC编译的库也是十分常见的现象。
评论认为,Rust语言开发内核的进展对完善生态是非常有帮助的,最近常量函数语言特性的更新也能促进这一点。
这次会议的讨论基于去年阿勒克斯·盖诺和杰弗里·托马斯在去年的Linux安全峰会上的成果,两位贡献者本人也参与了会议。Rust语言团队、长期的Linux内核贡献者乔石·川普利特、Linux内核贡献者格雷格·卡洛-哈特曼和弗洛安·维米尔出席了会议。
rust-analyzer发布第四十次更新日志
知名的Rust语言静态分析软件rust-analyzer公布了最新的更新日志。Rust语言编译器团队组建了新的“库词法分析”团队(parselib team),专注于与分析软件共用词法分析的中间结果,道路虽然是曲折的,但将对rust-analyzer的开发十分有帮助。一些以“ra_ap”开头的库已经上传到crates.io网站,帮助第三方开发者在rust-analyzer本身之上开发部分的扩展。其它的杂项更新包括支持更多的语法类型、添加了输出日志的参数,修改了与文档有关鼠标悬浮窗的格式,修复了很多问题,有一些内部的性能改进。
Headcrab发布八月进度报告
Headcrab是现代化的Rust语言调试器库。今年八月,Headcrab团队合并了超过二十个提交请求,这包括添加新的反编译命令、栈展开函数和对应的命令等等。一些成员已经在兼容更多平台方面开展工作。针对特定平台,Headcrab现在能利用x86_64的调试寄存器添加断点,能在macOS上访问进程的线程列表,在Linux上由更多平台相关的命令和测试模块。
在接下来的九月,Headcrab团队计划发布全新的0.2.0版本。团队将编写更好的文档来吸引开发者,将添加更多的示例程序和典型使用情况,继续支持更多的操作系统平台,完善断点、信号和线程本地变量的支持。Headcrab感谢了本月参与开发的七位开发者,并欢迎更多开发者通过Zulip和他们联系。
From 日报小组 洛佳
社区学习交流平台订阅:
评论区
写评论还没有评论