热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

go语言的编译器是用什么语言写的?

go语言的编译器是用什么语言写的?相信大部分人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,话不多说,一起往下看吧。看起来像是

go语言的编译器是用什么语言写的?相信大部分人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,话不多说,一起往下看吧。

看起来像是个“鸡生蛋,蛋生鸡”的问题,实际上不是的。                             

这个问题的关键在于理解,编译器本身就是一个程序,它的功能就是把源代码翻译为计算机可执行的程序。

对于 C/C++、Go、Rust 这样的本地语言,它们编译生成后的目标程序就是目标平台的本地可执行程序。比如你用这三种语言写个 Hello World,在 Windows 平台下用编译的结果一定是一个 .exe 文件,这些 .exe 文件里面没有包含任何源语言的信息。

Windows 运行它们的时候不知道,也不需要知道这些 .exe 文件编译之前是用什么语言写的,只需要把它们加载进内存,一句一句地执行指令就行了。

编译器程序也是这个道理。

假如你发明了一种新的语言 CNifeLang,首先需要用一种现有的语言写一个 CNifeLang 的编译器,比如说就用 Golang 吧;

你用 Golang 写了一个 CNifeLang 的编译器,能成功地把任何合法的 CNifeLang 源代码编译为等价的目标程序。

接着用 CNifeLang 写一个程序,它与你用 Golang 写的编译器功能完全相同,用 Golang 实现的编译器把这个程序编译完成,你就得到了一个用 CNifeLang 实现的 CNifeLang 编译器。

因为这个程序的功能与用 Golang 写的编译器完全相同,所以你完全可以用这个编译器去编译 CNifeLang,于是 CNifeLang 实现了 自举。

如果题主学习了编译原理这门课,就会发现编译与编程语言是没有关系的,它有一套完整而成熟的操作方法,你完全可以用任何一种图灵完备的语言去写任何一种形式语言的编译器,而且有严格的数学方法证明你写的编译器是正确的。

我们常见的编程语言基本都实现了自举,这是一种编程语言发展成熟的标志之一。因为编译器既是一个复杂的工程,也有一套成熟的评价体系,能写出成熟可用、效率有保证的本语言编译器,就能说明这种语言已经能拿来用了。

以上就是go语言的编译器的详细内容了,看完之后是否有所收获呢?如果想了解更多相关内容,欢迎关注编程笔记行业资讯!


推荐阅读
  • C++程序员视角下的Rust语言
    自上世纪80年代初问世以来,C就是一门非常重要的系统级编程语言。到目前为止,仍然在很多注重性能、实时性、偏硬件等领域发挥着重要的作用。C和C一样&#x ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 【技术分享】一个 ELF 蠕虫分析
    【技术分享】一个 ELF 蠕虫分析 ... [详细]
  • rust编程这篇文章是关于我通过解决Twitch上尚未解决的所有CtCI问题来学习Rust的经验。英国科学博物馆集团AdaLovelace的肖像Rust徽标,由Moz ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了Mycat水平分表相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了在多平台下进行条件编译的必要性,以及具体的实现方法。通过示例代码展示了如何使用条件编译来实现不同平台的功能。最后总结了只要接口相同,不同平台下的编译运行结果也会相同。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了StartingzookeeperFAILEDTOSTART相关的知识,希望对你有一定的参考价值。下载路径:https://ar ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • [转载]从零开始学习OpenGL ES之四 – 光效
    继续我们的iPhoneOpenGLES之旅,我们将讨论光效。目前,我们没有加入任何光效。幸运的是,OpenGL在没有设置光效的情况下仍然可 ... [详细]
author-avatar
imjob1234_34706
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有