标签 Rust 下的文章

Linux 基金会发起庆祝 Linux 三十岁生日的活动

虽然距离 Linux 的生日(1991/9/17)还有不少时间,但是今年 Linux 基金会已经开始提前半年庆祝 Linux 三十岁生日了。Linux 基金会已经为此制作了多张宣传海报,还准备在今年 4 月在其线上商店推出 30 周年纪念周边。

作为 Linux 的吉祥物,那只名为“Tux” 的小企鹅,居然都已经三十岁了。

Rust 支持进入 Linux-Next 分支

Linux-Next 主要用于存放一些将在下一周期合并进内核主支的代码。它最近加入对 Rust 的初步支持,如果未来对 Rust 的支持合并到 Linux 主支,这将是用 Rust 编写设备驱动迈出的重要一步。

Linux 对 Rust 寄望很高,但是毕竟 Rust 还很新,所以对于将 Rust 作为内核支持的驱动语言,还是非常审慎的。

传统 IDE 驱动将被从 Linux 内中删除

两年前,传统的 IDE 驱动代码就已经实质上在 Linux 中废弃,开发者正在准备在今年移除它,大约可以减少 41000 多行内核代码。不过这不代表 IDE 设备就不能使用了,这只是移除传统的 IDE 驱动程序,IDE 本身仍将通过 libata 层在 Linux 内核上得到支持。

有谁还在使用 IDE 设备?虽然 Linux 内核内的各种驱动都是模块化的,但是我觉得现在硬件发展这么快,应该加大老旧硬件的支持淘汰力度了,不应该将宝贵的人力放在这上面。

美国佛罗里达州水处理系统遭黑客攻击,被调整了自来水成分

报道称,有黑客成功渗透了控制佛罗里达州奥尔德斯马市水处理设施的计算机系统。通过篡改可远程控制的计算机数据,攻击者改变了当地供水中的化学品含量,上调了氢氧化钠碱液的水平。幸好被及时发现,目前暂无居民受到伤害的报告。当地水处理设施使用了常见的 TeamViewer 远程访问软件,有人再次远程访问了系统,将系统的氢氧化钠水平从 100 ppm 暴增到了 11100 ppm,操作员发现后及时改了回去。当地警方已经投入了调查。

这是非常严重的对公共安全的威胁,各种公共安全事业部门要注意了,有些黑客攻击不是为了牟利,但是会对社会造成很大破坏。

首款国产量子计算机操作系统“本源司南”发布

据报道,该系统由合肥本源量子计算科技有限责任公司自主研发。利用量子卷积神经网络模型开发出的量子图像识别应用,可将图像识别任务转化为多个量子线路,在经过量子态数据编码之后,这些量子线路就处于排队等待运行状态。通过“本源司南”的统一调度管理,这些量子线路在单个量子芯片上可以被并行执行,不仅大大减少了整体线路运行时间,还有效提高了量子芯片的整体利用率,使得当前有限的量子计算资源得到最大化利用。

如同超算一样,量子计算机也需要合适的操作系统才能发挥作用,可喜地看到国内在量子技术前进了一小步。

Rust 基金会成立

Rust Core 团队宣布了新成立的 Rust 基金会,创始成员中包括了微软、谷歌、华为、亚马逊云服务(AWS)等科技巨头,以及原发起方 Mozilla 。Mozilla 现已将包括商标等在内的所有基础设施资产,转移到了新成立的 Rust 基金会。

Mozilla 裁员导致这些项目星散后,或许是这些项目的好的开始。

阿里云成立十一年来首次盈利

报道,2 月 2 日晚间,阿里巴巴发布了 2021 财年第三季度(也就是自然年 2020 年第四季度)财报,云计算业务收入同比增长 50% 至人民币 161.15 亿元,调整后息税折旧摊销前利润为 2400 万元人民币。这是阿里云首次实现了盈利。而 2019 年同期亏损 3.56 亿元人民币。

作为国内最早投入的云服务商,阿里云曾连续多年在阿里内部拿到低绩效。但在阿里的大力支持下,阿里云成为国内乃至亚洲市场份额第一的云服务商。终于在 11 年之后,守得云开日出,实现了盈亏平衡!阿里云加油!

互联网安全研究小组准备用 Rust 重写 Apache 的 SSL/TLS 模块

作为 Let's Encrypt 加密倡议的发起者之一,互联网安全研究小组(ISRG)刚刚宣布,他们将使用 Rustles 库取代 OpenSSL,为 httpd 重写一个新的 TLS 模块(mod-tls),并希望在将来可以取代 Apache httpd 默认使用的 mod\_ssl。

经历了十年的发展,Rust 编程语言已经变得相当成熟,默认情况下仅允许编译内存安全型的应用程序。这一宣布得到了 Apache httpd 联合创始人的支持:“我意识到这项重大改进可对许多人提供保护,并且能够让 httpd 在不久的将来继续发光发热。”

在关键性的基础设施方面,Rust 已经展现出了取代 C 语言的潜力。有志于从事基础软件开发的同学,可以考虑尽快学习和使用 Rust 进行开发了。

Linux 恶意软件 Kobalos 可利用 OpenSSH 软件后门窃取证书

ESET警告称,一款被挂有木马的 OpenSSH 软件,被用于从 HPC 高性能计算集群中窃取 SSH 证书。它渗透了一些主要目标,包括美国政府、欧洲大学、以及亚洲某些大型 ISP 的系统,受害者主要集中在大型系统和超级计算机领域。除了 Linux、FreeBSD 和 Solaris,安全专家还发现了能够在 AIX、甚至 Windows 平台上运行的恶意软件变种的蛛丝马迹。

无论是否是因为这个恶意软件,都建议为 SSH 服务器连接同时启用双因素身份验证。

你可以尝试以多种语言编程一个简单的游戏来开始编程之路。

 title=

当你想学习一门新的编程语言时,不妨关注一下编程语言的共同点。

  • 变量
  • 表达式
  • 语句

这些概念是大多数编程语言的基础。一旦你理解了它们,你就可以开始弄清楚其余的东西。

因为编程语言通常具有相似性,一旦你懂了一种语言,你就可以通过理解其差异来学习另一种语言的基础知识。

学习新语言的一个好方法是使用一个你可以用来练习的标准程序。这可以让你专注于语言,而不是程序的逻辑。我在这一系列文章中使用了一个“猜数字”的程序,在这个程序中,电脑会在 1 到 100 之间选一个数字让你猜。程序一直循环,直到你猜对数字为止。

这个程序锻炼了编程语言的几个概念:

  • 变量
  • 输入
  • 输出
  • 条件评估
  • 循环

这是学习一门新编程语言的很好的实践实验。

安装 Rust

你可以使用 Rustup 安装一个 Rust 工具链,或者你可以在线尝试 Rust 而不在本地安装它。

如果你在本地安装,你应该定期用 rustup update 来更新它,以保持你的工具链的新鲜,并使用 cargo update 来保持你的库的最新版本。

Rust 语言版本的猜数字

Rust 是一门赋予任何人构建可靠和高效的软件能力的语言。你可以通过编写一个 Rust 版本的“猜数字”游戏来探索 Rust。

第一步是编写一个 Cargo.toml 文件。你可以使用 cargo new 命令生成一个骨架 Cargo.toml。这几乎是开始一个 Rust 项目的最佳方式。

$ cargo new guess
$ cd guess
$ ls -1
Cargo.toml
src/

Cargo.toml 文件为你的包命名,并给它一些元数据,最重要的是,指明了它依赖于 rand crate

[package]
name = "guess"
version = "2020.11.0"
authors = ["Moshe Zadka <[email protected]>"]
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
rand = "*"

Rust 中的许多东西不是由语言或标准库提供的。取而代之的是,你可以从某个外部 crate 得到它们,这些 crate 可以做许多事情。

程序逻辑在 src/main.rs 中:

use rand::Rng;
use std::io::BufRead;

fn main() {
    let mut rng = rand::thread_rng();
    let random = rng.gen_range(1..101);
    println!("Guess a number between 1 and 100");
    for line in std::io::stdin().lock().lines() {
        let parsed = line.ok().as_deref().map(str::parse::<i64>);
        if let Some(Ok(guess)) = parsed {
            match guess {
                _ if guess < random => println!("Too low"),
                _ if guess > random => println!("Too high"),
                _ => {
                    println!("That's right");
                    break;
                }
            }
        }
    }
}

代码的前两行声明你要做什么。在本例中,rand::Rng 生成一个猜测值,而 trait std::io::BufRead 使得可以从标准输入中读取。

Rust 代码的入口在 main() 函数中,所以下一步就是定义 main()

要给一个变量赋值,先放 let,再放变量的名字,后面放 = 号。这样就创建了一个不可变变量。

Rust 中大多数变量都是不可变的,但是 rng 对象必须是可变的(mut)。例如,语句 let random = 0random 变量分配一个零值。

函数的第一行创建了一个线程安全的 Rng 对象,并将其分配给变量 rng。Rust 是建立在线程和内存安全的基础上的,所以你必须在开始写代码时就考虑到这些事情。

程序的下一行读取函数 gen_range() 的结果,并将其分配给名为 random 的变量。该函数取一个最小值(包含)和一个上界(不包含)。为了也包含上界,你可以用一个等号来标记较大的数字(例如,1...=100),或者你也可以像我在代码中做的那样,将上界设置为比你的预期最大值大 1。在这种情况下,该范围是 1100,使得游戏刚好有足够的挑战性。

中央循环在 std::io::stdin() 中迭代行。由于有各种可能导致行不能读取的例外情况,Rust 要求你用一个 Result 来包裹一行。有时候可能无法将一行解析为一个整数。

这段代码使用条件模式匹配来忽略所有会导致错误的行:

        let parsed = line.ok().as_deref().map(str::parse::<i64>);
        if let Some(Ok(guess)) = parsed {
            // ...
        }

第一行创建了一个 Result<Option<i64>, ...> 对象,因为它可能在读取或解析步骤中失败。由于下一行只在 Some(Ok(guess)) 上匹配,每当一行的结果是一个不匹配的值时,它就会跳过 if 语句。这是一种强大的忽略错误的方法。

Rust 支持条件表达式和流程控制,比如循环。在“猜数字”游戏中,只要猜中的值不等于 random,Rust 就会继续循环。

if 语句的主体包含一个 Rust 的 match 语句的三向分支。虽然 match 最常用于模式匹配,但它也可以检查任意条件。在这种情况下是打印一个适当的信息,如果猜测是正确的,则中断(break)循环。

示例输出

现在你已经写好了你的 Rust 程序,你可以运行它来玩“猜数字”游戏。每次运行程序时,Rust 都会选择一个不同的随机数,所以继续猜,直到找到正确的数字。

$ cargo run
   Compiling guess v2020.11.0 (/Users/mzadka/src/guess)
    Finished dev [unoptimized + debuginfo] target(s) in 0.70s
     Running `target/debug/guess`
Guess a number between 1 and 100
50
Too high
25
Too high
12
Too low
18
Too high
15
Too high
13
Too low
14
That's right

典型的做法是用 cargo run 来测试程序。最终,你可能会使用 cargo build 分成两个独立的步骤构建一个可执行文件并运行它

学习 Rust

这个“猜数字”游戏是学习一门新的编程语言的一个很好的入门程序,因为它以一种相当直接的方式锻炼了几个常见的编程概念。通过在不同的编程语言中实现这个简单的游戏,你可以展示语言的一些核心概念,并比较它们的细节。

你有喜欢的编程语言吗?你会如何用它来写“猜数字”游戏呢?请关注本系列文章,看看你可能感兴趣的其他编程语言的例子吧!


via: https://opensource.com/article/20/12/learn-rust

作者:Moshe Zadka 选题:lujun9972 译者:wxy 校对:wxy

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

Firefox 探索没有 Google 的未来

Mozilla 的绝大部分收入来自与 Google 达成的搜索交易合同。与 Google 的合作对 Mozilla 而言是不舒服的,不仅仅是因为两家公司在浏览器市场是竞争关系,而且还因为两家公司的价值观存在差异。Google 的绝大部分收入来自于在线广告,而 Firefox 的开发者则努力创造工具去阻止广告。Mozilla 认为,隐私并不是一种产品,而是所有用户都应该享有的权利。

来源:solidot

拍一拍:相比 Mozilla,Google 真是丑陋。不知道现在有多少人已经从喜爱 Google 转变为厌恶?

AWS 推出用 Rust 开发的容器发行版 Bottlerocket

亚马逊 AWS 服务发布了主要用 Rust 语言开发的发行版 Bottlerocket,设计用于托管容器。源代码发布在 GitHub 上。作为一种专注于安全、速度和并发的系统级编程语言,Rust 能避免常见的编程错误如访问无效的内存区和竞态条件。

来源:solidot

拍一拍:用 Rust 语言开发一个发行版,这是个不错的消息,就是不知道 Rust 的成分有多少?

C++20 标准草案获得批准

相比 C++17,C++20 是一次重大的更新,引入了新的语言概念、模块、操作符“<=>”、协程、指定初始化、新标准属性等等。C++20 库标准还加入了范围、特性测试宏和位操作等。

来源:solidot

拍一拍:我想,很多人还留在很老的 C++ 标准吧。

微软庆祝 Windows 95 发布 25 周年

这款系统对桌面体验的影响是非常深远的,开始菜单和任务栏概念沿用至今,并且全球有数十亿用户使用。在过去 25 年里,Windows 系统不断更迭进化,已经成为很多人日常工作生活中不可或缺的重要组成。

来源:cnBeta.COM

拍一拍:Windows 95 是民用计算机的一个里程碑。

Chrome 团队正探索 Rust 与 C++ 的互操作性

现阶段,Chrome 工程师很清楚 C++ 是第一位的,并且“在可以预见的将来仍然是代码库的统治者”。他们认为,若使用 Rust,需要令其与 C++ 相适应,而不是让 C++ 反过来配合 Rust。当前 Chrome 团队所探索的,正是 Rust 能否,以及如何调用 C++ 代码。

来源:开源中国

拍一拍:眼看这 Rust 大热,你要不要学呢?

WordPress 创始人称苹果阻止其更新 iOS 版本要求拿三成提成

WordPress 的 iOS 版本不包含任何应用内购买选项,而是免费应用,只是让用户通过 iPhone 或 iPad 构建和管理网站。苹果声称,它的 App Store 审核指南要求“跨平台运行的 app 可以允许用户访问他们在其他平台上的相应 app 中或您的网站上获取的内容、订阅或功能,包括多平台游戏中的消耗品,前提是这些项目也在 app 中以 App 内购买项目的形式提供”。事件发酵之后,苹果向 WordPress 道歉,表示不强迫免费应用加入付费选项。

来源:solidot

拍一拍:吃相难看。