标签 Rust 下的文章

实验证明标准量子力学必须用复数表达

在经典物理学中,人们只用实数就可以写出所有定律,而复数仅仅作为一个方便的计算工具被主观引入。而随着量子力学诞生,复数逐渐表现出某种直觉上的不可排除性。但量子物理是否确实必须使用复数,是一个长期未解决的基础性问题。近期,国外的科学家团队提出一种利用确定性纠缠交换来验证复数必要性的贝尔不等式类型的检验方法。中科大团队基于自主设计研发的超导量子线路和高精度量子操控技术,在世界上首次 完成了该实验。该实验结论支持量子物理需要使用复数。

老王点评:虚数、复数这种原本看起来只是纯数学概念的数字,和量子力学这种“不实在”的东西果然是绝配。

Rust 编写的一些 GNU Coreutils 工具更快了

人们一直在努力编写一个基于 Rust 的 GNU Coreutils 替代品。近一年来,该 Rust Coreutils 已经能够运行一个基本的 Debian 系统。不仅更安全,而且它的一些二进制文件性能更好。目前剩下的唯一没替换的二进制文件是 stty。随着优化和兼容性工作的进行,将可以让 Debian、Ubuntu 能够轻松地默认切换到 Rust Coreutils,而不需要任何黑科技或古怪的配置。

老王点评:真的能完整替换了 Coreutils,那对进一步扩展 Rust 在 Linux 生态中的影响非常有意义。

用 Rust 开发的勒索软件加大了解决勒索的难度

去年 12 月,研究人员发现了据信是第一种由专业网络犯罪组织用 Rust 语言开发的勒索软件 ALPHV/BlackCat。用 Rust 开发的程序更难找到常见的编程漏洞,如果有更多网络犯罪组织切换到 Rust 语言,将会加大安全公司发现勒索软件漏洞的 难度。这会导致安全公司为被勒索的组织找到解锁密钥更加困难。

老王点评:这充分体现了两面性。我必须说,Rust 是无辜的……

只有三个人赞助的 Log4j

这两天 Log4j2 项目爆出的 漏洞,堪称核弹级的漏洞,由于它被作为基础组件用在很多 Java 框架和 Java 项目中,影响了数以百万计的应用,因此,绝大多数使用 Java 项目的公司都会被波及。(这里说的 Log4j 实际上是指 Apache Log4j2 ,是对最初的 Log4j 框架的一个重写版。)但是在这次严重的安全事故背后,人们发现原来这么重要而基础的项目却 乏人问津。Log4j 维护者称他有全职软件开发工作,只能在空闲时间维护该项目,他也想全职维护开源项目,但在这之前只有三个人赞助 Log4j(现在有 46 个)。

老王点评:开源就是群策群力,但是这种你一块砖,我一根木头的做法,必然会在这幢房子越盖越高的时候发现某些基石已经理所当然的被遗忘。是时候考虑和建立一种更合理的开源和分配的机制了。

谷歌前 CEO 称中国将很快在技术方面领先于美国

谷歌前 CEO 和哈佛大学政府学教授在《华尔街日报》专栏 撰文称,去年,中国生产了世界上 50% 的电脑和移动电话,而美国只生产了 6%。美国每生产一块太阳能电池板,中国就生产 70 块。中国销售的电动汽车数量是美国的 4 倍。中国已经安装了 95 万个 5G 基站,而美国只有 10 万个。到去年年底,1.5 亿中国人在使用 5G 手机,平均速度为每秒 300M,而只有 600 万美国人可以使用 5G,速度为每秒 60M。在人工智能的实际应用方面,包括面部识别、语音识别和金融技术,中国现在明显超过美国。美国在半导体行业已经保持了近半个世纪的主导地位,但中国的半导体生产已经超过了美国,其在全球生产中的份额从 1990 年的不到 1% 上升到 15%,而美国的份额则从 37% 下降到 12%。

老王点评:中国自然是有了很大进步,但是也在很多方面需要追赶。这篇文章只是美国人的“中国威胁论”的新版本。

明年 Linux 内核主线可能支持 Rust

今年夏天,Linux 内核就有了早期的 Rust 补丁,用于审查和讨论在 Linux 内核中引入 Rust 编程语言支持。最近,开发者提交了第二版的 Rust 补丁,大约有 32000 行新代码。在这个版本中,Rust 代码现在依赖于稳定的 Rust 版本,而不是之前的测试版编译器状态。如果幸运的话,明年我们将看到这一初步支持被接受到主线。

老王点评:感觉内核对 Rust 的支持还是很慎重。

Rust 语言社区内讧,审核团队集体辞职

昨天,Rust 社区“帮助维护行为准则和社区标准”的审核团队突然宣布辞职,且即刻生效。他们用拉取请求发出了 该声明,称辞职“是为了抗议核心团队不对任何人负责,除了他们自己。”据悉,这次冲突爆发的原因由来已久,有人 指责 Rust 核心团队权力过大,他们之外的人无法决定谁加入核心团队,在 Rust 社区形成了一种“寡头政治”。也有人认为与 AWS 试图 “接管” Rust 有关。但目前具体情况尚没有得到澄清。而 Rust 核心团队已经火速任命了两位新的 审核团队 成员,以取代辞职的三位前成员。

老王点评:目前发展的很好的 Rust 语言,突然以这样的形式发生内讧,令整个社区为之震动,无论如何,我觉得这对 Rust 语言的发展是不利的。

JetBrains 发起成立 PHP 基金会

为 78% 的网站提供了动力的 PHP 已经有 26 年历史 了,终于有自己的基金会了,虽然这个基金会的成立原因让我百味杂陈。据悉,这项 决定 背后的主要原因之一,是 PHP 的主要贡献者 Nikita Popov 决定离开 JetBrains,将精力从 PHP 转向 LLVM 。他在为 JetBrains 工作的近三年时间里,为 PHP 7.4/8.0/8.1 这三个大版本做出了重要贡献。该基金会 的成员除了 JetBrains 还包括 WordPress 背后的 Automattic,以及 Laravel、Zend 等公司。

老王点评:我居然忘记了 PHP 一直没有自己的基金会。虽然这次是由于主要贡献者离开而成立,但是希望可以带来更好的发展。

因微软赏金太少,安全研究人员曝光 Windows 提权零日漏洞

有安全研究人员在推特上说:由于微软调整了漏洞赏金计划,其原本想提交的一个影响所有受支持 Windows 操作系统版本的提权漏洞的“认定价值”,从 10000 美元瞬间跌到了 1000 美元。他称,大家对微软的新漏洞赏金政策感到十分沮丧,因而将其发现的漏洞 公之于众。有安全研究人员认为他披露的漏洞,很容易让普通用户提权获得 SYSTEM 系统权限。

老王点评:虽然说微软这样的做法有些不厚道,但是一怒曝光也欠考虑。如果不满意微软的赏金,你可以不挖啊,这样直接曝光和利用漏洞做黑产有什么区别?

了解在 Linux 上安装 Rust 编程语言及其包管理器 Cargo 的各种方法。

自从 Mozilla 贡献了 Rust 语言之后,它就获得了更加突出和受欢迎的地位。口说无凭。Rust 将被使用在 Linux 内核中,它是继 C 语言之后的第二种编程语言。

许多开发人员也开始使用 Rust 语言制作很棒的基于命令行的工具。这些工具通常可以通过 Cargo 包管理器 获得。

这就是为什么在 Linux 中安装 Rust 支持对程序员和最终用户都很重要的原因。

官方 Rust 文档建议通过以下这种方式下载并执行安装程序脚本在 Linux 中安装 Rust:

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

这是可行的。但是,你的发行版可能已经打包了 Rust。使用你的发行版的 包管理器 也是一种选择。

让我向你介绍官方 Rust 方式和包管理器方式的 Rust 安装步骤。

方法1:使用官方方法在任意的 Linux 上安装 Rust

这种方法有几个优点:

  • 你可以获取最新的 Rust 和 Cargo 版本
  • Rust 仅仅是为当前的用户安装,并不是所有用户
  • 你并不需要 root 用户或者 sudo 权限就可以为自己安装 Rust

一些人不喜欢从互联网下载并 运行 shell 脚本,即使它来自官方。但是,由于它不需要 root 访问权限并且脚本来自官方,因此以这种方式安装它应该是安全的。

首先,确保你已经安装了 curl。如果没安装,使用你的发行版的包管理器安装它。你可以使用 apt 命令在 Ubuntu 和 Debian 上安装 Curl

sudo apt install curl

接下来,使用这条命令下载脚本并运行它:

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

它会询问你输入所需的安装类型。选择选项 1

脚本完成安装后,你需要获取配置文件的来源,以使更改应用于你的 shell。

应用文件:

source $HOME/.cargo/env

完成后,通过检查已安装的版本来验证 Rust 是否可用:

rustc --version

Verifying Rust installation

太酷了。如果 Rust 发布了新版本,你可以使用如下命令更新已安装的版本:

rustup update

在你看到其它安装方法之前,让我快速展示如何移除以这种方式安装的 Rust。

删除以官方方式安装的 Rust

在终端中,使用如下的命令从系统中移除 Rust:

rustup self uninstall

询问时按 Y,你将从系统中删除 Rust。

Removing Rust from Linux

官方方式安装已经完成。让我们看看如何使用 apt 命令在 Ubuntu 上安装 Rust。

方法2:使用 apt 命令在 Ubuntu 上安装 Rust

为什么要使用包管理器?

  • 它在整个系统范围内安装 Rust,可供系统上的所有用户使用
  • 它与其它系统更新一起集中更新(如果你的发行版添加了新版本的 Rust)

Ubuntu 中有两个主要的 Rust 包:

  • rustc:用于 Rust 编程语言的 Rust 编译器
  • cargo:Cargo 是 Rust 的包管理器,它会自动安装 rustc

作为一个普通用户,你将使用 Cargo 来安装基于 Rust 的应用程序。作为程序员,你需要 Cargo 来获取其它 Rust 包或创建自己的包。

由于 cargo 包含 rustc,所以我建议安装它,以便一次性安装所有必需的软件包。

sudo apt install cargo

系统会要求你输入账号密码。

当然,你可以自由使用 apt install rustc,只安装 Rust。这取决于你的选择。

你可以验证是否为你和所有其他用户安装了 Rust(如果你愿意):

很好。让我也快速展示卸载步骤。

使用 apt remove 移除 Rust

要移除 Rust,你可以先移除 Cargo,然后使用 autoremove 命令移除随它安装的依赖项。

sudo apt remove cargo

现在运行 autoremove

sudo apt autoremove

就是这样。你现在了解了在 Ubuntu 和其它 Linux 发行版上安装 Rust 的所有基本知识。随时欢迎提出问题和建议。


via: https://itsfoss.com/install-rust-cargo-ubuntu-linux/

作者:Abhishek Prakash 选题:lujun9972 译者:perfiffer 校对:wxy

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

Rust 的高性能、高可靠性和高生产力使它适合于嵌入式系统。

 title=

在过去的几年里,Rust 在程序员中获得了热情的追捧。技术潮流来来去去,所以很难将仅仅因为某项新技术而产生的兴奋与对某项技术的优点的兴奋区分开来,但我认为 Rust 是一种真正设计良好的语言。它的目标是帮助开发者建立可靠和高效的软件,而且它从一开始就是为这个目的设计的。你可能听过一些 Rust 的关键特性,在这篇文章中,我会证明这些特性正是 Rust 也恰好适合嵌入式系统的原因。比如:

  • 高性能:它速度快,内存利用率高
  • 可靠性:在编译过程中可以消除内存错误
  • 生产力:很棒的文档,友好的编译器,有用的错误信息,以及一流的工具化。它有一个集成的包管理器和构建工具,智能的多编辑器支持自动补完和类型检查、自动格式化等等。

为什么使用 Rust 进行嵌入式开发?

Rust 的设计是为了保证安全和高性能。嵌入式软件会出现的问题主要是内存的问题。从某种程度上说,Rust 是一种面向编译器的语言,所以你可以确保在编译时安全使用内存。以下是使用 Rust 在嵌入式设备上开发的一些好处:

  • 强大的静态分析
  • 灵活的内存
  • 无畏的并发性
  • 互操作性
  • 可移植性
  • 社区驱动

在这篇文章中,我使用开源的 RT-Thread 操作系统 来演示如何使用 Rust 进行嵌入式开发。

如何在 C 语言中调用 Rust

在 C 代码中调用 Rust 代码时,你必须将 Rust 源代码打包成静态库文件。当 C 代码编译时,将其链接进去。

用 Rust 创建一个静态库

在这个过程中,有两个步骤:

1、使用 cargo init --lib rust_to_c 在 Clion 中建立一个 lib 库。在 lib.rs 中加入以下代码。下面的函数计算两个类型为 i32 的值的总和并返回结果:

#![no_std]
use core::panic::PanicInfo;

#[no_mangle]
pub extern "C" fn sum(a: i32, b: i32) -> i32 {
    a + b
}

#[panic_handler]
fn panic(_info:&PanicInfo) -> !{
    loop{}
}

2、在你的 Cargo.toml 文件中添加以下代码,以告诉 Rustc 要生成什么类型的库:

[lib]
name = "sum"
crate-type = ["staticlib"]
path = "src/lib.rs"

交叉编译

你可以针对你的目标平台进行交叉编译。假设你的嵌入式系统是基于 Arm 的,步骤很简单:

$ rustup target add armv7a-none-eabi

生成静态库文件:

$ cargo build --target=armv7a-none-eabi --release --verbose
Fresh rust_to_c v0.1.0
Finished release [optimized] target(s) in 0.01s

生成头文件

你也需要头文件:

1、安装 cbindgencbindgen 工具会从 Rust 库中生成一个 C 或 C++11 的头文件:

$ cargo install --force cbindgen

2、在你的项目文件夹下创建一个新的 cbindgen.toml 文件。

3、生成一个头文件:

$ cbindgen --config cbindgen.toml --crate rust_to_c --output sum.h

调用 Rust 库文件

现在你可以对你的 Rust 库进行调用了。

1、把生成的 sum.hsum.a 文件放到 rt-thread/bsp/qemu-vexpress-a9/applications 目录下。

2、修改 SConscript 文件并添加一个静态库:

   from building import *
   
   cwd     = GetCurrentDir()
   src     = Glob('*.c') + Glob('*.cpp')
   CPPPATH = [cwd]
   
   LIBS = ["libsum.a"]
   LIBPATH = [GetCurrentDir()]
   
   group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH, LIBS = LIBS, LIBPATH = LIBPATH)
   
   Return('group')

3、在主函数中调用 sum 函数,得到返回值,并 printf 该值:

   #include <stdint.h>
   #include <stdio.h>
   #include <stdlib.h>
   #include <rtthread.h>
   #include "sum.h"
   
   int main(void)
   {
       int32_t tmp;
   
       tmp = sum(1, 2);
       printf("call rust sum(1, 2) = %d\n", tmp);
   
       return 0;
   }

4、在 RT-Thread Env 环境中,使用 scons 来编译项目并运行:

$ scons -j6
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
[...]
scons: done building targets.

$ qemu.sh
 \ | /
- RT -     Thread Operating System
 / | \     4.0.4 build Jul 28 2021
2006 - 2021 Copyright by rt-thread team
lwIP-2.1.2 initialized!
[...]
call rust sum(1, 2) = 3

加、减、乘、除

你可以在 Rust 中实现一些复杂的数学运算。在 lib.rs 文件中,使用 Rust 语言来实现加、减、乘、除:

#![no_std]
use core::panic::PanicInfo;

#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) -> i32 {
    a + b
}

#[no_mangle]
pub extern "C" fn subtract(a: i32, b: i32) -> i32 {
    a - b
}

#[no_mangle]
pub extern "C" fn multiply(a: i32, b: i32) -> i32 {
    a * b
}

#[no_mangle]
pub extern "C" fn divide(a: i32, b: i32) -> i32 {
    a / b
}

#[panic_handler]
fn panic(_info:&PanicInfo) -> !{
    loop{}
}

构建你的库文件和头文件,并把它们放在应用程序目录中。使用 scons 来编译。如果在链接过程中出现错误,请在官方 Github 页面 中找到解决方案。

修改 rtconfig.py 文件,并添加链接参数 --allow-multiple-definition

       DEVICE = ' -march=armv7-a -marm -msoft-float'
       CFLAGS = DEVICE + ' -Wall'
       AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -D__ASSEMBLY__ -I.'
       LINK_SCRIPT = 'link.lds'
       LFLAGS = DEVICE + ' -nostartfiles -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,system_vectors,--allow-multiple-definition'+\
                         ' -T %s' % LINK_SCRIPT
   
       CPATH = ''
       LPATH = ''

编译并运行 QEMU 来看看你的工作。

在 Rust 中调用 C 语言

Rust 可以在 C 代码中调用,但是如何在你的 Rust 代码中调用 C 呢?下面是一个在 Rust 代码中调用 rt_kprintf C 函数的例子。

首先,修改 lib.rs 文件:

    // The imported rt-thread functions list
    extern "C" {
        pub fn rt_kprintf(format: *const u8, ...);
    }
   
    #[no_mangle]
    pub extern "C" fn add(a: i32, b: i32) -> i32 {
        unsafe {
            rt_kprintf(b"this is from rust\n" as *const u8);
        }
        a + b
    }

接下来,生成库文件:

$ cargo build --target=armv7a-none-eabi --release --verbose
Compiling rust_to_c v0.1.0
Running `rustc --crate-name sum --edition=2018 src/lib.rs --error-format=json --json=diagnostic-rendered-ansi --crate-type staticlib --emit=dep-info,link -C opt-level=3 -C embed-bitcode=no -C metadata=a
Finished release [optimized] target(s) in 0.11s

而现在,要运行代码,将 Rust 生成的库文件复制到应用程序目录中,然后重新构建:

$ scons -j6 scons: Reading SConscript files ... scons: done reading SConscript files. [...]
scons: Building targets ... scons: done building targets.

再次运行 QEMU,可以在你的嵌入式镜像中看到结果。

你可以拥有这一切

在你的嵌入式开发中使用 Rust,你可以获得 Rust 的所有功能,而不需要牺牲灵活性或稳定性。今天就在你的嵌入式系统上试试 Rust 吧。关于嵌入式 Rust 的过程(以及 RT-Thread 本身)的更多信息,请查看 RT-Thread 项目的 YouTube 频道。请记住,嵌入式也可以是开放的。


via: https://opensource.com/article/21/10/rust-embedded-development

作者:Alan Smithee 选题:lujun9972 译者:wxy 校对:wxy

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

美国国税局本财年已查获价值 12 亿美元的加密货币

美国政府会定期拍卖其扣押的比特币、以太坊、莱特币和其他加密货币。一旦案件结束,其扣押的加密货币被兑换成法定货币。美国国税局说,“在 2019 财年,我们扣押了价值约 70 万美元的加密货币。在 2020 年,它达到了 1.37 亿美元。而 2021 年到目前为止,我们已经达到了 12 亿美元。”随着网络犯罪的增加,加密货币的交易量也随之增加,美国政府的加密货币库预计将进一步膨胀。

这可真是一条“生财之路”啊,当然那些被用于非法用途的加密货币也该当此罚。

Rust 连续第六年成为 Stack Overflow 用户最喜欢的语言

根据编程问答网站 Stack Overflow 的调查,Rust 连续第六年成为其用户最喜欢的语言,其次是 Clojure、TypeScript、Elixir、Julia、Python 和 Dart。

其它调查结果显示:Redis 连续第五年成为最喜欢的数据库,AWS 是最喜欢和最常用的云计算平台,Svelte 是最喜欢的 Web 框架,Tensorflow 是最想要的库,Pytorch 是最喜欢的库,Git 是绝大部分程序员都使用的工具,JavaScript 是最常用的编程语言,MySQL 是最常用的数据库,React.js 是最常用的 Web 框架,Visual Studio Code 是最常用的 IDE。

Rust 离封神之路已经不远了。

美国国务院和其他三个美国机构的网络安全等级为 D 级

在美国参议院委员会周二发布的一份报告.pdf)中,八个联邦机构的网络安全状况非常糟糕,其中四个获得了 D 级,三个获得了 C 级,只有一个获得了 B 级。这八个美国政府部门是:美国社会安全局和国土安全部、美国国务院、美国交通部、美国住房和城市发展部、美国农业部、美国卫生和公共服务部以及美国教育部。在两年前,一份单独的报告发现同样这八个联邦机构在遵守联邦网络安全标准方面存在系统性失误。检查发现了许多同样的问题,这些问题已经困扰了联邦机构十多年了。

我们也要引以为戒啊。