Go编程语言评估报告 1. Go简介 Go是由Google于2007年9月21日开始开发,2009年11月10日开放源码,2012年 3月28日推出第一个正式版本的通用型编程语言。它为系统编程而7设计,是强类型化的 语言,具有垃圾回收机制,并显式支持并发编程。Go程序由包构造,以此来提供高效的 依赖管理功能。当前的编译器实现使用传统的“编译-链接”模型来生成可执行的二进制文 件。 十年以来,主流的系统级编程语言并未出现过,但在这期间,计算环境已经发生了巨大的 变化。以下是一些变化趋势: ● 相计算机的速度变得极快,但软件开发还不够快。 ● 在今天,依赖管理已然成为了软件开发中当重要的部分,但传统的C家族语言以“头文 件”的方式组织源码,这与清晰的依赖分析以及快速编译背道而驰。 ● Java和C++等语言的类型系统比较笨重,人们的反抗越来越多,因此他们转向了 Python和JavaScript之类的动态类型语言。 ● 目前流行的系统语言对于像垃圾回收及并行计算等基本思想的支持并不算好。 ● 多核计算机的出现产生了一些麻烦与混乱。 ● 随着系统的庞大,分布式的要求越来越高,现有的语言开发分布式系统越来越笨重以及难 以维护。 而Go则是一种新的语言,一种并发的、带垃圾回收的、快速编译的语言。它满足了以下特点: ● 它可以在一台计算机上用几秒钟的时间编译一个大型的Go程序。 ● Go为软件构造提供了一种模型,它使依赖分析更加容易,且避免了大部分C风格 include文件与库的开头。 ● Go是静态类型的语言,它的类型系统没有层级。因此用户不需要在定义类型间的关系上 花费时间,这样感觉起来比典型的面向对象语言更轻量级。 ● Go完全是垃圾回收型的语言,并为并发执行与通信提供了基本的支持。 ● 按照其设计,Go打算为多核机器上系统软件的构造提供一种方法。 Go试图成为结合解释型编程的轻松、动态类型语言的高效以及静态类型语言的安全的编译型语 言。它也打算成为现代的,支持网络与多核计算的语言。要满足这些目标,需要解决一些语言上 的问题:一个富有表达能力但轻量级的类型系统,并发与垃圾回收机制,严格的依赖规范等等。 这些无法通过库或工具解决好,因此Go也就应运而生了。 2. C/C++的缺陷 a. 全局变量的初始化顺序 由于在C/C++中,全局变量的初始化顺序并不确定,因此依赖于全局变量初始化 顺序的操作,可能会给程序带来不可预知的问题。 b. 变量默认不会被初始化 由于变量默认不会被初始化,因此如果在程序中忘记初始化某个变量,就有可能 造成一些奇怪的细节性错误,以至于在Coding Standard中都为之专门加以强调。 c. 字符集的支持1 C/C++最先支持的字符集是ANSI。虽然在C99/C++98之后提供了对Unicode的支 持,但在日常的编码工作中却要在ANSI与Unicode之间来回转换,相当地繁琐。 d. 复杂的继承模式 C++提供了单/多继承,而多继承则引入了大量的复杂性,比如“钻石型继承”等。 细节请参阅《深度探索C++对象模型》。 e. 对并发的支持 在C++中,并发更多的是通过创建线程来启用,而线程间的通信则是通