您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
golang本身是用什么语言写的?
语言,编程语言,编译器golang本身是用什么语言写的?
发布时间:2019-02-08加入收藏来源:互联网点击:
golang本身是用什么语言写的?
回答于 2019-09-11 08:43:50
回答于 2019-09-11 08:43:50
golang 本身是用什么语言编写的?类似 「xx 语言是用什么语言实现的」这种疑问挺常见的,特别对于刚接触编程语言的人!记得我刚接触时,很困惑:这个语言是 C 实现的,那 C 是什么实现的?借此,咱们梳理下这个问题!
编程语言的发展
在计算机发展初期,编程直接通过机器指令和计算机交互,也就是机器语言,一堆0101,简直无法读无法改,所以发展出汇编语言。汇编语言指令总体上和机器语言指令是一一对应的,但可读性有了很大加强!这两种语言称为低级语言。
20世纪50、60年代,涌现了各种高级语言,在70年代初,随着Unix的开发,C语言被开发出来,一直流行到现在。
之后编程语言不断发展,出现了面向对象编程语言、函数式编程语言,还分为动态语言和静态语言等等。真是百花齐放百家争鸣。
然而,编程语言的发展并没有就此止步。在过去的十年内,又涌现出很多新的语言,如:Go、Swift、Rust、Kotlin、Dart 等等。新语言有一些先天优势:没有历史包袱,可以吸纳这么多年,其他语言的优势,避免一些问题,同时有些是为了解决某一些问题而出现,也是为了解决之前语言的一些问题。因此,这些新语言,关注度都不错。
Go语言的发展历程
2009 年 11 月,Google 对外宣布,开源其通用编程语言 Go 语言,因为 Google 出品,同时创作者又是特别有名的几个人,立马引起大家极大的兴趣,当年 Go 夺下了 TIOBE 2019年年度编程语言称号。2012 年 3 月份,Go 发布了 Go1.0 稳定版本。之后每年发布两个版本。下图是目前为止,发布版本的情况,下表主要列举 GC 相关的改进。
Go 本身用什么语言实现
Go1.4 之前(包括1.4),主要是 C 语言实现的(当然还有部分汇编);Go1.5 开始,实现了自举:也就是用低版本的 Go 语言编译自己,这个过程,Go 团队做了大量的自动化转换工作。
所以,现在 Go 语言是用 Go 语言实现的,当然,包含部分汇编代码。
https://github.com/golang/go
这是 Go 语言源码地址。Go语言中文网,致力于每日分享编码知识,欢迎关注我,会有意想不到的收获!
回答于 2019-09-11 08:43:50
最初使用 C 语言实现的,还有少了的汇编语言。渐渐的就变成了使用 Go 语言本身来开发,也就是低版本的 Go 语言开发高版本的 Go 语言。这个概念通常叫着「自举」,自己把自己举起来,英文概念叫 Bootstrap。Python 语言有很多解释器,其中之一叫 pypy,它是使用 Python 语言来编写的 Python 解释器,它同样也是自举出来的。
回答于 2019-09-11 08:43:50
Go语言现在已经实现了自举,也就是说现在Golang是用Golang自己编写的自己。早期Go是用汇编语言和C语言实现的,后来Go成熟了之后,Go语言就开始自举、用早期版本重写了Go语言编译器。
国内字节跳动和哔哩哔哩,都是以Go语言为核心技术栈的企业,Docker、七牛云存储、百度、腾讯也都在开始使用Go语言在自己实际项目当中,手机百度消息业务就是Go语言写的,要知道手机百度可是扛住了春晚流量洪峰的,这说明你应该把Go语言学起来了。
Google逐步实现Go语言“去C语言化”
很多编程语言的核心都是C语言,甚至可以说现代计算机核心基础都构建在C语言和Unix之上,肯汤普森和丹尼斯里奇老爷子创造了C语言和Unix,然后C和Unix再生万物。JVM、PHP核心、GCC、Emacs、Vim、Unix、Linux等等,这些全都是用C语言来写的。
Go语言自然也不例外,Go语言编译器最初也是C语言写的,Go语言的作者之一就是大名鼎鼎的祖师爷肯汤普森。Google早在2014年初的时候,就已经开始在筹备从Go语言的源码中彻底移除C语言,也就是说让Go语言真正完成自举。
Google自举Go语言的具体方案
Go语言是效率很高的编程语言,比Java、C#、PHP、Python这些基于虚拟机以及解释性语言性能要好、资源使用效率也更高。基本上除了C/C++之外,Go语言就是性能最好的高级语言,相对于C和C++、Go语言在语法上又有极大的优势。
Java和PHP都只能部分自举,Java的JVM还是得用C语言实现,PHP核心也得用C语言来写,能够实现自举的编程语言必须是图灵完备的,因此HTML 、CSS也没办法完成自举,他们也不是真正意义上的编程语言。
Google具体的实施步骤:开发一个C到Go的编译器,将现有的C编译器翻译成Go语言;转化编译器源码树、得到一个Go语言编译器;将C风格明显的Go编译器转化成彻底的Go语言风格Go编译器;对Go编译器进行优化,主要是优化处理器、内存性能使用问题,加入并行机制、优化消除冗余检查和边界检查能力;用最新版go/parser和go/types替换编译器前端。
Google为什么要让Go语言实现自举呢?
自举意义主要有三点:测试被自举的编程语言;实现用更高级和抽象的编程语言来编写编译器;编程语言也能从语言本身的发展获益。
能够自举证明至少编程语言是图灵完备的,证明了编程语言本身具备这样强大的能力,这本身也是对编程语言的一种宣传,至少证明编程语言具备很强的通用能力、以及非常强的底层能力。在自举过程中,本质上也是对编程语言的一次考验,核心开发者在这个过程中,可以积累很多编程语言本身的经验教训,能够尽早发现编程语言本身存在的不足和设计缺陷,方便能够及时做出调整和优化。
因此编程语言想要自举,这件事情做得越早越好,自举的过程也是一次对编程语言的完善过程, 在编程语言定型之前越早完成自举,编程语言就成熟得越早,C/C++之所以这么多年经久不衰,就是因为他们本身足够成熟,其他编程语言要发展,都要靠这两们编程语言,Go语言现在也具备这样的可能。
上一篇:太原市水上运动中心准备开工建设,这对太原意味着什么?
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |