"install"编程语言的真正含义是什么?



我想知道"安装"编程语言意味着什么。

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

  1. 您不安装编程语言。您安装了一个编译器/解释器,然后只向它提供包含源代码的文本文件。因此,这种语言只是一种标准化的语法,你可以学习,编译器/解释器被编程为"理解"。换句话说,语言的"来源"不在机器上安装的某些文件/程序中,而是在语言规范、您编写的文本文件以及编译器/解释器"处理"所述文件的能力中。(例如,要使用C++,你必须安装编译器,但你不安装C++。或者你安装了?(

  2. 但是,似乎需要安装某些语言。例如,PHP文档以标题为"安装和配置"的部分开头。同样,要安装Python,你必须首先下载它。一旦下载,它就会以可执行文件的形式显示在你的文件系统中。

那么安装一种语言到底意味着什么呢?安装包含什么?为什么有些语言似乎需要安装(PHP、Python(,而另一些语言则不需要安装(C++(?

谢谢。

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

严格视图是这样的。

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

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

SRC=>BIN=>SRC=>BIN2

问题来了。若您需要编译器自行构建,那个么在第一轮中如何构建它?这个问题有一个巧妙的部分,引导

另一个问题是,你如何决定何时停止?您可以从不同的角度构建编译器,重点关注"大小"、"速度"、"编译时间"或所有这些。

当你根本不自己构建编译器时,它会更糟糕吗?是的,情况会更糟,但从什么方面来说?它很可能会变得臃肿,即增加了大小,编译时间也会更长。

还有编译器之外的东西。在Linux上拥有编译器意味着它将生成ELF二进制文件,所以您需要"libelf"。它要求您首先获得某些库,即"libatomic"、"libgcc"、"librstdc++"、"mpfr"、"gmp"、"coreutils"。这些库构成了您的"环境",因此您可能能够从以前的编译器迭代(在本例中为GCC(构建下一个编译器迭代。

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

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

所以严格来说,所有语言都需要"安装",这意味着用户应该从源代码(Linux(构建它们,或者从现有的二进制文件(Microsoft(中提取特定CPU所需的代码。或者两者都有,在某些情况下(Ubuntu和其他基于二进制的linux(。

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

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

最新更新