与 Python 的 40 个特性相比,Go 只有 31 个。可以说 Go 在语言设计上相当克制。例如,它没有隐式数字转换、没有构造函数和析构函数、没有运算符重载、没有默认参数、没有继承、没有泛型、没有异常、没有宏、没有函数修饰符,也没有线程本地存储。
但是 Go 的特性也非常有特色,比如它有协程、自动垃圾回收、包管理系统、一等公民的功能、堆栈空间管理等。
作为一种静态类型语言,Go 确保 Go 在运行效率、内存使用和类型安全等方面都比 Python 和 Erlang 更强。
Go 的数据类型也更丰富。除了支持表和字典等复杂的数据结构外,它还支持指针和接口类型,这在 Python 和 Erlang 中是没有的。接口类型尤其强大,它提供了一种管理类型系统的方法。指针类型提供了一种管理内存的方式,这使得 Go 可以为底层软件开发提供强大的支持。
Go 在面向对象的特性支持上做了很多反思和权衡。它没有类、虚函数、继承和泛型等特性。 Go 中面向对象编程的核心是组合和函数。该组合与C语言struct结构的组合非常相似,方法类似于Java接口(Interface),但使用方法与对象更加解耦,减少了对对象的侵入。 Erlang 不支持面向对象的编程范式。相比之下,Python 对面向对象范式的支持最为全面。
在对函数式编程的特性支持方面,Erlang作为一门函数式语言的支持最为全面。但是所有三种语言都支持基本的函数式语言特性,例如 lambdas、高阶函数、curry 等。
在控制流的特性支持方面,这三种语言是相似的。 Erlang 支持尾递归优化,方便函数式编程。 Go 通过动态扩展协程堆栈来支持深度递归调用。另一方面,Python 经常被深度递归调用轰炸。
Go 和 Erlang 的并发模型都是从 CSP 派生的,但是 Erlang 是基于 Actor 和消息传递(邮箱)的并发实现,而 Go 是基于 goroutine 和管道(channel)的并发实现。不管是 Erlang 的 actor 还是 Go 的 goroutine,它们都符合协程的特点:它们是由编程语言实现和调度的,切换是在用户态完成的,创建和销毁的成本非常小。至于Python,它的多线程切换和调度是基于操作系统实现的,由于GIL这个大坑的存在,无法真正实现并行化。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 如何使用 Python 获取多线程返回值?10/02
- ♥ 如何使用python调试09/02
- ♥ 如何用python3代码玩小游戏?12/21
- ♥ python如何引用模块11/15
- ♥ python方法在列表中和列表末尾添加元素09/21
- ♥ 自学应该用什么版本的python11/02
内容反馈