氧化 Fedora: 立即试用 Rust 及其应用程序

[ad_1]

近年来,开发能够最大限度地减少安全漏洞的软件变得越来越重要。 内存管理错误是这些漏洞的常见原因。 为此,Mozilla 社区在过去几年中一直在构建 Rust 语言和生态系统 它主要侧重于消除这些错误。 Rust 可用于 Fedora 今天,连同一些应用程序 Fedora 27 及更高,如下所示。

介绍锈

Rust 编程语言将自己标榜为“一种运行速度极快、防止段错误并保证线程安全的系统编程语言”。 但是,这是什么意思?

与 Python、Ruby 和 Java 等大多数流行的编程语言不同,Rust 被编译为机器代码,而不是在运行时环境中执行。 这意味着所有用 Rust 编写的代码都必须在执行之前很久就进行处理。 Rust 编译器在编译时检查代码,以确保消除编译代码中的问题。 此类问题的示例如下:

  • 数据竞争:访问同一内存位置的线程之间的争用,而一个线程正试图在那里写入
  • 内存访问违规:尝试访问/操作内存中不允许或不再存在的数据

当然,仅靠检查不足以完成这项工作。 Rust 具有一长串专门为开发“安全”代码而量身定制的语言增强功能。

如果您想了解有关该语言的更多信息,请访问 Rust 网站 提供出色的文档. 您还可以在之前的杂志文章中阅读有关 Rust 的信息。

生锈的箱子

Rust 模块也称为 crate。 板条箱的主要指标是 板条箱.io. 开发人员使用 cargo 工具管理 crates 及其构建和运行时依赖项。

今天, Fedora 包括 Rawhide 中的 300 多个 Rust 板条箱,在撰写本文时将变为 Fedora 28. 超过 120 个 Rust crates 包含在 Fedora 27. 这个选择包括几乎所有在 Linux 上与 Rust 稳定编译器一起工作的流行 crate。 更多的板条箱将在 Fedora 随着时间的推移!

锈应用

今天, Fedora 包括一些有趣的基于 Rust 的应用程序。 所有这些都可以在 Fedora 27 和更新版本,可以通过 DNF 安装。 这里有些例子:

ripgrep

ripgrep 是grep传统的命令行工具。 它针对使用开箱即用的并行性搜索大型文件目录进行了优化。 默认情况下,它会递归搜索您的当前目录。 此实用程序会自动跳过与 .gitignore 文件中的模式匹配的文件(可以禁用此选项)。 ripgrep 支持文件类型过滤和 Unicode 的全部范围,同时保持快速。 它甚至可以自动搜索压缩文件。 在大多数情况下,它是 比 grep、ag、git grep、ucg、pt 和 shift 更快.

例如,使用 ripgrep 和 GNU grep 搜索 8GB 文件的简单比较:

$ /tmp env LC_ALL=C time rg -n -w 'Sherlock [A-Z]w+' OpenSubtitles2018.raw.en | wc -l
2.16user 0.33system 0:02.50elapsed 99%CPU (0avgtext+0avgdata 8151736maxresident)k
0inputs+0outputs (0major+127911minor)pagefaults 0swaps
4148
$ /tmp env LC_ALL=C time egrep -n -w 'Sherlock [A-Z]w+' OpenSubtitles2018.raw.en | wc -l
7.98user 1.21system 0:09.21elapsed 99%CPU (0avgtext+0avgdata 2624maxresident)k
752inputs+0outputs (3major+223minor)pagefaults 0swaps
4148

GNU grep 需要 9.2 秒,而 ripgrep 只需要 2.5 秒。 令人印象深刻,不是吗? 如果您是上述任何工具的用户,您可能需要查看 ack、ag、git-grep、GNU grep、ripgrep的特性对比表. 要安装 ripgrep,请使用以下命令运行此命令 sudo:

sudo dnf install ripgrep

是 ls 的现代替代品。 默认情况下,它使用颜色作为信息,这有助于您区分文件类型和所有权等属性。 它还具有原始 ls 中不存在的额外功能,例如查看目录的 git 状态,或通过具有树视图的子目录递归列出文件。

要安装 exa 实用程序,请使用以下命令:

sudo dnf install exa

时计

时井 是一种分析项目中的代码并提供项目统计信息的工具。 它会准确显示您有多少代码、注释或空白行。 它最初是受到 Perl 脚本 cloc 的启发。 但是,cloc 速度较慢且更容易出错,因为它会遇到导致它误将代码视为注释的情况,反之亦然。 Tokei 最大的卖点之一是速度。 以下示例显示了 Tokei 如何在 Fedora的 Firefox 58 的源代码。该代码库有超过 175,000 个文件,其中包含超过 2600 万行代码。

$ time tokei firefox-58.0.1/
-------------------------------------------------------------------------------
 Language            Files        Lines         Code     Comments       Blanks
-------------------------------------------------------------------------------
 Ada                    10         2840         1681          560          599
 Assembly              497       281559       235805        15038        30716
 Autoconf              417        59137        43862         7533         7742
 BASH                    3          342          257           43           42
 Batch                  48         4005         3380          101          524
 C                    3761      2567794      1864710       402801       300283
 C Header            14258      3034649      1830164       782437       422048
 CMake                  72        10811         7263         2009         1539
 C#                      9         1615          879          506          230
 C Shell                 2           72           34           14           24
 CoffeeScript            4           64           34           12           18
 C++                 11055      5812950      4449843       607276       755831
 C++ Header             92        41014        32622         4627         3765
 CSS                  1401       123014        95702         8047        19265
 D                       1           34            8           22            4
 Dockerfile             76         1983         1290          320          373
 Emacs Lisp              2          338          258           38           42
 Elm                     2          542          399           29          114
 Fish                    2          152           94           26           32
 GLSL                 2952       144792        57711        68029        19052
 Go                      2          485          314          101           70
 Handlebars             17          212          211            0            1
 Happy                   3         2008         2008            0            0
 HTML                62132      3479735      2955995       140901       382839
 Java                 2872       511312       324521       120016        66775
 JavaScript          55028      5576166      3572186      1199464       804516
 JSON                 1078       803571       803571            0            0
 JSX                     6          886          706           62          118
 Makefile              723        46698        25789        12197         8712
 Markdown              572        62395        62395            0            0
 Module-Definition      52         5118         3865         1173           80
 MSBuild                 3          223          165           48           10
 Objective C            60         4055         2889          527          639
 Objective C++         238        73816        54479         8071        11266
 Org                     2           54           42            0           12
 Pascal                  5         1569         1122          210          237
 Perl                   96        21520        15188         2987         3345
 PHP                     2          864          440          284          140
 Prolog                  1           17           15            0            2
 Protocol Buffers       24         5184         1988         2466          730
 Python               4165       787017       592691        66138       128188
 R                       1           38           12           18            8
 Rakefile                1           11            9            0            2
 ReStructuredText      388        51423        51423            0            0
 Ruby                    4          181          153            5           23
 Rust                 3250      1095452       833476       163020        98956
 Sass                    6          215          157           16           42
 Scala                   1          195          164            2           29
 Scons                   1           25           18            1            6
 Shell                 652        91256        64023        15520        11713
 SVG                  3885       152642       126545        18540         7557
 Swift                   1            9            7            0            2
 TeX                     2        11081         6860         3236          985
 Plain Text           2992      1444524      1444524            0            0
 TOML                  445        10738         8291         1102         1345
 TypeScript             21        32983        28256         4544          183
 Vim Script              5            5            5            0            0
 XML                  2259       225666       204439         6691        14536
 YAML                  154        34415        31155          560         2700
-------------------------------------------------------------------------------
 Total              175813     26621471     19846093      3667368      3108010
-------------------------------------------------------------------------------
22.36user 4.79system 0:07.61elapsed 356%CPU (0avgtext+0avgdata 136184maxresident)k
1864920inputs+0outputs (0major+48004minor)pagefaults 0swaps

这是使用原始 cloc 实用程序的相同练习:

$ time cloc firefox-58.0.1/
  220532 text files.
  209900 unique files.                                          
Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through in regex; marked by <-- HERE in m/^(.*?){ <-- HERE [^$]/ at /usr/bin/cloc line 4850.
Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through in regex; marked by <-- HERE in m/^(.*?){ <-- HERE [^$]/ at /usr/bin/cloc line 4850.
   49681 files ignored.

github.com/AlDanial/cloc v 1.72  T=627.95 s (276.9 files/s, 40329.3 lines/s)
---------------------------------------------------------------------------------------
Language                             files          blank        comment           code
---------------------------------------------------------------------------------------
C++                                  10964         755278         602036        4450883
JavaScript                           52752         795983        1200658        3557155
HTML                                 58973         374714         133514        2819513
C                                     3684         299543         406289        1857360
C/C++ Header                         14119         415207         776222        1805495
Rust                                  3145          97425         160172         822947
JSON                                  1228            516              0         802139
Python                                3886         124724         142265         495765
Java                                  2866          66713         120321         323965
Assembly                               469          30686          32627         217460
XML                                   2190          14459           6621         202914
INI                                   8252          53608            159         202694
Bourne Shell                           672          24242          26559         151447
IDL                                   1295          15749              0         119280
XHTML                                 2399          10646           4857         100383
CSS                                   1053          18805           7891          92729
Objective C++                          222          11245           8032          54356
NAnt script                           1378           8371              0          48827
Markdown                               569          17225              4          44998
MSBuild script                          28              1              0          44320
GLSL                                  1827          12943          42011          42461
m4                                      77           4151            827          35890
YAML                                   296           3082            703          34810
make                                   634           7630          10330          27522
Perl                                   103           3632           3690          16208
DTD                                    176           3698           4696          14297
CMake                                   72           1539           2009           7263
TeX                                      2            985           3236           6860
Windows Module Definition               48             54           1161           3617
DOS Batch                               44            492             87           3200
SKILL                                    4             68              2           2419
HLSL                                    33            409            285           2045
Protocol Buffers                        24            730           2472           1982
Windows Resource File                   48            442            575           1864
Objective C                             37            459            514           1823
yacc                                     3            173             85           1750
Ada                                     10            599            560           1681
XSLT                                    26            168            142           1437
Pascal                                   8            260            504           1405
Cython                                   1             59            158           1310
Dockerfile                              74            367            315           1266
Groovy                                  14            249            316           1194
lex                                      4            237             82           1074
diff                                    14            530           2038            963
C#                                       9            230            506            879
MATLAB                                  11            162            147            874
JSX                                      6            118             62            706
Bourne Again Shell                      22            126            196            676
Jam                                     27            170            379            586
Korn Shell                               5             83            165            526
Expect                                   6            105            164            506
PHP                                      2            140            288            436
Elm                                      2            114             29            399
Ant                                      2             27            107            389
Go                                       2             70            101            314
TypeScript                              13             73             72            268
Lisp                                     2             42             38            258
Handlebars                              12              1              0            199
Mako                                     3             14              0            168
Scala                                    1             29              2            164
Ruby                                     4             25              4            163
awk                                      2             41              8            154
Sass                                     4             36             15            144
Haxe                                     2             25              5            137
Vuejs Component                          2              6              0            122
Visual Basic                             1             17             15             84
sed                                      7             16             27             73
PowerShell                               2             17            110             46
SAS                                      1             14             22             32
C Shell                                  2             13              7             28
CoffeeScript                             3             13              8             25
Prolog                                   1              2              0             15
R                                        1              8             18             12
MUMPS                                    3              2              0              9
D                                        1              4             22              8
Mathematica                              2              1              0              7
Swift                                    1              2              0              7
Freemarker Template                      3              0              0              6
Stylus                                   1              2              0              5
vim script                               1              0              0              1
---------------------------------------------------------------------------------------
SUM:                                173892        3179844        3707542       18437397
---------------------------------------------------------------------------------------
266.51user 306.34system 10:28.37elapsed 91%CPU (0avgtext+0avgdata 446552maxresident)k
6704096inputs+0outputs (12major+44888834minor)pagefaults 0swaps

平均而言,tokei 需要 8 秒,而 cloc 需要 12 分钟。 要安装 tokei,请使用以下命令:

sudo dnf install tokei

终端

终端 是一个使用 Unicode 块符号在终端中绘制发光的动画生命体的程序。 它不是典型的 Linux 实用程序,而是类似于数字艺术实验的东西。 它确实有一些小众应用,比如基准测试终端模拟器或通过结合超时来制作酷炫或可怕的 SSH 问候消息。

您可以使用命令行参数自定义渲染“动物”的几乎所有方面。 目前,唯一可用的文档是 (注释良好的)源代码一些例子. Ternimal 是用纯 Rust 编写的,并经过仔细分析和优化。 它非常节省资源,并且可以以最少的 CPU 使用率渲染流畅、复杂的动画。

要安装 Ternimal,请运行以下命令:

sudo dnf install ternimal

Fedora 锈 SIG

在过去的一年里,为了将 Rust 生态系统顺利集成到 Fedora. Fedora 现在有一个特殊兴趣小组 (SIG) 来支持 Rust 生态系统。 这 Fedora 锈 SIG 是 Rust 在 Fedora,包括板条箱和应用程序包装。

Rust SIG 打包和支持 Rust 生态系统的方法与某些 SIG 不同 Fedora. 由于 Rust 是一个全新的生态系统,Rust SIG 正在开辟新天地。 成员们很早就决定让这成为一个真正的跨发行版工作,并使用 RPM 包管理器在 Linux 发行版之间协调 Rust 代码的打包。 SIG 与 魔法师openSUSE 以确保该工具适用于所有人。 因此,今天你可以使 Fedora、Mageia 和 openSUSE 兼容的 Rust 板条箱和应用程序的打包,在任何这些发行版中使用 rust2rpm。

致谢

当然,如果没有几个人的努力,这一切都是不可能的:

  • 如果没有来自 openSUSE 的 Michael Schröder 的帮助,我们在依赖解析器堆栈中需要的许多基本部分都将无法实现。 RPM 团队的 Florian Festi 值得特别感谢他审查了所有这些工作并确保它在 RPM 中是正常的。
  • Rust 编译器打包和查找/修复与此相关的奇怪错误的许多改进可以归功于 Red Hat 的 Josh Stone 和 Mageia 的 Rémi Verschelde。 他们都在各自的发行版中维护核心 Rust 堆栈(Fedora/EPEL 和 Mageia)并定期相互分享工作,以确保 Rust 和 Cargo 以最佳形式提供。
  • 亚当米勒(Fedora 发布工程)、Dusty Mabe (Project Atomic)、Kushal Das (Fedora Cloud), 帕特里克·尤特维克 (Fedora 发布工程)和 Randy Barlow(Fedora 发布工程)在改进基础设施以帮助支持为 Rust 生态系统带来一流体验所需的新功能方面值得称赞 Fedora.
  • 最后但同样重要的是,Rust 社区非常棒。 与他们互动是一次很棒的体验,Rust 及其生态系统的存在归功于他们和他们的努力。

拍摄者 詹姆斯·萨顿不飞溅.

[ad_2]

Related Posts