分类 技术 下的文章

用你的树莓派制作一个接近完美的圆。

世界各地将 3 月 14 日定为圆周率日。许多人通过在房子周围找到的物体测量圆周率来庆祝圆周率日。我想用我的树莓派 3B 为今年的圆周率日做一些类似的事情。继续阅读以了解我如何使用我的树莓派测量圆周率。

你需要什么:

  • 树莓派单板机
  • 方格纸
  • 带毫米和厘米测量值的标尺

1、画一个圆

圆周率是圆的周长与其直径的比值。要计算圆周率,我们需要测量一个完美绘制的圆的周长和直径。幸运的是,树莓派主板上的安装孔足够大,可以使用铅笔或钢笔。我通过一个树莓派板安装孔插入了一根图钉,小心地将针放在一张方格纸上两条线的交点上。

握住别针,我将一支笔插入对面的安装孔中,并通过将笔绕着别针移动来画一个圆圈。树莓派主板底面的焊点会卡在纸上,但小心点还是可以画好圆圈的。

Use the Raspberry Pi as a compass to draw a circle.

2、把圆分成段

通过画一条穿过圆心的垂直线将圆分成两半,通过画一条穿过圆心的水平线将圆再次分成四分之一。当我画圆的时候,我把图钉正好放在图画纸上两条线的交点上,这样就很容易找到垂直和水平的中心线。你可以通过在对角线上画一条线来创造一个 “八分” 片。

Each small wedge is 1/8 of a circle.

进一步的划分是与尺子的练习。我用尺子找到“四分之一楔形”和“八分之一楔形”任意两个交点的中点,做成一个 1/16 的楔形。你可以使用相同的方法制作越来越小的 1/32 和 1/64 圆的切片。通过非常小心,我还能够在圆的 1/128 处测量出一个非常窄的楔形:

If you are careful, you can keep dividing to find 1/128 of a circle.

3、估算周长

我最小的楔形是一个圆的 1/128。如此小的切片,楔形的外弧非常小,我们可以用一条直线来近似它。这实际上不是圆周长的 1/128,但它足够接近,我们可以将其用作一个很好的估计。

Use the mm measurement on your ruler to measure the outer arc of the 1/128 segment.

使用我的尺子上的毫米测量值,我测量了我的 1/128 楔形的外弧为 3.8 毫米。这样,我可以估计圆的周长为 3.8 毫米乘以 128,即 486.4 毫米。要转换为厘米,除以十:48.64cm

4、计算圆周率

圆周率的值是圆的周长与其直径的比值。我们在步骤 3 中估算了周长。测量直径是使用尺子测量圆周的简单练习。我的圆是 15.4cm

现在我们知道了周长和直径,我们可以将圆周率计算为 48.64 除以 15.4,即 3.158。这与 pi 的实际值 3.141 相差不远。

测量圆周率是一项有趣的数学练习!各个年龄段的数学爱好者都可以使用方格纸、笔和尺子等简单工具自行测量圆周率。以一种有趣的新方式使用你的树莓派来绘制圆并独立测量圆周率。这是一个估计值,因为我们将圆上的 1/128 弧近似为一条直线,但这使我们无需太多努力就足够接近了。

(LCTT 校注:这真是对树莓派的“合理”应用,摔!)

(题图:MJ: Circumference in high resolution, very detailed)


via: https://opensource.com/article/23/3/measure-pi-raspberry-pi

作者:Jim Hall 选题:lkxed 译者:geekpi 校对:wxy

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

这是一个完全主观的列表,为你的 Linux 控制台提供一些有趣的字体建议。

最近,终端模拟器成为我的一个话题,它让我思考:大家最喜欢的终端字体是什么?

因此,我请贡献者分享了他们喜欢使用的字体。以下是他们的答案。

VT323

我喜欢在我的 GNOME 终端中使用一个不一样的字体(VT323),而不是在我的编程时用的编辑器或其他使用等宽字体的应用程序中使用的字体(Source Code Pro)。我就是喜欢经典的 VT 风格字体的外观。

有时,我会切换到原始的 IBM EGA 字体,因为在我眼里它看起来真的很漂亮。但是我把 EGA 和 DOS 联系在一起,把 VT323 和经典的 Unix 终端联系在一起,所以我大部分时间都用 VT323。下面是我使用 VT323 作为等宽字体的 GNOME 终端的屏幕截图:

gnome-terminal1108×926 output

我设置终端使用 24pt 大小的 VT323 字体,使得终端界面呈现一个舒适的大窗口。如果我要打开一个终端窗口,我其实是想使用它来些实实在在的工作,而不是敲两下就退出。我可能会在那个终端窗口呆一段时间,所以它应该很大,很容易看到。我也更喜欢 80x25 布局(每行 80 个字符,共 25 行),因为我是一个老式 DOS 命令行玩家,25 行在我看来才是 “正确的” 行数:

preference profile screen - text appearance

—— Jim Hall

等宽的字体

我不觉得我会只使用一个特定的字体。我通常使用 DejaVuLiberation。我喜欢等宽字体,因为它们更容易阅读。不过,我也不希望字母靠得太近。更重要的是,要能够区分数字 1 和小写的 L、数字 O 和大小的字母 Q 等等。另外,让所有特殊字符都能特别清楚地显示出来也很好。

我也喜欢让字体和背景之间呈现高对比度,所以我将背景设置为黑色,字符设置为白色。

—— Greg Pittman

Hack

我喜欢使用等宽字体,特别是在终端和代码编辑器中,因为它们更容易阅读。我使用 Hack 系列字体已经很多年了。它提供了一个很好的等宽字体,并提供了额外的字形和 Powerline 支持,我可以用它们在命令行上提供一些状态信息。

Command line

这是用 Fontpreview tool 工具生成的字体预览。

Display of font A-Z and the numbers

—— Ricardo Gerardi

Victor Mono

我在终端和 IDE 中使用 Victor Mono 已经好几年了。斜体的等宽手写体可能不是一开始就会喜欢上的,我喜欢这样,因为这让代码注释的外观很独特,与代码的其余部分明显不同。下面是它在终端中的样子:

terminal font is italic characters in a monospace cursive script

我在 IDE 和终端使用了 Solarized Dark 配色方案。如果可以的话,任何与工作或代码相关的东西都会使用相同的配色方案和相同的字体,所以一切看起来都很统一。这些年来,我使用了各种字体,但我总是试图在我的终端中使用与 IDE 中相同的字体。

—— Chris Reynolds

Monaco

目前,我用 16pt 大小的 Monaco 常规字形。(要比 12pt 或是 14pt 大小好多了。)

—— Jenny Panighetti

用粉红色来装点

这让我想起了有一次我恶作剧把团队里的其他开发者的终端都改成了粉红色(我是里面唯一的女性),一个婴儿粉的背景与深粉红色的文字的搭配。

我喜欢把我的个人终端弄得漂漂亮亮的,但在工作中,我会用黑底白字,并把字体弄成 16pt 左右,因为我喜欢较大的字体尺寸。

我总是把我的终端设置为 SF Mono 字体,但我把它加粗,并增大了一点,以便我可以更好地看到它。我最喜欢的颜色是粉红色或漂亮的水蓝色。我也喜欢终端的默认风格,它叫做 “Novel”。

Two open terminals, one pink and one aqua blue

—— RachieVee

万事不决,问 ChatGPT

对于这个问题,我决定问问 ChatGPT。以下是它的回答:

作为一个语言模型,我没有个人偏好,也没有能力拥有一种最喜欢的字体。但是,有一些流行的终端字体,包括 Monospace、Consolas 和 Inconsolata。这些字体很受欢迎,因为它们易于阅读,不同字符之间有明显的区别,即使在字体大小比较小的情况下也非常清晰。此外,它们被设计为适配在各种不同的操作系统和终端中得到更好的呈现,使它们成为开发人员和用户的通用选择。

我部分使用 GPT-3 生成了这段文字,GPT-3 是 OpenAI 的大规模语言生成模型。在生成草稿后,作者可以根据自己的喜好审查、编辑和修改,以符合个人的喜好,并对最终发布的内容承担最终责任。

—— Stephanie Brinley

Fantasque Sans Mono

$ grep font ~/.Xdefaults
URxvt*font: xft:FantasqueSansMono-Regular:pixelsize=12:antialias=true

我不记得我是什么时候开始使用 Fantasque Sans Mono 的,但我想这是我过去 8 年来的默认选择,无论是在 Rxvt 还是 Konsole 中。我不知道我在 GNOME 终端中使用的是什么字体,很可能是 GNOME 上的默认字体。

—— Seth Kenlon

Jetbrains Mono

最近,我将 Tilix 设置为默认终端。我的 Tilix 配置与 Jim Hall 使用的设置类似。几个不同点是:

  • 光标形状是下划线而不是块
  • 字体是 Jetbrains Mono Nerd Font Mono Medium 14

Black terminal with blue text

—— Alan Formy-Duval


via: https://opensource.com/article/23/4/linux-terminal-fonts

作者:Jim Hall 选题:lkxed 译者:Taivas Jumala 校对:wxy

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

在这篇文章中,我们将逐步介绍如何安装 Kubernetes 指标服务器。

Kubernetes(k8s)指标服务器是一个组件,用于收集和聚合来自 Kubernetes 集群中各种来源(包括节点和 容器荚 Pod )的指标数据。此数据可用于监控和优化资源利用率、识别潜在问题并提高 Kubernetes 集群的整体性能。

指标服务器收集资源利用率数据,例如集群中节点和容器荚的 CPU 和内存使用情况。它提供了一个 API 端点,可用于查询此数据并检索集群中特定资源的指标。

先决条件
  • 启动并运行 Kubernetes 集群(v1.21 或更高版本)。
  • kubectl 命令行工具已安装,并配置为与你的 Kubernetes 集群交互。
  • 创建和修改 Kubernetes 对象的能力。

事不宜迟,让我们深入了解安装步骤。

步骤 1 下载指标服务器清单

第一步是从 Kubernetes GitHub 仓库下载最新的指标服务器清单文件。使用下面的 curl 命令下载 yaml 文件:

# curl -LO https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

如果你计划在高可用性模式下安装指标服务器,请下载以下清单文件:

# curl https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21+.yaml

步骤 2 修改指标服务器 Yaml 文件

接下来,你需要修改指标服务器的 yaml 文件以设置一些配置选项:

# vi components.yaml

找到 container 下的 args 部分,添加以下行:

- --kubelet-insecure-tls

spec 下,添加以下参数:

hostNetwork: true

保存并关闭文件。

步骤 3 部署指标服务器

现在,我们准备好部署指标服务器,运行以下 kubectl 命令:

# kubectl apply -f components.yaml

步骤 4 验证指标服务器部署

部署指标服务器后,通过检查在 kube-system 命名空间中运行的容器荚状态来验证它的状态:

# kubectl get pods -n kube-system

上面的输出确认指标服务器容器荚已启动并正在运行。

步骤 5 测试指标服务器安装

最后,你可以通过运行以下 kubectl 命令来测试指标服务器:

# kubectl top nodes

此命令应显示集群中每个节点的资源利用率,包括 CPU 和内存使用率。

要查看当前命名空间或特定命名空间的容器荚资源利用率,请运行:

# kubectl top pod
# kubectl top pod -n kube-system

这就是这篇文章的全部内容,我希望你能从中找到有用的信息。请在下面的评论部分发表你的反馈和疑问。

(题图:MJ: Kubernetes container paper art light blue background ultra-detailed topview)


via: https://www.linuxtechi.com/how-to-install-kubernetes-metrics-server/

作者:Pradeep Kumar 选题:lkxed 译者:geekpi 校对:wxy

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

探索 Collabora Online 的互操作性,使文档和电子表格在所有办公套件中兼容。

Collabora Online 支持各种各样的文件和格式。不过,这个开源办公套件在互操作性方面的表现如何?本文仔细研究了 Collabora Online 与不同办公套件(如 Microsoft 365 和 Google Workspace)交换复杂文本文档和电子表格的能力。

Collabora Online 是一款适用于云端或内部的开源办公套件,可以保护你的隐私,让你完全控制你的数据。该软件由位于剑桥的 Collabora Productivity Ltd 开发,其团队在世界各地工作。Collabora Online 以 LibreOffice 技术为基础,并主要使用 Mozilla Public License 2.0 许可。

Collabora Online 可以在任何现代网络浏览器中运行,不需要额外的插件或附加组件。它有一个完整的基于云的办公套件,包括一个文字处理器(Writer)、电子表格程序(Calc)、演示软件(Impress)和一个设计矢量图的应用(Draw)。

本文介绍了 Collabora Online 的一些新的互操作性功能,包括宏、动态字体加载和电子表格应用程序的 Sparklines 支持。这些功能扩展了现有的对微软文件格式的出色处理。

什么是互操作性,为什么它很重要?

一般来说,互操作性是指不同的设备或应用在一起工作和无缝交换数据的能力。在办公套件的背景下,互操作性主要是指文件格式。用户应该能够打开、编辑和保存 .doc.docx.xls.xlsx.odt.ods文件,无论它们是用微软的 Word、苹果的 iWork 还是 LibreOffice 创建。

对于在线办公套件也是如此。通过确保文件可以在 Microsoft 365、Google Workspace 和 Collabora Online 之间交换,互操作性有助于提高生产力和促进协作。所有在线办公套件都可以保存各种格式的文件。它们还可以导入和导出最初在其他办公套件中创建的文档、电子表格和演示文稿。

管理宏,确保文件处理顺畅

经常引起问题的是带有宏的文件。它们通常是用特定的编程语言开发的,适用于某个特定的应用。虽然在 Google Sheets 中记录和编辑宏是可能的,但在微软 Office 中用 Visual Basic for Applications(VBA)实现的宏不能被转换,必须用 Google Apps Script 重新创建。打开带有 VBA 宏的 Word 文档会产生错误,并通知用户这些宏将被忽略或禁用。

Collabora Online 支持宏,并在容器内的服务器端运行它们。该功能默认是禁用的,管理员必须在 coolwsd.xml 配置文件中明确激活它。之后,用户可以选择在加载文档时允许使用宏。不过,有几个限制。例如,它不可能访问数据库源,访问其他(外部)文件,调用外部程序,使用控制形状,等等。多年来,由于活跃的社区以及客户和合作伙伴的贡献,Collabora Online 支持的代码和对象的数量已经大大增加。

Collabora Online:动态字体加载

办公套件中互操作性的另一个关键方面是字体。使用含有在特定平台上无法使用的字体的文档,可能会导致错误、意外的格式变化,甚至是内容的完全丢失。

微软 Office 文档经常使用 Google Workspace 或 Collabora Online 中没有的默认字体。为了解决这个问题,办公套件经常建议替换掉缺失的字体。这通常是有用的,但有时会导致不好的结果。

从 22.05.7 版本(2022 年 11 月发布)开始,Collabora Online 可以列出缺失的字体并建议替换。它还可以下载必要的字体并将其添加到服务器上。一切都是动态进行的,而不会停机。新的字体在几分钟内就可以在编辑会话中使用,实现最佳的互操作性。

Fonts can introduce a surprising complexity to your document, but Collabora Online can handle it.

为了实现这一目标,在文档被渲染的同时,通过 API 追踪丢失字体的信息。一个 JSON 文件存储了需要添加的字体列表。coolwsd.xml 文件(服务器端的设置)指向该 JSON 文件。它每分钟检查一次修改情况,并下载缺少的字体。

探索 Sparkline:显示电子表格中的数据趋势

Sparkline 是在工作表中单个单元格内的微小图表,它可以将数据的趋势可视化。这些微型图表有不同的风格,包括线、条和柱。Sparkline 还支持不同的颜色和水平/垂直轴。与显示尽可能多的数据并与文本流分开的大型图表不同,Sparkline 被缩减为核心值,通常放在同一单元格中数据本身的旁边或后面。Sparkline 通常是为一个单元格定义的,但也可以将共享相同数据范围和属性的多个 Sparkline 进行分组,以便进行渲染。

Customize the look of Sparklines.

Sparkline 是一个紧凑的参考,提供了一个快速的方法来说明趋势、模式、统计异常、增加和减少,同时避免了完整图表的复杂性。下面是一些不同的 Sparkline 类型:

  • 线形图: 通过线段从左到右连接各点,对于显示在一定时间内变化的数据特别有用。
  • 条形图: 使用水平排列的条形图表示数据,通常用于比较数字数据。
  • 柱状图: 是比较一系列数值的理想选择。柱是垂直的,其长度表示数据的相对大小/价值。柱状图经常被用来表示不同类别或群体的数据。

要创建一个 Sparkline,你首先要为该函数定义一个输入数据范围(一列或一行中的两个或多个单元格)。你还可以决定你希望 Sparkline 出现的单元格。在大多数电子表格应用中,你右键点击迷你图表来调整其属性,选择图表类型,并选择颜色。Collabora Online 为此提供了一个单独的对话框,使得改变微型图表的风格变得简单而方便。

在三个线上办公软件之间交换带有 Sparkline 的文件是可能的,不会丢失图表及其格式。如果你想在 Microsoft 365、Google Workspace 和 Collabora Online 之间共享电子表格,请确保使用微软格式的 .xlsx 进行导入和导出,因为 Google Sheets 不能很好地处理 .ods 文件。

文件交换很容易

Collabora Online 提供了几个新的互操作性功能,使得与其他办公套件交换文件变得容易。宏程序支持、动态字体加载和 Sparkline 确保了文档的无缝处理,避免了意外的格式变化。使用 Collabora Online 来统一和简化你的办公工作。

(题图:MJ:Office docs process dark plain background Illustration )


via: https://opensource.com/article/23/4/open-source-collabora-online-interoperability

作者:Heike Jurzik 选题:lkxed 译者:geekpi 校对:wxy

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

之前,我在写 有关 embark 的内容,我的第一设备为启动远程视频流设计了一个新的 embark。embark 的作者 Omar Antolín Camarena 不仅阅读了这篇内容,还点评了一下我认为值得跟进的一些重大改进。

首先,你应该记得我们曾定义过一个检测视频 URL 的函数:

    (defun jao-video-finder ()
      "Check whether we're looking at a video URL.
    Return (video-url . <URL>) if so."
      (when-let ((url (thing-at-point-url-at-point)))
        (when (string-match-p jao-video-url-rx url)
          (cons 'video-url url))))

当我们得到了一个非空的 url 值,即便它不是一个视频链接,但它仍然是一个确切的 URL,并且 embark 已有了一个 url 类别,所以我们可以借助默认的 URL 寻检器存储一个新的句法分析,语句如下:

    (when-let ((url (thing-at-point-url-at-point)))
      (cons (if (string-match-p jao-video-url-rx url) 'video-url 'url) url))

这里有一个潜在的缺点就是:我们重写了 embark 的寻检器,embark-target-url-at-point,所以我们可能更愿意保留后者。

实际上多亏了 embark 的 目标转换器 我们才能做成。我们可以在 embark-transformers-alist 中添加任意一个函数,应用于任何一个给定类别的目标,而 embark 会将其转换后的值应用于它的操作中。Omar 很贴切地把这个过程称为“目标的精化”;我们具体做法如下:

    (defun jao-refine-url-type (url)
      "Refine type of URL in case it is a video."
      (cons (if (string-match-p jao-video-url-rx url) 'video-url 'url) url))

    (add-to-list 'embark-transformer-alist '(url . jao-refine-url-type))

通过这种策略,我们就不再需要 jao-video-finder 了,而且从概念上来说,我们的 video-url 应该被定义为一个精化操作而并非是一个目标 [脚注 1]。Omar 的第二个提议也与这个概念相契合:想必我们都希望所有关于 url 和我们的 video-url 的操作都是可用的,不是吗? 唔,这就是为什么我们用来定义行为的 embark-define-keymap 的宏可以通过使用关键字 [脚注 2] :parent 继承其他键映射中已经定义的所有操作的原因:

    (embark-define-keymap jao-video-url-map
      "Actions on URLs pointing to remote video streams."
      :parent embark-url-map
      ("p" jao-play-video-url))

    (add-to-list 'embark-keymap-alist '(video-url . jao-video-url-map))

这种继承键映射的功能并非是 embark 的附属功能:vanilla Emacs 键映射通过标准函数 set-keymap-parent 已经搞定它了。你可以完全不用 embark-define-keymap 来定义 jao-video-url-map,工作原理是一样的。

这样,我们的代码就能够更短,特征更多:谢谢你,Omar!

脚注 1:在某些情况下,保留 jao-video-finder 是有意义的,即,如果我们想要改变检测 URL 的功能的话。例如,我在使用 emacs-w3m 的时候,经常有一个 URL 作为文本属性储存了起来(实际文本是个链接文本)。要通过那里检索 URL,就需要调用 w3m-anchor,而用 embark-target-url-at-point 就会错过它。对于这种情况,我最终编写(并使用)jao-video-finder 将其通过下文定义:

    (when-let ((url (or (w3m-anchor) (thing-at-point-url-at-point))))
      (cons (if (string-match-p jao-video-url-rx url) 'video-url 'url) url))

另一种达成同件事情的方式(再次向 Omar 致敬)便是为 w3m 的锚点放置一个特定的巡检器(且继续使用 video-url 的转换器):

    (defun jao-w3m-url-finder ()
      (when-let ((url (w3m-anchor)))
        (cons 'url url)))

    (add-to-list 'embark-target-finders #'jao-w3m-url-finder)

这种方法更加模块化,并且取决于你们的喜好,且更加巧妙。这些功能都很小巧并且两种方法之间并没有太大的差别,但是如果其中某一种继续加入更多寻检器的话,前一种方法用起来来反而会让一切变得更糟。

脚注 2:在我最开始的例子中,我在视频地图中还添加了 browse-urlbrowse-url-firefox。前一个已不再重要,因为它已经在 embark-url-map 中出现过了,如果我们想让 browse-url-firefox所有 的 URLs 可用,我们可以将其加入到 embark-url-map (谨记,embark 的键映射只是 Emacs 的键映射)。这是另一种扩展 embark 的简便方法。

(题图:MJ:emacs video geek wallpaper dark plain background Illustration)


via: https://jao.io/blog/an-even-better-video-wharf.html

作者:jao 选题:lujun9972 译者:Drwhooooo 校对:wxy

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

在 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中国 荣誉推出