首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“安装”一种编程语言到底意味着什么?

问“安装”一种编程语言到底意味着什么?
EN

Stack Overflow用户
提问于 2020-04-06 16:09:09
回答 1查看 1.6K关注 0票数 4

我想知道“安装”一种编程语言意味着什么。

到目前为止,我的搜索得到了两个相互矛盾的答案:

  1. 您不需要安装编程语言。您安装了一个编译器/解释器,然后将包含源代码的文本文件提供给它。因此,该语言只是一种标准化的语法,您可以学到它,编译器/解释器被编程为“理解”。换句话说,语言的“源”不是安装在计算机上的某个文件/程序,而是它的“源”在语言规范、您编写的文本文件以及编译器/解释器“处理”所述文件的能力中。(例如,要使用C++,必须安装编译器,但不安装C++。或者你知道?)
  2. 然而,似乎有些语言需要安装。例如,PHP文档以一个名为"安装和配置“的部分开始。同样,对于安装Python,您必须先下载它。一旦这样做,它就会以可执行文件的形式出现在您的文件系统中。

那么安装语言到底意味着什么呢?安装中包含哪些内容?为什么有些语言似乎需要安装(PHP、Python),而其他语言则不需要安装(C++)?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-04-15 17:20:31

为什么有些语言似乎需要安装(PHP、Python),而其他语言则不需要安装(C++)?

严格的看法是这样的。

编译器只是binaries+src的一个序列,和任何其他软件包一样。以Clang、GCC或Rust为例。在您的操作系统中,下载源代码并构建它。机器代码是为您的特定处理单元架构生成的,无论是CPU、GPU还是专用硬件。

看起来像这个SRC=>BIN。然后编译器使用自己再次构建它的源代码。

SRC => BIN => SRC => BIN2

问题就来了。如果需要编译器来构建自身,那么如何在第一轮构建它呢?问题中有一个很好的部分,那就是引导。

另一个问题是,你如何决定什么时候停止?你可以用不同的角度构建你的编译器,集中在“大小”、“速度”、“编译时间”或所有这些方面。

当您根本不自己构建编译器时,编译器会更糟吗?是的,情况会更糟,但在哪方面呢?最有可能的是,它将膨胀,即有更大的规模和它的编译时间将更大。

此外,在编译器之外也有一些东西。在Linux上拥有编译器意味着它将生成ELF二进制文件,所以您需要“libelf”。它要求您首先获得特定的库,即'libatomic‘、'libgcc’、'libstdc++‘、'mpfr’、'gmp‘、'coreutils’。这些库正在创建您的“环境”,因此您可能可以从以前构建下一个编译器迭代(在本例中是GCC)。

有些语言有自己编写的编译器,比如PyPy。但是,最初的python编译器无论如何都需要有C语言来构建初始版本并拥有库环境。

软件正在老化,这意味着正在创建更新版本的库和工具,因此编译器应该定期从源代码中重建,而整个系统则由这些编译器重新构建。

因此严格地说,所有语言都需要“安装”,这意味着用户应该从源代码(Linux)构建它们,或者从已经存在的二进制(Microsoft)中提取特定CPU所需的代码。或者两者兼而有之,在某些情况下(Ubuntu和其他基于二进制的linuxes)。

上面描述的“源安装”看起来可能很复杂,但对于编译器来说,“二进制安装”实际上要复杂得多,因为您应该检查环境、检查依赖项、检查库、然后检查硬件、然后提取二进制部件、然后重新编译二进制部件(x86 vs x64),或者只是为不同的体系结构和体系结构技巧(如ELF/vs二进制兼容性、‘ELF’跳转约定等)提供相同编译器的不同版本的编号。

PS。此外,不从源代码构建编译器也会阻碍硬件开发人员,就像x86 -> x86_64体系结构转换一样。硬件开发人员正在使用他们宝贵的时间,不是为了实际改善处理器的原始功能和新功能,而是为了支持旧指令集和指令集的向后兼容性,这仅仅是因为软件开发人员更新编译器太慢了。所有这些都在软硬件开发周期系统中造成了巨大的“滞后”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61064088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档