分类 观点 下的文章

一套完整启用的 DevOps 工具链可推动你的创新计划,实现快速部署并节约成本。

 title=

不同规模和不同行业组织都致力于为提高软件交付的速度和质量提供解决方案。这不仅保证了他们的生存,还令他们在全球市场取得了成功。DevOps 可以帮助他们规划出一条最佳路线。

DevOps 是一个系统,通过引入不同的工具链连接不同工作流程,以便及时交付项目并降低所需的开销。

在我工作的 IT 服务公司 Accedia,我们会帮助客户落地一套完整的 DevOps 工具链,这套工具链能帮助他们达到甚至超越他们的业务目标。在这篇文章,我会分享目前为止从 DevOps 项目中汲取的经验。

DevOps 工具链是什么?

一套完善的 DevOps 工具链可以在不同阶段中使用不同的 DevOps 工具来解决特定的业务带来的挑战。一条工具链能保证前端和后端开发者、质量测试人员、客户都能够从中获得收益。构建工具链的目的是为了自动化开发和部署过程,以确保快速、可靠、预算友好地交付与创新。

我们发现成功构建一套 DevOps 工具链不是一个简单的事情。它需要实验和不断的完善,保证必要的流程是完全自动化的。

为什么你需要 DevOps 工具链

DevOps 工具链自动化了工作流中的所有技术元素。它能让不同团队在一个平台上进行工作,因此可以使你专注于业务战略以推动组织走向未来。

我们总结了五个实现 DevOps 工具链所带来的好处。你可以让管理层相信,是值得为 DevOps 工具链的开发投入资源和时间的。

  1. 更快、更高效的生产部署:DevOps 工具自动化了大部分软件开发进程。这会使产品开发专注于创新,交付更加敏捷,更领先于竞争对手。
  2. 预算和时间优化:将手动的任务转变为自动化会使你的组织节省时间和资源。当没有人为的错误和时间管理不足带来的额外支出,预算自然会得到优化。
  3. 高效的开发:DevOps 工具链会减少开发工作中不必要的延时,提高开发效率。前端、后端、质量测试人员的工作是一致的,所以没有人需要协调不同团队之间人员的交付。
  4. 更快的部署意味着更高的质量:DevOps 工具链保证了缺陷能够很快被解决,并且迅速完成高质量的部署进程。怎么样?它可以生成有针对性的告警,并将重要的事件通知给你的团队。这会让你主动地发现并解决潜在的问题,从而规避故障的不断的升级从而导致的客户服务不可用。
  5. 及时事件管理:DevOps 工具链有助于优化事件管理记录。它能够识别 IT 事件并且逐渐升级事件级别,通知给指定团队的成员,直到问题被解决。这意味着消息的接受和处理会更加的迅速,因为它们发送给了正确的目标。

DevOps 工具链的实践

对我的团队来说,DevOps 并不新鲜。我们已经敏捷开发很长时间了,并且我们总是热衷于探索最优的工作流。在我们的实践中,往往都是应用复杂性增加从而带来了自动化的需求。

这是我们为一个客户配置的工具链。这个项目包含了移动运营方案,连接了金融交易的所有参与者 (卖方、买方、银行)。这个客户需要动态响应用户反馈并且将故障时间缩短到最小,从而来提高用户体验。我的团队设计了一套工具链用于自动化应用的维护和部署新功能。

 title=

(Accedia, CC BY-NC-SA 4.0)

  1. 首先,我们团队编写了自动化测试,可以立即识别应用程序的变更。
  2. 当新版本已经准备就绪的时候,代码将被提交到 Gitlab 中。
  3. 通过 Gitlab,提交会自动触发 Jenkins 构建。
  4. 持续集成中,新的代码版本通过 ChaiMocha 进行了测试,以检测是否运行正常。
  5. 当测试通过,持续部署阶段 将会开始并创建一个可用的 Docker 镜像并上传到 Sonatype 的 Nexus。(这是 Sonatype 公司的的一个开源工具)
  6. 最后,新版本应用会通过 Nexus 下载并且部署到线上环境中,例如 Docker 容器 (持续部署阶段

简而言之,每当有人在仓库中创建一个新的提交,又或者团队上传新的代码版本、功能、升级、缺陷修复等,应用程序包都会自动更新并且交付给客户。

这套系统拥有良好的事故控制能力以保证快速部署,但不以牺牲质量为代价。它对于用户的反馈是动态的,意味着新功能和旧功能的和更新只需要之前一半的时间,同时将故障时间降低到最低。

把它封装起来

一套完整并且正确实施的 DevOps 工具链可以从始至终推动你的创新计划并且加速部署。

根据你的需求,你的工具链可能看起来和这些不一样,但是我希望我们的工作流能够让你了解如何将自动化作为一种解决方案。


via: https://opensource.com/article/21/1/devops-tool-chain

作者:Tereza Denkova 选题:lujun9972 译者:AnyISalIn 校对:wxy

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

一项新研究发现,人为失误是引发停机时间的首要原因。你想象一下那是什么场景。

之前有一个很老的笑话:“是人都会犯错,但是要真正把事情搞砸,你还缺台计算机。” 现在情况正好相反了,现如今,数据中心设备的可靠性已经得到了极大的提升,反而是使用设备的人员素质没能跟上,从而给计算机正常运行带来了很大的威胁。

正常运行时间协会 Uptime Institute 对数千名 IT 专业人员一整年发生的故障事件进行了调查,得出结论表示绝大多数的数据中心故障是由于人为错误造成的,人为错误导致的故障率为 70%-75%。

而且有些故障很严重。调查发现,超过 30% 的 IT 服务与数据中心运营商经历了他们称之为是“严重服务退化”的停机事故。2019 年有 10% 的受访者称他们最近的事故造成的损失超过 100 万美元。

在正常运行时间协会在 2019 年 4 月的调查中,60% 的受访者认为,对于最近发生的重大停机事件,他们本可以通过更好的管理/流程或配置进行防止。而对于损失超过 100 万美元的故障事件,这一数字跃升至 74%。

正常运行时间协会认为,导致故障事件发生的最终的错误不一定是员工,而是令人失望的管理。

“这个行业仍然严重依赖于人工去完成一些最基础和最重要的工作,易受人为错误的影响,这一点无法避免,也许可做的防错/防灾措施很有限。”正常运行时间协会期刊的主编 Kevin Heslin 在一篇博客文章中写道。

“然而,对这些故障问题的快速调查发现,故障持续存在的主要原因不是人为失误,而是由于管理失误导致,如针对员工培训投资不足,相关政策执行不力,管理程序老旧,低估一名合格员工的重要性,这一系列的管理问题导致了故障停机。” Heslin 继续写道。

正常运行时间协会指出,公司的 IT 基础设施越复杂,特别是分布式特性基础设施,可能会越容易增加简单的错误层出不穷而导致业务中断的风险。同时指出公司需要意识到基础设施越复杂所涉及的风险就越大。

并警告说,在人员配备方面,不要以超过公司吸引和应用资源来管理基础设施的速度扩大关键 IT 能力,并在影响关键任务操作之前意识到任何人员和技能短缺。


via: https://www.networkworld.com/article/3444762/the-biggest-risk-to-uptime-your-staff.html

作者:Andy Patrizio 选题:lujun9972 译者:sthwhl 校对:wxy

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

电子邮件不是即时通讯。通过遵循这些规则来防止电子邮件不断地打断你的工作。

 title=

在前几年,这个年度系列涵盖了单个应用程序。今年,我们除了关注有助于 2021 年的策略外,还将关注一体化解决方案。欢迎来到“2021 年 21 天生产力”的第二天。

和许多人一样,我对电子邮件也是爱恨交加。电子邮件是早期互联网、企业局域网和拨号 BBS 生态系统中最早的通信手段之一。电子邮件过去是、现在仍然是电子通信的主要手段之一。它被用于商业通信、商务、通知、协作和一堆有用的东西。

 title=

Mutt 邮件客户端, CC BY-SA 4.0 by Kevin Sonney

很多人对电子邮件有着不正确的认识。电子邮件不是一个即时通讯平台。有时候,当一个人发送一条信息,几乎立刻就会出现在世界的另一端,然后在几分钟内就会有回应,这看起来就像是电子邮件是即时通讯。正因为如此,我们可能会陷入一种思维定势,即我们需要随时激活电子邮件程序,一旦有东西进来,我们需要马上看一下,然后马上回复。

电子邮件的设计原则是:一个人发送一条信息,收件人会在方便的时候回复。是的,有高优先级和紧急邮件的标志,我们的电子邮件程序也有通知来告诉我们新邮件何时到达,但它们真的不是为了给今天的许多人造成压力。

 title=

太!多!电子邮件了! CC BY-SA 4.0 by Kevin Sonney

一般说来,一个人每受到一次干扰,至少需要 15 分钟的时间让他们的思维过程重新集中到被打断的任务上。在工作场所(以及在家里!),电子邮件成为了这些中断之一已经是一种普遍现象。它不需要这样,也不是设计成这样的。我采用了一些规则来防止电子邮件成为让我无法完成任务的干扰。

规则 1:电子邮件不是一个警报平台。在技术领域,人们通常会配置监控和警报平台,将所有的通知发送到电子邮件。在过去的 15 年里,我几乎在每一个工作场所都遇到过这种情况,我会先花了几个月的时间来改变它。有很多好的平台和服务来管理警报。电子邮件不是其中之一。

规则 2:至少不要指望在 24 小时内得到答复。我们有多少人接到过电话,问我们是否收到电子邮件,并问我们是否有任何问题?我就遇到过。尽量在工作场所或与你经常发邮件的人设定一个期望值,回复有时会很快,有时不会。如果事情真的很紧急,他们应该使用其他的沟通方式。

规则 3:每隔几个小时检查一次电子邮件,而不是不断地检查。我承认这一条很难,但它能给我带来最安心的感觉。当我在工作或试图专注于写作等事情时,我会关闭我的电子邮件程序(或浏览器标签),并忽略它,直到我完成。没有通知,没有 20 条新邮件正在等待的指示,没有干扰。当我开始这样做的时候,我花了一些努力来克服我的 FOMO(害怕错过),但随着时间的推移,这已经变得容易了。我发现,当我再次打开我的电子邮件时,我可以专注于它,而不是担心我可以做什么,或应该做什么来代替。

希望这三条规则能像帮助我一样帮助你。在接下来的日子里,我会有更多可以帮助我处理电子邮件的方法分享给你。


via: https://opensource.com/article/21/1/email-rules

作者:Kevin Sonney 选题:lujun9972 译者:wxy 校对:wxy

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

软件如果不能被电脑运行,那么它就是无用的。而在处理 运行时 run-time 性能的问题上,即使是最有才华的开发人员也会受编译器的支配 —— 因为如果没有可靠的编译器工具链,就无法构建任何重要的东西。 GNU 编译器集合 GNU Compiler Collection (GCC)提供了一个健壮、成熟和高性能的工具,以帮助你充分发挥你代码的潜能。经过数十年成千上万人的开发,GCC 成为了世界上最受尊敬的编译器之一。如果你在构建应用程序是没有使用 GCC,那么你可能错过了最佳解决方案。

根据 LLVM.org 的说法,GCC 是“如今事实上的标准开源编译器” [1] ,也是用来构建完整系统的基础 —— 从内核开始。GCC 支持超过 60 种硬件平台,包括 ARM、Intel、AMD、IBM POWER、SPARC、HP PA-RISC 和 IBM Z,以及各种操作环境,包括 GNU、Linux、Windows、macOS、FreeBSD、NetBSD、OpenBSD、DragonFly BSD、Solaris、AIX、HP-UX 和 RTEMS。它提供了高度兼容的 C/C++ 编译器,并支持流行的 C 库,如 GNU C Library(glibc)、Newlib、musl 和各种 BSD 操作系统中包含的 C 库,以及 Fortran、Ada 和 GO 语言的前端。GCC 还可以作为一个交叉编译器,可以为运行编译器的平台以外的其他平台创建可执行代码。GCC 是紧密集成的 GNU 工具链的核心组件,由 GNU 项目产生,它包括 glibc、Binutils 和 GNU 调试器(GDB)。

“一直以来我最喜欢的 GNU 工具是 GCC,即 GNU 编译器集合 GNU Compiler Collection 。在开发工具非常昂贵的时候,GCC 是第二个 GNU 工具,也是使社区能够编写和构建所有其他工具的工具。这个工具一手改变了这个行业,导致了自由软件运动的诞生,因为一个好的、自由的编译器是一个社区软件的先决条件。”—— Red Hat 开源和标准团队的 Dave Neary。 [2]

优化 Linux

作为 Linux 内核源代码的默认编译器,GCC 提供了可靠、稳定的性能以及正确构建内核所需的额外扩展。GCC 是流行的 Linux 发行版的标准组件,如 ArchLinux、CentOS、Debian、Fedora、openSUSE 和 Ubuntu 这些发行版中,GCC 通常用来编译支持系统的组件。这包括 Linux 使用的默认库(如 libc、libm、libintl、libssh、libssl、libcrypto、libexpat、libpthread 和 ncurses),这些库依赖于 GCC 来提供可靠性和高性能,并且使应用程序和系统程序可以访问 Linux 内核功能。发行版中包含的许多应用程序包也是用 GCC 构建的,例如 Python、Perl、Ruby、nginx、Apache HTTP 服务器、OpenStack、Docker 和 OpenShift。各个 Linux 发行版使用 GCC 构建的大量代码组成了内核、库和应用程序软件。对于 openSUSE 发行版,几乎 100% 的原生代码都是由 GCC 构建的,包括 6135 个源程序包、5705 个共享库和 38927 个可执行文件。这相当于每周编译 24540 个源代码包。 [3]

Linux 发行版中包含的 GCC 的基本版本用于创建定义系统 应用程序二进制接口 Application Binary Interface (ABI)的内核和库。 用户空间 User space 开发者可以选择下载 GCC 的最新稳定版本,以获得高级功能、性能优化和可用性改进。Linux 发行版提供安装说明或预构建的工具链,用于部署最新版本的 GCC 以及其他 GNU 工具,这些工具有助于提高开发人员的工作效率和缩短部署时间。

优化互联网

GCC 是嵌入式系统中被广泛采用的核心编译器之一,支持为日益增长的物联网设备开发软件。GCC 提供了许多扩展功能,使其非常适合嵌入式系统软件开发,包括使用编译器的内建函数、#语法、内联汇编和以应用程序为中心的命令行选项进行精细控制。GCC 支持广泛的嵌入式体系结构,包括 ARM、AMCC、AVR、Blackfin、MIPS、RISC-V、Renesas Electronics V850、NXP 和 Freescale Power 处理器,可以生成高效、高质量的代码。GCC提供的交叉编译能力对这个社区至关重要,而预制的交叉编译工具链 [4] 是一个主要需求。例如,GNU ARM 嵌入式工具链是经过集成和验证的软件包,其中包含 ARM 嵌入式 GCC 编译器、库和其它裸机软件开发所需的工具。这些工具链可用于在 Windows、Linux 和 macOS 主机操作系统上对流行的 ARM Cortex-R 和 Cortex-M 处理器进行交叉编译,这些处理器已装载于数百亿台支持互联网的设备中。 [5]

GCC 为云计算赋能,为需要直接管理计算资源的软件提供了可靠的开发平台,如数据库和 Web 服务引擎以及备份和安全软件。GCC 完全兼容 C++ 11 和 C++ 14,为 C++ 17 和 C++ 2a 提供实验支持 [6] (LCTT 译注:本文原文发布于 2018 年),可以创建性能优异的对象代码,并提供可靠的调试信息。使用 GCC 的应用程序的一些例子包括:MySQL 数据库管理系统,它需要 Linux 的 GCC [7] ;Apache HTTP 服务器,它建议使用 GCC [8] ;Bacula,一个企业级网络备份工具,它需要 GCC。 [9]

优化一切

对于 高性能计算 High Performance Computing (HPC)中使用的科学代码的研究和开发,GCC 提供了成熟的 C、C++ 和 Fortran 前端,以及对 OpenMP 和 OpenACC API的支持,用于基于指令的并行编程。因为 GCC 提供了跨计算环境的可移植性,它使得代码能够更容易地在各种新的和传统的客户机和服务器平台上进行测试。GCC 为 C、C++ 和 Fortran 编译器提供了 OpenMP 4.0 的完整支持,为 C 和 C++ 编译器提供了 OpenMP 4.5 完整支持。对于 OpenACC、 GCC 支持大部分 2.5 规范和性能优化,并且是唯一提供 OpenACC 支持的非商业、非学术编译器。

代码性能是这个社区的一个重要参数,GCC 提供了一个坚实的性能基础。Colfax Research 于 2017 年 11 月发表的一篇论文评估了 C++ 编译器在使用 OpenMP 4.x 指令并行化编译代码的速度和编译后代码的运行速度。图 1 描绘了不同编译器编译并使用单个线程运行时计算内核的相对性能。性能值经过了归一化处理,以 G++ 的性能为 1.0。

 title=

图 1 为由不同编译器编译的每个内核的相对性能。(单线程,越高越好)。

他的论文总结道:“GNU 编译器在我们的测试中也做得很好。G++ 在六种情况中的三种情况下生成的代码速度是第二快的,并且在编译时间方面是最快的编译器之一。” [10]

谁在用 GCC?

在 JetBrains 2018 年的开发者生态状况调查中,在接受调查的 6000 名开发者中,66% 的 C++ 程序员和 73% 的 C 程序员经常使用 GCC。 [11] 以下简要介绍 GCC 的优点,正是这些优点使它在开发人员社区中如此受欢迎。

  • 对于需要为各种新的和遗留的计算平台和操作环境编写代码的开发人员,GCC 提供了对最广泛的硬件和操作环境的支持。硬件供应商提供的编译器主要侧重于对其产品的支持,而其他开源编译器在所支持的硬件和操作系统方面则受到很大限制。 [12]
  • 有各种各样的基于 GCC 的预构建工具链,这对嵌入式系统开发人员特别有吸引力。这包括 GNU ARM 嵌入式工具链和 Bootlin 网站上提供的 138 个预编译交叉编译器工具链。 [13] 虽然其他开源编译器(如 Clang/LLVM)可以取代现有交叉编译工具链中的 GCC,但这些工具集需要开发者完全重新构建。 [14]
  • GCC 通过成熟的编译器平台向应用程序开发人员提供可靠、稳定的性能。《在 AMD EPYC 平台上用 GCC 8/9 与 LLVM Clang 6/7 编译器基准测试》这篇文章提供了 49 个基准测试的结果,这些测试的编译器在三个优化级别上运行。使用 -O3 -march=native 级别的 GCC 8.2 RC1 在 34% 的时间里排在第一位,而在相同的优化级别 LLVM Clang 6.0 在 20% 的时间里赢得了第二位。 [15]
  • GCC 为编译调试 [16] 提供了改进的诊断方法,并为运行时调试提供了准确而有用的信息。GCC 与 GDB 紧密集成,GDB 是一个成熟且功能齐全的工具,它提供“不间断”调试,可以在断点处停止单个线程。
  • GCC 是一个得到良好支持的平台,它有一个活跃的、有责任感的社区,支持当前版本和以前的两个版本。由于每年都有发布计划,这为一个版本提供了两年的支持。

GCC:仍然在继续优化

GCC 作为一个世界级的编译器继续向前发展。GCC 的最新版本是 8.2,于 2018 年 7 月发布(LCTT 译注:本文原文发表于 2018 年),增加了对即将推出的 Intel CPU、更多 ARM CPU 的硬件支持,并提高了 AMD 的 ZEN CPU 的性能。增加了对 C17 的初步支持,同时也对 C++2A 进行了初步工作。诊断功能继续得到增强,包括更好的发射诊断,改进了定位、定位范围和修复提示,特别是在 C++ 前端。Red Hat 的 David Malcolm 在 2018 年 3 月撰写的博客概述了 GCC 8 中的可用性改进。 [17]

新的硬件平台继续依赖 GCC 工具链进行软件开发,例如 RISC-V,这是一种自由开放的 ISA,机器学习、人工智能(AI)和物联网细分市场都对其感兴趣。GCC 仍然是 Linux 系统持续开发的关键组件。针对 Intel 架构的 Clear Linux 项目是一个为云、客户端和物联网用例构建的新兴发行版,它提供了一个很好的示例,说明如何使用和改进 GCC 编译器技术来提高基于 Linux 的系统的性能和安全性。GCC 还被用于微软 Azure Sphere 的应用程序开发,这是一个基于 Linux 的物联网应用程序操作系统,最初支持基于 ARM 的联发科 MT3620 处理器。在培养下一代程序员方面,GCC 也是树莓派的 Windows 工具链的核心组件,树莓派是一种运行基于 Debian 的 GNU/Linux 的低成本嵌入式板,用于促进学校和发展中国家的基础计算机科学教学。

GCC 由 GNU 项目的创始人 理查德•斯托曼 Richard Stallman 首次发布 于 1987 年 3 月 22 日,由于它是第一个作为自由软件发布的可移植的 ANSI C 优化编译器,因此它被认为是一个重大突破。GCC 由来自世界各地的程序员组成的社区在指导委员会的指导下维护,以确保对项目进行广泛的、有代表性的监督。GCC 的社区方法是它的优势之一,它形成了一个由开发人员和用户组成的庞大而多样化的社区,他们为项目做出了贡献并提供支持。根据 Open Hub 的说法,“GCC 是世界上最大的开源团队之一,在 Open Hub 上的所有项目团队中排名前 2%。” [18]

关于 GCC 的许可问题,人们进行了大量的讨论,其中大多数是混淆而不是启发。GCC 在 GNU 通用公共许可证(GPL)版本 3 或更高版本下发布,但运行时库例外。这是一个左版许可,这意味着衍生作品只能在相同的许可条款下分发。GPLv3 旨在保护 GCC,防止其成为专有软件,并要求对 GCC 代码的更改可以自由公开地进行。对于“最终用户”来说,这个编译器与其他编译器完全相同;使用 GCC 对你为自己的代码所选择的任何许可都没有区别。 [19]


  1. http://clang.llvm.org/features.html#gcccompat ↩︎
  2. https://opensource.com/article/18/9/happy-birthday-gnu ↩︎
  3. 由 SUSE 基于最近的构建统计提供的信息。在 openSUSE 中还有其他不生成可执行镜像的源码包,这些不包括在统计中。 ↩︎
  4. https://community.arm.com/tools/b/blog/posts/gnu-toolchain-performance-in-2018 ↩︎
  5. https://www.arm.com/products/processors/cortex-m ↩︎
  6. https://gcc.gnu.org/projects/cxx-status.html#cxx17 ↩︎
  7. https://mysqlserverteam.com/mysql-8-0-source-code-improvements/ ↩︎
  8. http://httpd.apache.org/docs/2.4/install.html ↩︎
  9. https://blog.bacula.org/what-is-bacula/system-requirements/ ↩︎
  10. https://colfaxresearch.com/compiler-comparison/ ↩︎
  11. https://www.jetbrains.com/research/devecosystem-2018/ ↩︎
  12. http://releases.llvm.org/6.0.0/tools/clang/docs/UsersManual.html ↩︎
  13. https://bootlin.com/blog/free-and-ready-to-use-cross-compilation-toolchains/ ↩︎
  14. https://clang.llvm.org/docs/Toolchain.html ↩︎
  15. https://www.phoronix.com/scan.php?page=article&item=gcclang-epyc-summer18&num=1 ↩︎
  16. https://gcc.gnu.org/wiki/ClangDiagnosticsComparison ↩︎
  17. https://developers.redhat.com/blog/2018/03/15/gcc-8-usability-improvements/ ↩︎
  18. https://www.openhub.net/p/gcc/factoids#FactoidTeamSizeVeryLarge ↩︎
  19. https://www.gnu.org/licenses/gcc-exception-3.1-faq.en.html ↩︎

via: https://www.linux.com/blog/2018/10/gcc-optimizing-linux-internet-and-everything

作者:Margaret Lewis 选题:lujun9972 译者:Chao-zhi 校对:wxy

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

代码英雄讲述了开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。

什么是《代码英雄》

代码英雄 Command Line Heroes 是世界领先的企业开源软件解决方案供应商红帽(Red Hat)精心制作的原创音频播客,讲述开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。该音频博客邀请到了谷歌、NASA 等重量级企业的众多技术大牛共同讲述开源、操作系统、容器、DevOps、混合云等发展过程中的动人故事。

本文是《代码英雄》系列播客《代码英雄》第三季(7):与机器对话音频脚本。

导读:创造一台会思考的机器在 20 世纪 50 年代似乎是科幻小说。但 John McCarthy 决定把它变成现实。他从一种叫做 LISP 的语言开始。Colin Garvey 介绍了 McCarthy 是如何创造出第一种人工智能语言的。Sam Williams 介绍了早期人们对思考机器的兴趣是如何从学术界蔓延到商业界的,以及在某些项目没有兑现承诺之后,漫长的人工智能寒冬是如何最终到来的。Ulrich Drepper 解释说,人工智能的梦想超出了当时硬件所能提供的范围。

但硬件每天都在变得更强大。Chris Nicholson 指出,今天的机器有足够的处理能力来处理人工智能的资源需求 —— 以至于我们正处于人工智能研发的革命性复苏之中。最后,Rachel Thomas 确定了 LISP 之外的人工智能语言 —— 证明了人工智能现在正准备做的不同类型的任务。

00:00:05 - 播音员

卡斯帕罗夫非常慌乱。虽然已经拼尽全力,但是他意识到,他已经输了。

00:00:12 - Saron Yitbarek

1997 年的春天,国际象棋冠军 加里·卡斯帕罗夫 Garry Kasparov 输给了计算机程序“深蓝”。对于机器智能来说,这是历史上的关键时刻。对于某些人来说,这是一次生存危机,是对人类智慧至上的挑战。但是,对于世界上的技术专家来说,这是另一种意味上的里程碑,是 人工智能 artificial intelligence (AI)领域的一次飞跃。这表明,想要真正的智慧机器诞生,或许不是太过于疯狂的梦想。

00:00:47 - 播音员

去赋予一台机器思考的能力仍然还是梦想,距离实现梦想还需要很多年的努力。此外,还需要做出不少惊人的突破。

00:00:56 - Saron Yitbarek

我们是如何抵达这一步的?是什么导致了卡斯帕罗夫那场著名的失败?我们从哪里来,又该到哪里去?我是 Saron Yitbarek,这里是《代码英雄》,一档来自红帽的原创播客节目。在本季,我们都在探索编程语言的奥秘,揭开他们的历史和发展潜力。这一期让我们关注人工智能。你会使用什么语言,来让你的机器拥有自己的思想呢?我们的编程语言如何帮助我们抵达“深蓝时刻”,甚至是更远的地方?什么样的编程语言能最适配会思考的机器?这是我们半个多世纪以来一直在尝试解决的问题。因此,我们的故事要追溯到 1940 年代,那时,人工智能这个词汇还没有被创造出来。

00:01:59:

回顾二战结束是如何结束的,我们有这样一种感觉,那就是技术帮助同盟国赢得了战争。人们乐观地认为,科技可以成就一切。整整一代人都相信计算机的力量。在这一代人中诞生了人工智能的教父,一位出色的数学家 —— 约翰·麦卡锡 John McCarthy ,他从根本上改变了我们与机器交谈的方式。我想知道他的思想的起源,以及范式的转变是如何发生的。我的意思是,对于初学者来说,当麦卡锡和他的同事们在想象智能机器的未来时,他们到底想象了什么?

00:02:43 - Colin Garvey

哇,这是一个好问题。

00:02:46 - Saron Yitbarek

我和 Colin Garvey 聊了聊。他是 伦斯勒理工学院 Rensselaer Polytechnic Institute 科学与技术研究系的历史学家。以下是我们的一些聊天内容:

00:02:58 - Colin Garvey

麦卡锡对提出 AI 究竟是什么这件事情非常谨慎。不过,举个例子来说,他可能在他最著名但并未实现的程序中描述过(这只是一个思路),人工智能是一个 接受建议者 advice taker 。接受建议者这个说法由麦卡锡于 1960 年的名为《 具有常识的程序 Programs with Common Sense 》的论文中提出的。在开始的时候,你觉得接受建议者可能是一个会学习的机器人,这是它被发明的本意,它算是一个可以接受建议的家用机器人。你说:“不,你这样做是错误的,要那样做。”它就会明白你的意思。

00:03:44 - Saron Yitbarek

那很有帮助。

00:03:45 - Colin Garvey

可能会有帮助。那时候接受建议者要实现的目标是,从办公室导航到机场。换句话说,将从办公室去机场这个建议,正式化成接受建议者机器人能够接受的程序以达成目的,得出从办公室前往机场的一系列程序。它把人类的语言正式化为一系列的合乎逻辑的陈述,即需要根据现在的情况进行合适的抉择,以达到把当前情况转变为理想情况的目标。他将这些想法伪代码化,这实际上是 LISP 的起源。然后在接下来的几年里,LISP 作为他想法的实现,或者说实现他想法的语言出现了。

00:04:39 - Saron Yitbarek

麦卡锡的 LISP 语言改变了游戏规则。它不仅能帮助机器理解命令,还能帮助机器理解一些常识性的逻辑。麦卡锡发现,他可以编写条件表达式,即体现规则的代码,而不是仅仅是直白的命令。实际上,LISP 有一堆重大的编程突破,条件表达式、垃圾回收、递归等等。LISP 在代码和数据中都使用了列表。这是一个简单但具有深远的影响的更改。这是语言范式的转变,所有这些为麦卡锡本人称之为“人工智能”的整个领域打开了大门。想象一下,在你和机器说话的时候,并不需要把每一个细节都给编写好。你可以让那台机器自己来进行推断和推理。麦卡锡希望通过他的 LISP 语言,给机器一种智慧。好了,回到我和 Colin Garvey 的聊天。

00:05:41 - Colin Garvey

LISP 是人们编写高级计算机语言的尝试的过程中,诞生的精华。

00:05:47 - Saron Yitbarek

这很有意思。因为我的下一个问题是 LISP 和人工智能之间的关系。接受建议者第一次描述了 AI 的功能,它听起来也像是 LISP 的开始。能跟我聊聊更多 LISP 和人工智能之间的关系吗?

00:06:04 - Colin Garvey

当然。这些早期的人工智能研究人员面临着一件事,那就是他们还在使用打孔卡进行编程。也许这些早期的编程人员,知道如何进行机器码级别的编程,这是非常困难且耗时的工作。因此,你需要一个更高级的编程语言,以便你可以用更加接近人类语言的方式编程。所以,像 LISP 这样,用列表的形式给出指令的语言 —— 这也是其名称的来源,基于列表的处理(LCTT 译注,LISP 全称:“LISt Processing“)。从某种意义上来说,这样用列表给出的指令更加接近于人类语言,因为他们基本上都可以用通顺的逻辑去理解。因此,如果你可以读懂 形式逻辑 formal logic ,那么基本上可以看明白 LISP 程序,或者任何基于逻辑的编程语言的程序,并对于代码中发生的事情有着更好的了解。

00:07:10 - Saron Yitbarek

所以 LISP 真的帮了大忙……嗯,我的意思是它帮助我们将我们的想法给予人工智能,让我们能够朝着实现人工智能努力,有朝一日总能达成这个梦想。不过这也让我想知道在那个时期,“智能”到底意味着什么?所以,如果我们回到 50 年代,在那个时间点上,什么是“智能”?人们是如何定义它的?因为 LISP 最初为 IBM 704 开发的,它每次做的其实只是一件事。看起来并不是很“智能”。当时的人们是如何看待“智能”的呢?

00:07:43 - Colin Garvey

有关“智能”的定义,这自然非常有争议的。就我个人,从一个普通大众的角度而言,他们的概念是非常狭窄的。但是在当时,广泛认可的定义是:能够执行被认为有智力的举动的能力。但持这个观点的这些人实际上是数学家、逻辑学家和计算机程序员。我的意思是,说句粗俗的话,下棋的能力被认为是智力的明确标志。这一代早期的 AI 人更喜欢回避这个问题,并说,“嗯,哲学家们还没有就什么是‘智力’达成一致,但如果我们制造出一台能下棋的电脑,我想我们都同意这是‘智能’。“

00:08:40 - Saron Yitbarek

不管怎样,这是一个起点。就像婴儿的第一步。

00:08:45 - Colin Garvey

麦卡锡有一个梦想,让机器可以具有常识,并像人一样聪明。本质上来说,你可以和它们交谈。他开始创造一种程序语言来实现这个梦想。这就是 LISP。它模仿了人类思想的某些方面,尤其是逻辑思维能力,并使得利用计算机放大或扩展这些思想特征成为可能。所以从数学家的角度来看,他已经在实现智能机械的道路上走得很远了。

00:09:32 - Saron Yitbarek

Colin Garvey 是伦斯勒理工学院科学技术研究系的历史学家。

随着 LISP 的推进,发展人工智能的新机会开始出现,LISP 是这一新领域的标准语言。麦卡锡离开麻省理工学院去斯坦福大学工作后,麻省理工学院的其他工程师继续从事 LISP 工作。他们把麦卡锡的语言改进成一种叫做 Maclisp 的方言版本,甚至开发了 LISP 操作系统。看起来麦卡锡对人工智能未来的梦想正在成为现实。1968 年,麦卡锡甚至和苏格兰国际象棋大师 大卫·利维 David Levy 打赌。麦卡锡打赌,10 年后,电脑将能够在国际象棋比赛中赢过利维。但是,如果事情进展得那么顺利,那就不是《代码英雄》的故事了。那时候麦卡锡还不知道,人工智能的冬天就要来了。

00:10:45 - Saron Yitbarek

当麻省理工学院的那个基于 LISP 的操作系统,从学院衍生到公司后,情况开始发生变化。其中的一家公司 Symbolix 推出了 LISP 机器,甚至从 MIT 的 AI 实验室 AI Lab 雇用了 14 名员工,而且更不切实际的研究不再是重点。

00:11:25 - Sam Williams

这些公司原本都来自 AI 实验室。

00:11:31 - Saron Yitbarek

这是记者 Sam Williams,他写了一本名为《Arguing AI》的书。

00:11:36 - Sam Williams

Symbolix 可能是最突出的一个。它得到了最多的关注、最多的风险投资。约翰·麦卡锡和他的门徒们推动了所有的创新。我想,这只是一个案例。在 70 年代末期,人们普遍认为:“好吧,我们已经在学术界做了我们能够做到的事情,让我们在商界脱颖而出,让私营企业为我们投资。”

00:12:01 - Saron Yitbarek

这在当时的环境下可以理解。那时AI 似乎即将起飞,有利可图。

00:12:07 - Sam Williams

那时候的算力便宜到中型企业也可以购买。因此,我认为许多公司看到了一个机会:“那里有一个富有潜力的市场,我们可以进入这个市场,我们可以把关于人工智能的产出卖给那些想要具有全球竞争力的企业。”他们让投资者为这个想法大肆投资。在 80 年代初期,大量的资金涌入该领域。

00:12:29 - Saron Yitbarek

我们可以讨论一下为什么这个热潮后来干涸了。但是,我现在可以肯定的一点是,事情已经被大肆炒作了。

00:12:39 - Sam Williams

大量资金流入。人们认为市场非常成熟。

00:12:44 - Saron Yitbarek

从一定来说,大量热钱涌入人工智能领域造成的繁荣,就像世纪之交时网络泡沫的前奏。

00:12:52 - Sam Williams

这在技术发展史上并不少见,人们过度投资,但最终公司未能兑现他们的希望。所以,资金供应陷入困境。公司必须通过老式的方式赚钱 —— 去拉客户,去生产东西。

00:13:08 - Saron Yitbarek

所以那时,麦卡锡的梦想轰然崩溃,回归了现实。Williams 描述了随后的人工智能冬天。

00:13:16 - Sam Williams

你会看到像 Symbolix 这样的公司市值上升到 1 亿美元,然后短短几年后就申请破产保护。在那时候有很多这样的人:“在 10 年内,我们将做到这一点,在 5 年内,你会看到这个。5 年后,你就会看到这个。”这些家伙是投机者,或者是想要从五角大楼或任何其他地方获取更多资金的学者。因为这种危险的炒作,过度炒作,让人工智能走上歧途。

00:13:48 - Saron Yitbarek

人们对于人工智能的兴趣崩塌了。基础设施不到位,或许计算速度也不够高,这使一切努力都变成了徒然。但无论如何,这之中的指导思想是正确的,它只是生在了错误的时代。到了 80 年代末,人工智能研究日渐减少。

00:14:06 - Sam Williams

我认为人们脱离人工智能这个领域的原因是,它失去了最初吸引他们进入其中时的冒险性。它曾处于技术领域的最前沿。在西海岸,很多人的精力被吸引到制造个人电脑上。从 40 年后的今天看来,试着让电脑进入美国每个家庭,比帮助财富 1000 强的企业做出更好的决策,是一个更引人注目的概念。

00:14:39 - Saron Yitbarek

Sam Williams 是《Arguing AI》的作者。我们在这里描述的是一个计算机编程的世界,它被一分为二:一方面是约翰·麦卡锡这样的人,他们试图使用 LISP 等新型语言来探究智能的本质;另一方面,也不可避免地存在着另一群人,他们更专注于解决实际问题,试图让那些愿意为其服务付款的企业轻松一些。现实情况是,世界上的那些约翰·麦卡锡们,那些抽象的梦想家们,并没有太多机会在人工智能的可能性上进行深入探索。他们所拥有的设备甚至还比不上我们今天使用的手机。他们的愿景对于手头的硬件现实来说,真的太大了。

00:15:36 - Ulrich Drepper

当初,我们在轰轰作响的庞大计算机上工作,和数不清的人、数不清的工作组抢夺它有限的性能。

00:15:46 - Saron Yitbarek

这是红帽的杰出工程师 Ulrich Drepper。他解释了早期的人工智能梦想之所以失败,只是因为没有成功所需的基本工具。

00:15:55 - Ulrich Drepper

我们有 PDP 10,PDP 11 之类的计算机(LCTT 译注:Digital Equipment Corporation 公司的大型计算机产品),但每一台都可能有另外 20 个人在同时使用。即使没有这些人将计算力分流走,它们也是真正的低能力机器,其性能不足以在支持 LISP 系统的必要功能的同时,运行一套机能齐全的用户界面。

00:16:19 - Saron Yitbarek

随着时间的推移,新开发的硬件对 LISP 也不再友好。

00:16:26 - Ulrich Drepper

我们不仅走了台式机的道路,也走了服务器的道路。在我们今天已经习惯的处理器类型中,我们的实现的一切都是基于 8 位的处理器,而我们可能有了 16 位处理器、32 位处理器之类的。想要在这样的机器上高效实现 LISP 系统,就必须绕不少圈才能成功。

00:16:56 - Saron Yitbarek

因此,计算世界的外部现实对这个脆弱的人工智能领域产生了意想不到的抑制作用。

00:17:06 - Ulrich Drepper

和大厂商生产的 CPU 相比,定制硬件的成本极为高昂,其发展也极为缓慢。

00:17:21 - Saron Yitbarek

通过创建自定义的硬件解决方案,继续使用 LISP 朝着 AI 梦想前进并非不可能。但是,事实是,令人兴奋的新硬件将很多人的注意力推向了其他工作领域。

00:17:35 - Ulrich Drepper

你只需要等待处理器的下一个版本,那个普通的处理器获得的改进,比你自己开发硬件求解,比如说实现一个 LISP 系统,所能达到的效果和收获要大得多。最终,硬件变得越来越复杂,自行定制硬件成为了一件近乎于不可能的事。

00:18:03 - Saron Yitbarek

那么,约翰·麦卡锡的远景梦想是慢慢死去,还是只在那漫长的人工智能冬天里沉睡,等待时机?在 21 世纪的第一个十年里,约翰·麦卡锡的语言 LISP 的使用者不断地流失。但是,在同一时间,发生了一件惊人的事。尽管 LISP 本身逐渐消逝,与这门语言相连的梦想却被重新点燃了。人工智能的梦想重新活了起来。

00:18:34 - Chris Nicholson

我想说的是,这次不一样。

00:18:36 - Saron Yitbarek

这是 Chris Nicholson,开源 AI 软件公司 Skymind 的创始人兼 CEO。Chris 认为,在经历了大起大落之后,人工智能或许终于要进入一个可持续发展的长夏了。

00:18:52 - Chris Nicholson

我们正处在人工智能的夏天,许多人都对 AI 可能的应用而激动不已。但是,这种兴奋是基于研究的真正进展,而这些进展是基于其他领域的进展。我们的硬件比当初好了太多太多,人们能用 GPU 替代 CPU,也能在大规模集群中使用这些 GPU 来训练巨大的机器学习模型,从而产生真正准确的预测。为了做到这一点,他们也使用了前所未有的巨大数据集,这样的数据量在 80 年代、90 年代或者之前都是闻所未闻、见所未见的。

00:19:30 - Saron Yitbarek

对于 AI 语言,巨大的数据集的兴起是关键,因为它们代表了我们理解智能的方式的关键变化。AI 研究的重点转移到了 深度学习 deep learning 方面,而深度学习似乎成为了 AI 研究的全部。

00:19:47 - Chris Nicholson

LISP 是为了操纵符号而设计的。在 LISP 诞生的时代,AI 意味着符号推理。当时,人们认为人类的思维和智力本身就是符号的操作。现代的人工智能,也就是让我们如此着迷的人工智能,远不止于此。现在的 AI,就机器学习而言,是一种可以从非结构化数据中学习的大型数据处理机器。因此,你可以让机器学习算法一点一滴地拾起文本和图像,在这个过程中,随着时间的推移,这些算法将变得越来越智能。LISP 不是那样设计的。它被设计为仅在人工干预的基础上发展。然而,对于现在的机器学习算法而言,其中的学习部分意味着它们会根据所接触的数据进行自我调整。

00:20:40 - Saron Yitbarek

这就是让机器以它们自己的方式实现智能化。但是,你知道,不仅仅是我们的机器在学习以强大的新方式思考;开源工具也让人们提高了自己的水平。克里斯认为,开源的开发方式对防止另一个人工智能冬天的到来有很大的帮助。

00:21:03 - Chris Nicholson

人工智能冬天发生的一个原因是,当创意在放缓时,网络就会崩溃,资金就会枯竭。有了现在这些免费的开源工具,我们看到的不是创意的放缓,而是一种加速。创意得以被及时地测试,得以被迅速地分享。所以,这不仅仅是工具,而是预先训练好的机器学习模型,一个研究小组可以与另一个研究小组分享,或者与广大公众分享。而创意本身也被发表在 ARXIV 这样的平台上。ARXIV 是由 康奈尔大学 Cornell University 主办的。所有这些因素汇合在一起,加快了创意流动的速度。对我来说,这是对人工智能冬天的一种保险。这些因素的交汇使得人工智能成为一个超级令人兴奋的领域,它们意味着人工智能的发展速度比炒作更快。

00:22:03 - Saron Yitbarek

Chris Nicholson是 Skymind 的创始人兼 CEO。

所以,开源能将人工智能领域从旧的专有模式所催生的寒冬中解冻出来。AI 的新时代伴随着 GPU 的巨大改进而到来。与之一并到来的还有算法上的突破,它帮助我们训练 AI 学习数据中的模式。然后,数据本身,海量的数据集正在为今天的 AI 提供动力。这一点,比任何事情都重要,这就是为什么新语言得以继续 LISP 未能完成的征途。我们向 Fast AI 的联合创始人 Rachel Thomas 询问,哪些语言适合下一代 AI。

00:22:50 - Rachel Thomas

我们目前正在探索将 Swift 用于 TensorFlow 的可能性。Swift 是 Chris Lattner 开发的一种语言,我知道也有人在使用 Julia,他们正促进着 Julia 的开发与发展。但是,就目前而言,Python 在深度学习领域有着无可比拟的巨大优势。

00:23:03 - Saron Yitbarek

这是因为 Python 非常适合处理大型数据集。

00:23:08 - Rachel Thomas

我认为过去 20 年中发生的最重要的改变是,数据量的增长和人们对于数据的越发重视。我认为,数十年前有关 AI 的许多早期工作更多地围绕一种符号系统,即某种抽象符号系统。我要说的是,目前 AI 领域中的许多工作都围绕着数据展开,例如识别图像里的某样东西,或者辨认一条影评是褒还是贬。这些都是基于数据的问题。所以,我认为,Python 成为赢家 —— 至少是早期的赢家 —— 的原因之一,是因为 NumPy、SciPy 和 pandas 的生态系统,以及 Python 中所有数据处理用的库都足够完善。

00:24:02 - Saron Yitbarek

在约翰·麦卡锡的团队还在麻省理工学院工作时,人工智能事业确实只有世界级的精英学者才能参与。但是自那时以来,语言和计算环境已经发生了巨大的发展,时至今日,每个人都能参与到 AI 的领域中来。我们在本季的第 1 期中听说过,Python 是许多初学者的第一语言。它使新手程序员能够加入 AI 的世界。

00:24:29 - Rachel Thomas

我只想告诉大家,实际上你只需要一年的编码经验。你不需要诸如“鬼才”这样的名号,也不必具有真正的声望或权威。但是,我们需要来自各个背景的人。实际上,不同背景的人才能够为这个领域提供许多新鲜的创意,你的创意也是我们所需要的。

00:24:52 - Saron Yitbarek

Rachel Thomas 是 Fast AI 的联合创始人,也是旧金山大学数据研究所的教授。我喜欢她为我们提供的信息。

AI 的故事是发现截然不同的人们之间的共同语言的故事。这是我们真正的任务,为充满 AI 的世界开发语言解决方案,开发能使所有人共同努力以实现下一个突破的解决方案。

00:25:22 - 播音员 1

各位,你们看到了今天在这里创造的历史。AlphaGo 以伟大的风格赢得了比赛。

00:25:32 - 播音员 2

是的,它甚至向我们展示了它的代码。

00:25:34 - 发言者 7

甚至向我们展示了它的代码。我想要祝贺这个计划。

00:25:40 - Saron Yitbarek

2015 年,就在 加里·卡斯帕罗夫 Garry Kasparov 在国际象棋比赛中输给深蓝的几十年后,围棋世界冠军李世乭被谷歌的 AlphaGo 击败。深蓝显示出的智力威力大半依托于蛮力,而 AlphaGo 的胜利之所以让人感到惊讶,是因为它依靠神经网络和强化学习赢得了那场比赛。换句话说,AlphaGo 已经成功地朝着真正的智慧迈出了下一步。如果没有开源对人工智能的推动,这一切都不可能发生。新的语言正朝着麦卡锡的梦想而逐渐发展。我们的语言正越来越适合于最大限度地提高机器的智能。好消息是,在开源世界中,我们可以共同实现这份梦想,共同应对它所带来的挑战。

00:26:39 - Saron Yitbarek

《代码英雄》是红帽的原创播客节目。如果你希望更深入的了解 LISP 或者人工智能,你可以访问节目的网站 redhat.com/commandlineheroes。在这里,你也能看到每一集的额外内容。下一期将是本季的最终集。在下一期中,我们将对一门重量级语言进行探究,并揭露与之有关的许多惊人事实;这门语言对本季中迄今为止讨论过的几乎所有语言都产生过影响。这是我们对 C 的深入研究。我是 Saron Yitbarek,下期之前,编程不止。

什么是 LCTT SIG 和 LCTT LCRH SIG

LCTT SIG 是 LCTT 特别兴趣小组 Special Interest Group ,LCTT SIG 是针对特定领域、特定内容的翻译小组,翻译组成员将遵循 LCTT 流程和规范,参与翻译,并获得相应的奖励。LCRH SIG 是 LCTT 联合红帽(Red Hat)发起的 SIG,当前专注任务是《代码英雄》系列播客的脚本汉化,已有数十位贡献者加入。敬请每周三、周五期待经过我们精心翻译、校对和发布的译文。

欢迎加入 LCRH SIG 一同参与贡献,并领取红帽(Red Hat)和我们联合颁发的专属贡献者证书。


via: https://www.redhat.com/en/command-line-heroes/season-3/talking-to-machines

作者:Red Hat 选题:bestony 译者:bestony 校对:acyanbird, Northurland, wxy

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

昨天发的一篇新闻点评中,提及了在 Ubuntu 21.04 中准备修复一个十多年的 Bug:将用户主目录的默认的“世界可写”权限取消,并对这条新闻吐槽了一番。

不料,这条新闻引来了一些意料之外的吐槽,大家在公众号、知乎、今日头条上看到这篇内容后,纷纷表示“世界可写”是机翻,是误读,应该翻译为“ 全局 Global ”。因此,我觉得有必要就此写点文字来说明一下。

说实话,我也是第一次看到“世界可写”这个翻译(这个翻译不是我发明的),初看之下有点诧异,但是细思之下,我认为,这个翻译还是颇有意思的。

传统的 Unix 权限 traditional Unix permissions 模型将用户分为三类:

  • 属主 Owner 用户 User 类(u):文件/目录的所有者
  • 群组 Group 类(g):除所有者之外的文件/目录所属用户组的成员
  • 其他 Other 类(o):“世界”上除以上二者外的其他人

对于 chmod 命令来说,我们有时候需要给这三类人都统一赋予一些权限,这种情况下,我们采用 a 来代表“ 全部 All ”,有时也称之为“ 世界 World ”。这在各种文献中

对于“ 世界 World ”这个词汇,除看起来有点不太寻常,但是我觉得,这是一种 Unix 的古典黑客精神的幽默,可能是隐喻 Unix 机器里面就是一个世界吧,如果你连 Unix 用户都没有,那你就不是这个世界的。

Unix 世界只是 Unix 的 世界 World ,从来不是 全球 Gloabl

最后,“世界可写”万万要不得。022 赛高!