1.7Go语⾔和其它编程语⾔的对⽐
1. Java
编译语⾔,速度适中(2.67s),⽬前的⼤型⽹站都是拿java写的,⽐如淘宝、京东等。主要特点是稳定,开源性好,具有⾃⼰的⼀套编写规范,开发效率适中,⽬前最主流的语⾔。
作为编程语⾔中的⼤腕。具有最⼤的知名度和⽤户。⽆论风起云涌,我⾃巍然不动。他强任他强,清风拂⼭岗;他横由他横,明⽉照⼤江(⽜逼!)。
2. c#
执⾏速度快(4.28),学习难度适中,开发速度适中。但是由于c#存在很多缺点,京东、携程等⼤型⽹站前⾝都是⽤c#开发的,但是现在都迁移到了java上。
3. C/C++
现存编程语⾔中的⽼祖,其他语⾔皆由此⽽⽣。执⾏速度最快⽆⼈能及。但是写起来最为复杂,开发难度⼤。
4. Javascript
编程语⾔中特⽴独⾏的傲娇美⼥。前端处理能⼒是其它语⾔⽆法⽐拟。发展中的js后端处理能⼒也是卓越不凡。前后端通吃,舍我其谁?5. Python
脚本语⾔,速度最慢(258s),代码简洁、学习进度短,开发速度快。⾖瓣就是拿python写的。Python著名的服务器框架有
django,flask。但是python在⼤型项⽬上不太稳定,因此有些⽤python的企业后来迁移到了java上。
6. scala
编译语⾔,⽐python快⼗倍,和java差不多,但是学习进度慢,⽽且在实际编程中,如果对语⾔不够精通,很容易造成性能严重下降。,后来⽐如Yammer就从scala迁移到了java上。微服务框架有lagom等。
7. Go
编程界的⼩鲜⾁。⾼并发能⼒⽆⼈能及。即具有像Python⼀样的简洁代码、开发速度,⼜具有C语⾔⼀样的执⾏效率,优势突出。
总结
因为Go的语法和Erlang、Python类似,所以我们将这三门语⾔做个详细的对⽐。
java调用python模型 相⽐于Python的40个特性,Go只有31个,可以说Go在语⾔设计上是相当克制的。⽐如,它没有隐式的数值转换,没有构造函数和析构函数,没有运算符重载,没有默认参数,也没有继承,没有泛型,没有异常,没有宏,没有函数修饰,更没有线程局部存储。
但是Go的特点也很鲜明,⽐如,它拥有协程、⾃动垃圾回收、包管理系统、⼀等公民的函数、栈空间管理等。
Go作为静态类型语⾔,保证了Go在运⾏效率、内存⽤量、类型安全都要强于Python和Erlang。
Go的数据类型也更加丰富,除了⽀持表、字典等复杂的数据结构,还⽀持指针和接⼝类型,这是Python和Erlang所没有的。特别是接⼝类型特别强⼤,它提供了管理类型系统的⼿段。⽽指针类型提供了管理内存的⼿段,这让Go进⼊底层软件开发提供了强有⼒的⽀持。
Go在⾯对对象的特性⽀持上做了很多反思和取舍,它没有类、虚函数、继承、泛型等特性。Go语⾔中⾯向对象编程的核⼼是组合和⽅法(function)。组合很类似于C语⾔的struct结构体的组合⽅式,⽅法类似于Java的接⼝(Interface),但是使⽤⽅法上与对象更加解耦,减少了对对象内部的侵⼊。Erlang则不⽀持⾯对对象编程范式,相⽐⽽⾔,Python对⾯对对象范式的⽀持最为全⾯。
在函数式编程的特性⽀持上,Erlang作为函数式语⾔,⽀持最为全⾯。但是基本的函数式语⾔特性,如lambda、⾼阶函数、curry 等,三种语⾔都⽀持。
控制流的特性⽀持上,三种语⾔都差不多。Erlang⽀持尾递归优化,这给它在函数式编程上带来便利。⽽Go在通过动态扩展协程栈的⽅式来⽀持深度递归调⽤。Python则在深度递归调⽤上经常被爆栈。
Go和Erlang的并发模型都来源于CSP,但是Erlang是基于actor和消息传递(mailbox)的并发实现,Go是基于goroutine和管道(channel)的并发实现。不管Erlang的actor还是Go的goroutine,都满⾜协程的特点:由编程语⾔实现和调度,切换在⽤户态完成,创建销毁开销很⼩。⾄于Python,其多线程的切换和调度是基于操作系统实现,⽽且因为GIL的⼤坑级存在,⽆法真正做到并⾏。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论