您现在的位置是:群英 > 开发技术 > 编程语言
golang可以实现自举吗,有什么方法
Admin发表于 2022-06-16 17:06:09642 次浏览
在这篇文章中我们会学习到关于“golang可以实现自举吗,有什么方法”的知识,小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望对大家学习或工作能有帮助。下面就请大家跟着小编的思路一起来学习一下吧。

golang实现自举的方法:首先安装【Go 1.4】或更高版本;然后使用现有的Go工具链创建【Go 1.5】工具链的一个基本版本;最后进一步用它构建【go_bootstrap】和其余的标准库和标准组件。

golang实现自举的方法:

自举(Bootstrapping) 是这样的过程,“用要编译的目标编程语言编写其编译器(或汇编器)”。一般而言,自举有几个优势,比如:

  • 用于测试被自举的语言;

  • 支持使用通常更为高级、提供更多高级抽象的语言来编写编译器;

  • 编译器也可以得益于语言层面的任何改进。

如前所述,Google在一年前就开始了从Go源码树中去除C代码的努力,转换计划分为5个步骤:

  • 第1阶段——开发一个从C语言到Go语言的翻译器,将现有的C编译器翻译成Go语言的。这一阶段利用了一个事实:原来的编译器没有大量使用一些很难移植到Go语言的特性,比如宏、联合和指针运算等。

  • 第2阶段——转换编译器的源码树,得到一个Go语言的编译器,但是比较原始,而且是C风格的。

  • 第3阶段——将前面得到的编译器转换为符合Go语言习惯的程序,主要通过识别包,添加文档和单元测试实现。

  • 第4阶段——优化编译器,解决编译器和CPU的内存使用问题,可能引入并行化。此外,尝试在今天使用的不依赖架构的无序树(Node*s)和依赖架构的有序列表(Prog*s)之间引入一个新的中间表示,目的是改进编译器在消除冗余的nil检查和边界检查等情况下的优化能力。

  • 第5阶段——用最新版的go/parser和go/types替换前端。

Russ提到,他们还考虑了一些替代方案,不过基于各种因素都排除了,在一年前的这份文档中都有描述。

Go的自举

编译器的自举通常会引发“先有鸡还是先有蛋”的问题,必须提供一种方式来编译我们要创建的语言。

Go的情况是,要构建Go 1.5,必须先安装Go 1.4或更高版本,然后使用现有的Go工具链创建Go 1.5工具链的一个基本版本。一旦有了(Go 1.4)编译的Go 1.5工具链,就可以再用它来构建自身了,可以进一步用它构建go_bootstrap和其余的标准库和标准组件。这个过程加入了一个中间步骤——生成的工具链再被用于构建其自身,它可以应用于未来的任何Go版本。

为进一步了解Go实现自举的计划,InfoQ采访了Russ。

实现自举看上去是Go语言的一个很大的里程碑。在语言的演进过程中,为什么决定在这个阶段做这个事情呢,可以详细介绍一下吗?

Go是一门不错的通用语言,但在设计时考虑的适用场合是编写大规模、高并发的服务端软件,就像运行在Google的服务器上的那些。如果更早实现自举,Go编译器就是第一个大型的Go语言程序,这对语言设计存在不利影响,会让我们远离真正的目标。

没有更早实现自举,还有一些技术原因,比如可移植性,从源代码编译比自举更容易,而且我们也能尽早有一个稳定的编译器实现。

使用Go来构建Go,与使用C相比,你认为对哪些具体领域有较为明显的改进?

Ken Thompson曾经对我说,用Go编写程序感觉比用C更简单。一个原因是,Go消除了好几类常见的C bug,比如悬挂指针、内存泄漏、缓冲区溢出、深度递归时的栈溢出、误用void*和意外的数值转换等。

与任何标准的C工具链相比,标准的Go工具链对模块化、单元测试和性能分析支持更好,不过让我最兴奋的是在修改内部API或重构时,应用自动化程序重写(如gofix)的前景。

在“Go 1.3+ Compiler Overhaul”这篇文档中,你描述了分5个步骤将现有的编译器从C迁移到Go的过程。请问到目前为止,已经完成了哪些步骤了?其余步骤打算何时完成?

对Go项目而言,将语言的运行时从C转换到Go更为重要,所以我们先做了这个。现在我们正回到编译器。

从文档角度看,我们目前处于第2阶段。翻译器已经完成,而且帮助我们转换了运行时。我们正在将其应用于编译器。我们希望完成Go 1.5编译器的转换。清理工作会在Go 1.5之后的项目中进行。


以上就是关于golang可以实现自举吗,有什么方法的介绍,本文内容仅供参考,有需要的朋友可以借鉴了解看看,希望对大家学习或工作,想要了解更多欢迎关注群英网络,小编每天都会为大家更新不同的知识。

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

标签: Golang
相关信息推荐
2022-11-19 17:51:05 
摘要:本篇文章给大家带来了关于vue的相关知识,其中主要介绍了关于组件的创建、渲染以及注册的相关问题,创建的组件不要写el因为最终所有的组件都要被vm管理,由vm决定服务的对象,下面一起来看一下,希望对大家有帮助。
2022-02-11 17:51:06 
摘要:对于留言板功能大家应该都是比较熟悉的吧,详细大家之前也了解很多实现和制作留言板的方法,这篇就主要给大家介绍的是利用PHP制作留言板的方法,文中有具体的示例及代码供大家参考,对大家学习和理解PHP也有帮助,下面我们一起来了解看看吧。
2022-04-29 10:51:28 
摘要:给大家带来一篇关于JS天时分秒倒计时的代码的相关教程文章,内容涉及到js、倒计时、JS倒计时实例_天时分秒等相关内容,更多关于JS倒计时实例_天时分秒的内容希望能够帮助到大家。
云活动
推荐内容
热门关键词
热门信息
群英网络助力开启安全的云计算之旅
立即注册,领取新人大礼包
  • 联系我们
  • 24小时售后:4006784567
  • 24小时TEL :0668-2555666
  • 售前咨询TEL:400-678-4567

  • 官方微信

    官方微信
Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
微信公众号
返回顶部
返回顶部 返回顶部