标签 Rust 下的文章

Windows 上 Firefox CPU 占用的锅终于被摘了

Firefox 占用过多资源一直是其被诟病的原因之一。但这可能并不完全是事实,因为看起来影响 Windows 上 Firefox 用户的一个 CPU 错误实际上是 Windows Defender 的错。这个错误导致 Firefox 调用该服务的频率比 Chrome 或 Edge 等同类浏览器高得多,从而导致明显的 CPU 峰值。Defender 的最新更新解决了这个问题,应该会使 Windows 版 Firefox 浏览器的 CPU 使用率大大降低。这个问题早在 2018 年就在 Mozilla 的错误跟踪系统上被首次报告,并迅速分配给 MsMpEng 服务,但直到最近才得以解决。

消息来源:PC World
老王点评:5 年了才解决,用阴谋论的思路去思考一下的话,这是否是非正当竞争?

Rust 基金会禁止 Rust 相关软件使用 “Rust” 名称

Rust 基金会的一项拟议的新商标政策在 Rust 社区中遭到了强烈反对,因为其中包括禁止在 Rust 工具或用 Rust 编写的软件的名称中使用 “Rust”,或在域名或子域名的部分中使用 “Rust”。他们将包括 “Rust”、“Cargo”、“Clippy” 等文字和 Rust 标志等定义为商标,而将商标用于以 Rust 语言编写的软件程序视为一种侵权行为,除非有明确的授权。他们建议采用 “RS” 替代。

消息来源:Dev Class
老王点评:我记得上一个这样 “保护” 自己的商标的是 Docker 吧。

开发者创造出了可以“自愈”的程序

一位名叫 BioBootloader 的开发者创造了 “金刚狼”,就像在漫威里面一样,这个程序可以赋予 Python 程序 “再生愈合能力”。用它运行你的 Python 脚本,当脚本出差时,它会调用 GPT-4 会编辑它们并解释出错的原因,并反复地重新运行,直到一切都被修复。

消息来源:Ars Technica
老王点评:虽然知道这一天早晚到来,但会自我修复的 AI 会带来什么呢?

在 Rust 编程系列的第一篇中,你将学习如何用 Rust 编写和执行你的第一个程序。

Rust 是最快风靡开发者和科技公司的系统编程语言之一。日常使用它的开发者将其评为最受欢迎的编程语言之一,而它 已经连续七年获此殊荣了

它是如此的受欢迎,以致于现在有两股巨大的推力将其带入 Linux 生态系统中:

而这还仅仅是在 Linux 生态系统中。安卓上的蓝牙软件 Gabeldorsche 现在也是由 Rust 编写的。

你是否也看到了 Rust 的流行趋势?那么你或许也想学习使用 Rust 进行编程。

为什么你要考虑 Rust 而不是其他编程语言?

首先,Rust 是一门 类型安全的编程语言 并且 拥有极其严格的编译期检查。因此,你首先会 “被迫” 写不出不安全的代码(好吧,通常是这样)。

Rust 编程语言有以下 “目标”:

  • 性能:Rust 的二进制文件和 C 语言的二进制文件一样快,有时甚至超过了 C++ 的二进制文件!
  • 内存安全:Rust 非常重视内存安全。
  • 并发性:对内存安全的关注消除了很多类似竞争的情况,并帮助你在程序中无畏并发。

以下是在 C/C++ 等语言中可能犯的一些错误(但 Rust 不会):

  • 释放后使用
  • 双重释放
  • 越界访问
  • 使用 NULL
  • 不适当的指针运算或访问
  • 使用未经初始化的变量
  • 线程不安全的多线程

看看 苹果微软谷歌 等大公司因这类 0day 错误而引起的问题吧。

现在你可能知道了为什么要选择 Rust 语言而不是其他编程语言,让我们开始学习 Rust 语言的系列教程吧!

目标受众

出于对 Rust 的热爱,我写了这个系列的 Rust 教程,帮助你熟悉 Rust 编程的概念。

这个教程系列是为已经熟悉 C 和 C++ 等编程语言的人准备的。我假设你已经知道了 变量函数循环 等基本术语。

我对你的唯一要求是你不懈的坚持与努力。

安装 Rust 工具链

我希望你能在本地安装 Rust 工具链。你可以通过运行以下命令来做到这一点: (LCTT 译注:如果你使用 Linux 发行版,请不要直接安装软件源里的 Rust 工具链,尽管这样看起来很便捷。)

curl --proto '=https' --tlsv1.3 -sSf https://sh.rustup.rs | sh

Installing Rust on Ubuntu Linux

除了 Rust 基本工具链,我还建议再安装一些工具,这些工具将在开发过程中帮助你:

rustup component add rust-src rust-analyzer rust-analysis

你还需要 安装 gcc。否则,你可能会遇到“链接器 cc 未找到”的错误。该软件包在不同的发行版中都被称为 gcc。

在 Ubuntu 和 Debian 上使用:

sudo apt install gcc
? 如果你不希望在本地安装 Rust 工具链,不用担心。你还可以直接在你的浏览器中运行 Rust 代码!只要到 Rust 试验场 并把所讨论的代码粘贴在那里。

Hello Rust!

自从 丹尼斯·里奇 Dennis Ritchie 布莱恩・柯林汉 Brian Kernighan 用 “Hello World” 程序介绍了 C 语言后,在 UNIX 世界里,你学习的任何新编程语言第一步都这样做,这已经成为一种习惯。

因此,让我们也用 Rust 编写我们的 Hello World 程序。

我将在我的家目录里 新建一个项目目录 叫做 learn-rust-its-foss。然后,在这里我将新建一个叫 hello-world 的目录。最后,在里面新建 main.rs 文件:

// 这串代码将打印字符
// "Hello world!" 将被打印到 `标准输出`

fn main() {
    println!("Hello world!");
}
? 就像 C、C++ 和 Java 源代码文件相应的扩展名是 .c.cpp.java,Rust 的源文件扩展名是 .rs

作为一个 C/C++ 程序员,你可能已经在 Linux 上使用 GCC,在 macOS 上使用 Clang,在 Windows 上使用 MSVC。但是为了编译 Rust 代码,该语言的创造者自己提供了一个官方的 rustc 编译器。

运行 Rust 程序和 执行 C/C++ 程序 是一样的。你首先编译代码,然后得到可执行文件,最后再运行这个可执行文件从而来运行代码。

$ ls
main.rs

$ rustc main.rs

$ ls
main  main.rs

$ ./main
Hello world!

很好!

解读 Rust 代码

现在你已经编写、编译并运行了你的第一个 Rust 程序,让我们对 “Hello World” 的代码进行解读,并理解每一部分。

fn main() {
}

fn 关键字用来在 Rust 中声明一个函数。在它后面 main 是这个被声明函数的名字。像许多编译型编程语言一样,main 是一个特殊的函数,用来作为你的程序的入口。

任何写在 main 函数里的代码(在大括号 { } 之间)将在程序被启动时运行。

println 宏

main 函数中, 有一个语句(LCTT 译注:“语句” 区别于 “表达式”):

println!("Hello world!");

就像 C 语言的标准库有 printf 函数一样,Rust 语言的标准库有 println 。宏类似于函数,但它以感叹号!)来区分。你将在本系列的后面学习宏和函数的知识。

println 宏接收一个格式化的字符串,并把它放到程序的标准输出中(在我们的例子中,就是终端)。由于我希望输出一些文本而不是一个变量,我将把文本放在双引号(")内。最后,我用一个分号来结束这个语句,表示语句的结束。

? 你只需知道,任何看起来像函数调用但在开头括号前有感叹号的东西,就是 Rust 编程语言中的一个宏。

注释

Rust 遵循已知的 C 编程语言的注释风格。单行注释以两个正斜杠(//)开始,多行注释以 /* 开始,以 */ 结束。

// 这是一个多行注释
// 但是没有什么阻止你在
// 第二行或第三行也这样写

/*
 * 这是一个“真•多行注释”
 * 它看起来比较漂亮
 */

总结

你刚刚通过 Hello World 程序迈出了用 Rust 写代码的第一步。

作为一种练习,也许你可以编写并执行一个打印出 Yes! I did Rust 的 Rust 程序。

在本系列的下一部分中,你将学习在 Rust 程序中使用变量。敬请期待!

(题图:MJ:computer sci-fi ,code secure ,"rust" ,gold blue slive ,background dark, high resolution super detailed)


via: https://itsfoss.com/rust-introduction/

作者:Pratham Patel 选题:lkxed 译者:mcfd 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

走出混乱,Rust 项目公布新的治理结构

一年多前,我们在 #464 报道过,Rust 项目发生了一次非常公开的内讧,它的整个审核团队辞职了,并公开发表了对核心团队的嘲讽,“除了他们自己,不对任何人负责”。这件事之后,该项目内部普遍认为需要建立一个更好的正式治理结构,以消除其中的一些模糊和冲突,并有机制来处理这些。最初的 Rust 项目治理结构是从 Mozilla 演变而来的,包括核心、语言、审核、库和 cargo 等六个团队。旧模式的权责存在模糊的地方,问题之一是,核心团队不仅要负责监督出现的问题,还要解决它们,这导致了倦怠和问题。经过 6 个月的努力,Rust 发布了新的治理结构:Rust 项目与 Rust 基金会关联,但与之分开,后者主要处理 Rust 的金融资产。新的计划正在征求意见和等待批准。

消息来源:The New Stack
老王点评:说“浴火重生”有点过分,但是很高兴 Rust 项目没有倒下去,而且重新制定了新的治理结构。

“问客”诞生?我觉得这是一个短暂的过渡

鉴于以 ChatGPT、稳定扩散模型等为代表的 AIGC 流行,著名科技人高飞在 Solidot 撰文提出,“这一次伴随 AIGC 而来的新职业,尚未得到广泛的认同和关注。英文称谓也没有统一。”他给这种新职业起了一个新名字,“‘问客’可能是个好名字。”因为,“ChatGPT 等 AIGC 背后的智能本质上是个黑盒子,所以用户-使用者是同等的创新者。所以‘提问’,也就是‘问 AI’才是这些新职业的核心。”

消息来源:Solidot
老王点评:我认为,确实目前 AI 输出的质量和提问的方式有很大关联,这一点我赞同高飞先生的看法。不过,AI 按照这种速度发展,将很快就会明白人们真正想要的东西,而不必细心预设前提、精心构造提问。目前跛脚的 AI 是一个短暂的过渡阶段。

C++ 23 语言标准宣布功能已完备

ISO C++ 委员会宣布已完成了关于 C++ 23 规范的技术工作,并正在制作一份最终文件,以便进行草案审批投票。其主要包括的功能有简化隐式移动,修复 range-for 循环中的暂存器,多维和静态 operator[] 数组,以及 Unicode 改进等等。委员会说,C++ 23 的许多功能已经在主要的编译器和库中实现。同时,计划中的下一个版本 C++ 26 将强调并发性和并行性。

消息来源:Info World
老王点评:最近关于 C++ 的讨论比较多,但是 C++ 还是按部就班地发展着。

Rust 是如何诞生的

2006 年,29 岁的 Mozilla 程序员 Graydon Hoare 返回位于温哥华的公寓时,发现软件崩溃导致电梯发生故障。他的公寓在 21 楼,在爬楼梯时他感到很恼火,认为“这太荒唐了,我们搞计算机的人甚至不能制造一部不崩溃的电梯。”软件的崩溃通常与内存相关,而电梯等设备的软件通常是用 C 或 C++ 开发的,此类编程语言容易意外引入导致崩溃的内存漏洞。Hoare 则决定做点事情,他开始设计一种新的编程语言,希望能用它写出没有内存错误的高性能代码。他将其命名为 Rust 语言,以“锈”菌的名字命名,这种真菌以生命顽强著称。17 年后,Rust 变成了世界最热门的语言之一。

消息来源:Technology Review
老王点评:不只是 Rust 语言,很多编程语言也是,很多发明都源自于创造者遇到的困难和烦恼。

Adobe 对 Figma 的收购面临欧盟反垄断调查

Adobe 提出的 200 亿美元 收购(#765) 设计公司 Figma 的交易面临着欧盟漫长的调查。欧盟委员会表示,它已经收到了一些国家监管机构提出的调查该交易的请求。该机构说,这项交易可能 “严重影响” 互动产品设计和白板软件市场的竞争。它现在将要求 Adobe 公司通报该交易,这两家公司在没有得到欧盟许可的情况下不能继续进行这项交易。

消息来源:彭博社
老王点评:这起收购可能要黄啊。

拯救 Linux 内核的 IA64 支持

有开发者报告说,“Linux 的 IA64 移植没有维护者,根据它唯一剩下的用户的报告,它已经坏了一个月了,而没有人关心。”他建议 “扔掉” IA64 架构支持,Linus Torvalds 发表了他的看法:“我不是 IA64 这个架构的粉丝,但是完全取消它有点悲哀”,而且觉得维护它也并不太麻烦 —— 至少 Linux 内核中还有更多早该淘汰的架构,比如 DEC 的 Alpha 架构。这个时候,一位 Debian 开发者站出来表示愿意接手,“我肯定有时间照顾这个架构,因为我也在 Debian 中维护它。”他甚至还专门保留了一台 IA64 的机器来测试它。英特尔在 2021 年 7 月正式并最终退役了 IA64 架构,标志着这个 Unix 小型机继承者的失败。

消息来源:The Register
老王点评:可能真的没多少人使用,但是好歹有人维护就留着吧。

GNU Coreutils 的 Rust 实现正变得非常强大

在过去两年里,用 Rust 重新实现的 GNU Coreutils 已经接近了 C 语言的原始版本,也提供了 cp、mv 和其他核心工具。除了安全性之外,它的性能已经非常好了。这个名为 uutils 的工具包已经被许多 Linux 发行版打包,现在也被 “一个著名的社交网络通过 Yocto 项目” 使用。uutils 的目标是努力创造一个可以替代 GNU Coreutils 的产品,努力实现良好的跨平台支持,并易于测试。

消息来源:Phoronix
老王点评:作为 Linux 最重要的软件包和基础设施之一,Coreutils 如果用 Rust 实现一个强壮、完善、高性能的版本,那非常值得期待。

Linux 6.1 被选为 LTS 长期支持内核

稳定内核维护者 Greg 确认 Linux 6.1 成为 2022 年的长期支持内核。通常情况下,日历年的最后一个主要发布系列通常会被提升到 LTS 状态。Linux 6.1 是在 2022 年 12 月释出的,最初,Linux 6.1 LTS 只是被标记为两年的 LTS,而今天第二次被更新为四年的维护期,将维护到 2026 年 12 月。不过,这也仅比 Linux 5.15 LTS 多两个月。Linux 内核的 LTS 版本最长维护六年。如果有厂商愿意提供长期支持,会根据需要延长维护期,那么 Linux 6.1 或许可以一直维护到 2028 年 12 月。

消息来源:Phoronix
老王点评:随着 Linux 的发展,需要维护的 LTS 内核越来越多,内核社区的压力也会越来越大。

Thunderbird 正在经历一次从头开始的大规模重修

Thunderbird 作为一个独立的电子邮件客户端,已经快有 20 年历史了。Thunderbird 正在经历一次从头开始的大规模重修,以摆脱过去 10 年积累的所有技术和界面债务,来保证该项目在未来 20 年的可持续性。今年即将发布 Thunderbird 115,远不止是每年一次的发布。未来三年内,Thunderbird 将使代码库更精简、更可靠,重写古老的代码,消除技术债务;从头开始重建界面,开发和维护一个适应性强、极易定制的用户界面;改为每月发布一次。

消息来源:Thunderbird
老王点评:期待看到这个经典而强大的邮件客户端能焕发新生。

C++ 之父认为 Rust 的安全性并不优于 C++

C++ 之父 Bjarne 最近发布了一篇文章,号召认真思考 “安全” 问题;然后做一些明智的事情。Bjarne 对 NSA 关于软件内存安全的报告做出了回应,因为该报告将 C 和 C++ 排除在安全之外。Bjarne 不认为报告中任何一种 “安全” 语言的选择在他所关心的使用范围内比 C++ 优越。他认为,在 NSA 的文件中,“‘安全’仅限于内存安全,而忽略了语言可能(以及将)被用来违反某种形式的安全和保障的十几种其他方式。”

消息来源:Slashdot
老王点评:确实,安全缺陷本来不是 C++ 或者大部分流行的编程语言的一部分,编程的人才是安全漏洞的引入者。问题是,Rust 可以通过语言本身的机制来避免这些本可以避免的安全漏洞。

OpenAI 说 GPT-4 的 100 万亿参数数量是“胡说”

OpenAI 的 CEO 澄清了一些关于 GPT-4 的流言。他说 GPT-4 的发布没有确定的时间框架,“它会在某个时间点出现,当我们有信心能够安全和负责任地完成它时”。并称那张比较了 GPT-3(1750 亿)和 GPT-4(100 万亿)中的参数数量的图表“完全是胡说”。而对于通用人工智能(AGI),他说,“人们在乞求失望,他们会失望的……我们没有一个真正的 AGI。”他也认为 ChatGPT 将杀死谷歌的预测是错误的,“我确实认为搜索有一个变化,可能会在某个时候到来 —— 但变化短期内不会像人们想象的那样剧烈。”

消息来源:The Verge
老王点评:看到 OpenAI 的创始人还如此清醒,这很好。我也为我之前传播的那张错误的参数对比图道歉。

GitHub 将停止支持 Subversion

GitHub 宣布将于 2024 年 1 月 8 日停止支持 Subversion(SVN)。GitHub 是在 2010 年的愚人节这天宣布支持 Subversion 版本控制系统(一度被视为玩笑),当时集中式版本控制系统是主流,分布式版本控制系统如 Git 还是一个新人,还没有迹象显示它将统治世界。通过在 GitHub 后端原生支持 Subversion,GitHub 让用户能更容易迁移到 Git。今天 Git 在开发者中的使用比例高达 94%,Subversion 的使用比例越来越少。

消息来源:Solidot
老王点评:谁能想到,当年流行的 Subversion 等版本控制系统都被 Git 所取代了。想想,Linus 真是天命之子啊。