Compilation “它真正意味着什么?”;安装";编程语言?

Compilation “它真正意味着什么?”;安装";编程语言?,compilation,installation,programming-languages,interpreted-language,compiled-language,Compilation,Installation,Programming Languages,Interpreted Language,Compiled Language,我想知道“安装”一种编程语言意味着什么 到目前为止,我的研究得出了两个相互矛盾的答案: 您没有安装编程语言。您安装了一个编译器/解释器,然后将包含源代码的文本文件提供给它。因此,该语言只是您学习的标准化语法,编译器/解释器编程为“理解”。换句话说,语言的“源”不在您机器上安装的某些文件/程序中,而是在语言规范、您编写的文本文件以及编译器/解释器“处理”所述文件的能力中。(例如,要用C++来编译,必须安装一个编译器,但是你不安装C++。或者?) 但是,似乎需要安装某些语言。例如,PHP文档以标题为

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

到目前为止,我的研究得出了两个相互矛盾的答案:

  • 您没有安装编程语言。您安装了一个编译器/解释器,然后将包含源代码的文本文件提供给它。因此,该语言只是您学习的标准化语法,编译器/解释器编程为“理解”。换句话说,语言的“源”不在您机器上安装的某些文件/程序中,而是在语言规范、您编写的文本文件以及编译器/解释器“处理”所述文件的能力中。(例如,要用C++来编译,必须安装一个编译器,但是你不安装C++。或者?)
  • 但是,似乎需要安装某些语言。例如,PHP文档以标题为“”的部分开头。同样,你必须先下载它。一旦您这样做了,它就会作为一个可执行文件显示在您的文件系统中

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

    多谢各位

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

    严格的观点是这样的

    编译器只是一个二进制文件+src的序列,与任何其他软件包一样。以叮当声、GCC声或锈迹为例。在您的操作系统中,您可以下载源代码并构建它。机器代码是为特定的处理单元体系结构生成的,无论是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和其他基于二进制的Linux)

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


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

    答案是:视情况而定。您是在尝试用一种语言编写代码,还是在运行用它编写的代码?它是编译(到更高的级别,比如JVM/CLR,还是更低的级别?)还是解释?使用Python,您正在安装解释器,但是*nix机器上已经安装了解释器。感谢您的参与。我从编写C++源代码的角度考虑这个问题,然后运行它(编译后)。我知道,运行C++需要一个编译器,我没有看到你需要安装C++。但是当我浏览Python文档时,它谈到了“安装Python”,Python有很多版本。那么,他们是在谈论解释器并简单地称之为“Python”吗?或者Python本身就是一个软件(比如字体)?