提问 go 和 c++ 对比,有什么不同吗?
当时的回答感觉过于表面和单调,整理文档来深入归纳一下。
下一篇着重整理GC垃圾回收。
基础特性
Go
Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。
C++
C++(c plus plus)是一种计算机高级程序设计语言,由C语言扩展升级而产生 [17],最早于1979年由本贾尼·斯特劳斯特卢普在AT&T贝尔工作室研发。 [2]
C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计。 C++几乎可以创建任何类型的程序:游戏、设备驱动程序、HPC、云、桌面、嵌入式和移动应用等。 甚至用于其他编程语言的库和编译器也使用C++编写。 [25]
C++拥有计算机运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。
对比可了解到,Go更倾向于并发场景及简单性,GMP CSP都服务于并发和内存安全,更倾向于网络编程和系统编程。而C++灵活性更高,有更复杂的指针和内存管理。
类型
Go 有强大的类型系统和隐式接口,支持静态类型和类型推断。
C++类型更为复杂,提供了强类型和弱类型的类型选项,需要开发者手动进行类型转换。
二者相比,设计理念结合简单性的Go提供了多态和接口,而C++则有更多的高级特性,如模板,异常处理,运行时多态。由此认为Go对初学者较友好。
内存安全
C++ 需要手动对内存进行回收,Go 有GC 「垃圾回收机制」,会自动处理。
跨平台支持
Go语言在跨平台开发上提供了极佳的支持。它的工具链能够轻松地为不同的操作系统和架构编译可执行文件,而无需改变代码基础。这种“写一次,到处运行”的能力,使Go成为开发跨平台应用程序的理想选择。而C/C++虽然也支持跨平台开发,但通常需要依赖于特定平台的编译器和条件
编译效率
C/C++属于编译型语言,会直接编译成机器语言执行效率更高。
接口区别
C++中派生类需要生命继承自基类,并实现基类所有的纯虚函数,属于‘侵入式’,而Go则是‘非侵入式’,只需要实现接口定义的函数,编译器就会自动识别。
接口方式的不同导致底层实现的不同。
C++通过虚函数表来实现基类调用派生类的函数, Go通过itab函数的fun字段来实现接口变量调用实体类型的函数。
网友评论