6.Go 和 C++ 的对比-灵析社区

菜鸟码转

1.Go 语言:

Go(又称 Golang)是 Google 开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Google 的罗伯特·格瑞史莫(英语:Robert Griesemer)、罗勃·派克及肯·汤普逊于 2007 年 9 月开始设计 Go,稍后伊恩·兰斯·泰勒(Ian Lance Taylor)、拉斯·考克斯(Russ Cox)加入项目。Go 的语法接近 C 语言,但对于变量的声明(type declaration)有所不同。Go 支持垃圾回收功能。Go 的并行计算模型是以东尼·霍尔的通信顺序进程(CSP)为基础,采取类似模型的其他语言包括 Occam 和 Limbo,Go 也具有这个模型的特征,比如通道传输。通过 goroutine 和通道等并行构造可以建造线程池和管道等。在 1.8 版本中开放插件(Plugin)的支持,这意味着现在能从 Go 中动态加载部分函数。与 C++ 相比,Go 并不包括如枚举、异常处理、继承、泛型、断言、虚函数等功能,但增加了切片(Slice)型、并发、管道、垃圾回收功能、接口等特性的语言级支持。Go 2.0 版本将支持泛型。不同于 Java,Go 原生提供了关联数组(也称为哈希表(Hashes)或字典(Dictionaries))。

2.两者之间的比较:

  • 二者的相同之处:

二者都为静态类型编程语言,二者都为编译性语言,都具有高性能的特点。

  • 二者的不同之处:

Go 的许多越语法和逻辑跟 C 非常类似,Go 的运行效率很高,Go 主要是面向过程,对于面向对象支持较弱,不支持继承、多态这些概念,Go 通过结构体中含有方法来支持面向对象,但不支持多重继续,Go 没有类的概念,同时也不支持构造函数与析构函数;C++ 则是面向对象(Object Oriented),支持继承、多重继承、多态、重载这些特性。

Go 语言自带垃圾回收(garbage collection);C++ 不支持内存垃圾自动回收,需要程序手动管理动态申请的内存。

Go 语言也支持指针,但是 Go 语言不支持指针的运算;C++ 支持指针,同时也支持指针运算。

C++ 编译器提供 SIMD 指令生成,但是 Go 编译器不支持 SIMD 指令的生成。

C++ 遵循的许可为 open source project 2.0,而 Go 遵循的许可为 BSD。

C++ 与 Go 都属于静态类型编程语言,但是 Go 语言需要遵循强类型语言规则,Go 不支持隐式类型转换。

Go 编译时如果需要引用外部函数则使用 import 关键字,引入 packages,而 C++ 则使用 #include 关键字,引入头文件。

Go 不支持函数重载和操作符重载,而 C++ 支持函数重载与操作符重载。

Go 中的空指针用 nil 表示,而 C++ 中空指针可以用 nullptr 或者 0 表示。

C++ 支持异常处理,可以捕获异常,Go 使用 panic 并保存所有的错误信息。

Go 可以利用 goroutines 与 channel 来进行并发与多线程,C++ 只能使用线程。

阅读量:2007

点赞量:0

收藏量:0