[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]