gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:29:29 26 4
gpt4 key购买 nike

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

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

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

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

    谢谢你。

    最佳答案

    And why do some languages appear to require installations (PHP, Python), while others don't (C++)?



    严格的观点是这样的。

    编译器只是一个二进制文件+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 和其他基于二进制的 linux)。

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

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

    关于compilation - "install"编程语言的真正含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61064088/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com