我想知道“安装”一种编程语言意味着什么。
到目前为止,我的搜索得到了两个相互矛盾的答案:
那么安装语言到底意味着什么呢?安装中包含哪些内容?为什么有些语言似乎需要安装(PHP、Python),而其他语言则不需要安装(C++)?
谢谢。
发布于 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体系结构转换一样。硬件开发人员正在使用他们宝贵的时间,不是为了实际改善处理器的原始功能和新功能,而是为了支持旧指令集和指令集的向后兼容性,这仅仅是因为软件开发人员更新编译器太慢了。所有这些都在软硬件开发周期系统中造成了巨大的“滞后”。
https://stackoverflow.com/questions/61064088
复制相似问题