1.7 Go语言和其它编程语言的对比
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類似,所以我們將這三門語言做個詳細的對比。
??相比于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的大坑級存在,無法真正做到并行。
總結
以上是生活随笔為你收集整理的1.7 Go语言和其它编程语言的对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言多个形参,C中子函数最多有几个形参
- 下一篇: 第3章 Python 数字图像处理(DI