自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一篇帶你了解Go vs. Ruby

開發(fā) 后端
對于企業(yè)、行業(yè)來說,通過合適的編程創(chuàng)建出出色的軟件解決方案成為了競爭的關(guān)鍵。我們來對比一下近年來比較出名的兩種編程語言——Go和Ruby。

背景

軟件應(yīng)用程序的快速增長已經(jīng)不再只是一件其本身受歡迎的事情了,它更是帶來了深刻改善所有行業(yè)業(yè)務(wù)流程的真正機(jī)會(huì)。所以,對于企業(yè)、行業(yè)來說,通過合適的編程創(chuàng)建出出色的軟件解決方案成為了競爭的關(guān)鍵。下面,我們來對比一下近年來比較出名的兩種編程語言——Go和Ruby。

GO

介紹

Go 是一個(gè)開源的編程語言,它能讓構(gòu)造簡單、可靠且高效的軟件變得容易。Go是從2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持開發(fā),后來還加入了Ian Lance Taylor, Russ Cox等人,并最終于2009年11月開源,在2012年早些時(shí)候發(fā)布了Go 1穩(wěn)定版本?,F(xiàn)在Go的開發(fā)已經(jīng)是完全開放的,并且擁有一個(gè)活躍的社區(qū)。Go語言由于自身天生支持并發(fā)的特點(diǎn)完美契合當(dāng)下的互聯(lián)網(wǎng)環(huán)境,所以Go語言自發(fā)布之后便迅速風(fēng)靡全球。

特點(diǎn)

  • 語言是開源的: go語言于2009年11月開源
  • 靜態(tài)類型和編譯型: go語言書寫的程序必須通過編譯生成歸檔文件或可執(zhí)行文件,而后才能被使用或者執(zhí)行
  • 跨平臺(tái): go語言本身支持跨平臺(tái)開發(fā),不論你是用什么樣子的硬件環(huán)境還是軟件環(huán)境基本上都可以進(jìn)行去語言的開發(fā)(這句話有些多余,畢竟現(xiàn)在主流編程語言都支持不同的硬件與軟件環(huán)境)
  • 自動(dòng)垃圾回收: go語言的垃圾回收是由去語言本身去處理的,不需要人為干預(yù),但是如果你想要對垃圾回收進(jìn)行機(jī)制進(jìn)行干預(yù)這個(gè)權(quán)限也是對開發(fā)者開放的
  • 原生支持高并發(fā)編程:原生支持高并發(fā)編程,擁有自己的并發(fā)編程機(jī)制。
  • 完善的構(gòu)建工具:go程序的獲取、編譯、測試、安裝都可以使用命令行語句完成
  • 多編程范式:go語言除了支持函數(shù)式編程,也支持面向?qū)ο缶幊?,有接口類型和?shí)現(xiàn)類型的概念,但是用嵌入替代了繼承
  • 高效的編程和運(yùn)行:這里面主要是強(qiáng)調(diào)編寫代碼的界面簡潔,以及去語言程序能夠充分調(diào)動(dòng)計(jì)算機(jī)的運(yùn)行資源,提高程序運(yùn)行效率。
  • 豐富的標(biāo)準(zhǔn)庫:go語言標(biāo)準(zhǔn)庫中有很多好用的API。一定程度上面減少了對于第三方庫的依賴,當(dāng)然如果有好用的第三方庫,作為開發(fā)者也還是會(huì)使用的
  • 代碼風(fēng)格統(tǒng)一:go 語言提供了一套格式化工具——go fmt。保證了不同開發(fā)者提交的代碼都是統(tǒng)一的格式

缺點(diǎn)

  • 錯(cuò)誤處理:Go 語言通過函數(shù)和預(yù)期的調(diào)用代碼簡單地返回錯(cuò)誤(或返回調(diào)用堆棧)而幫助開發(fā)者處理編譯報(bào)錯(cuò)。雖然這種方法是有效的,但很容易丟失錯(cuò)誤發(fā)生的范圍,因此我們也很難向用戶提供有意義的錯(cuò)誤信息
  • 軟件包管理:Go 語言的軟件包管理絕對不是完美的。默認(rèn)情況下,它沒有辦法制定特定版本的依賴庫,也無法創(chuàng)建可復(fù)寫的 builds。相比之下 Python、Node 和 Ruby 都有更好的軟件包管理系統(tǒng)

場景

鑒于Go語言的特點(diǎn)和設(shè)計(jì)的初衷,Go語言作為服務(wù)器編程語言,很適合處理日志、數(shù)據(jù)打包、虛擬機(jī)處理、文件系統(tǒng)、分布式系統(tǒng)、數(shù)據(jù)庫代理等;網(wǎng)絡(luò)編程方面,Go語言廣泛應(yīng)用于Web應(yīng)用、API應(yīng)用、下載應(yīng)用等;除此之外,Go語言還適用于內(nèi)存數(shù)據(jù)庫和云平臺(tái)領(lǐng)域,目前國外很多云平臺(tái)都是采用Go開發(fā)。

  • web開發(fā):Go 語言被設(shè)計(jì)成一門應(yīng)用于搭載 Web 服務(wù)器,存儲(chǔ)集群或類似用途的巨型中央服務(wù)器的系統(tǒng)編程語言。大量優(yōu)秀的Web框架如Echo、Gin、Iris、beego等,而且 Go 內(nèi)置的 net/http 包十分的優(yōu)秀;
  • 游戲開發(fā):對于高性能分布式系統(tǒng)領(lǐng)域而言,Go 語言無疑比大多數(shù)其它語言有著更高的開發(fā)效率。它提供了海量并行的支持
  • 爬蟲及大數(shù)據(jù):Go語言天生支持并發(fā),所以十分適合編寫分布式爬蟲及大數(shù)據(jù)處理;
  • 云平臺(tái)領(lǐng)域: 云服務(wù)很多都是采用Go進(jìn)行開發(fā),比如國內(nèi)著名的七牛云是全站采用Go開發(fā);還有如盛大CDN、阿里云CDN,華為云等。而且云平臺(tái)基礎(chǔ)設(shè)施如docker、kubernetes等也是Go開發(fā);
  • 分布式存儲(chǔ)領(lǐng)域: etcd、Groupcache、TiDB、Cockroachdb、Influxdb等;
  • 區(qū)塊鏈領(lǐng)域: 區(qū)塊鏈里面有兩個(gè)明星項(xiàng)目以太坊和fabric都使用Go語言;
  • 微服務(wù):現(xiàn)在越來越多新的項(xiàng)目采用微服務(wù)架構(gòu),前面介紹的優(yōu)秀項(xiàng)目中也看到很多Go提供的微服務(wù)框架,如git-kit、go-micro等。
  • 服務(wù)器編程:以前你如果使用C或者C++做的那些事情,用Go來做很合適,例如處理日志、數(shù)據(jù)打包、虛擬機(jī)處理、文件系統(tǒng)等。

Go不適合領(lǐng)域

  • GUI: 例如開發(fā)IDE、移動(dòng)App
  • 企業(yè)軟件: 需要COTS交付、二次開發(fā),基于非源代碼的接口擴(kuò)展,可以在重啟或運(yùn)行時(shí)啟用新特性,無需編譯整個(gè)系統(tǒng)的源代碼。這類軟件常常用像annotation一樣的APT機(jī)制對語言元素做一定程度的元編程或修改
  • 超大型軟件和團(tuán)隊(duì):需要很明確的on the fly地知道哪個(gè)接口被哪些類型實(shí)現(xiàn)了,哪些類型實(shí)現(xiàn)了哪些接口。Eclipse有1000W行LOC,InteliJlDEA有700W,JDK自身也有700W,Hadoop+HBase有400w,JBoss等應(yīng)用服務(wù)器有600W,Spring框架有200W,其它第三方庫...日常開發(fā)的JAVA商用軟件,你常常跟幾千萬LOC打交道。但好像GO超過50W的開源項(xiàng)目只有限的Docker、K8S等。GO的開源生態(tài)系統(tǒng)仍然極其弱小,能用于商用產(chǎn)品質(zhì)量的開源庫只有Beego等屈指可數(shù)的幾個(gè)。許多依賴開源庫只有2位數(shù)的star。

Ruby

介紹

Ruby,一種簡單快捷的面向?qū)ο?面向?qū)ο蟪绦蛟O(shè)計(jì))腳本語言,在20世紀(jì)90年代由日本人松本行弘(Yukihiro Matsumoto)開發(fā),遵守GPL協(xié)議和Ruby License。它的靈感與特性來自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp 語言。由 Ruby 語言本身還發(fā)展出了JRuby(Java平臺(tái))、IronRuby(.NET平臺(tái))等其他平臺(tái)的 Ruby 語言替代品。自從 1995 年公開發(fā)布以來,Ruby 在全球吸引了許多忠實(shí)的程序員。2006 年,Ruby 得到廣泛接受,各大城市都有活躍的用戶組,以及 Ruby 相關(guān)的開發(fā)者大會(huì).

特點(diǎn)

  • Ruby 是開源的,除了不收費(fèi)之外,還可以自由使用、復(fù)制、修改和分發(fā)。
  • Ruby 是一種通用的、解釋的編程語言。
  • Ruby 是一種真正的面向?qū)ο蟮木幊陶Z言。在 Ruby 中,一切皆對象。所有的信息和代碼都擁有屬性和行為
  • Ruby 是一種類似于 Python 和 Perl 的服務(wù)器端腳本語言。
  • Ruby 可以用來編寫通用網(wǎng)關(guān)接口(CGI)腳本。
  • Ruby 可以被嵌入到超文本標(biāo)記語言(HTML)。
  • Ruby 語法簡單,這使得新的開發(fā)人員能夠快速輕松地學(xué)習(xí) Ruby。
  • Ruby 與 C++ 和 Perl 等許多編程語言有著類似的語法。
  • Ruby 可用于開發(fā)的 Internet 和 Intranet 應(yīng)用程序。
  • Ruby 采用虛擬機(jī)實(shí)現(xiàn)跨平臺(tái)
  • Ruby 支持許多 GUI 工具,比如 Tcl/Tk、GTK 和 OpenGL。
  • Ruby 可以很容易地連接到 DB2、MySQL、Oracle 和 Sybase。
  • Ruby 有豐富的內(nèi)置函數(shù),可以直接在 Ruby 腳本中使用。
  • Ruby 是一門相當(dāng)靈活的語言,允許用戶改變自身。 Ruby 的核心部分可以更改,也可以重新定義。此外,還可以在現(xiàn)有功能的基礎(chǔ)上增加新功能。Ruby 不想阻礙程序員的創(chuàng)造力。

缺點(diǎn)

  • 性能不如純靜態(tài)編譯語言,例如C,但可以通過用C語言來擴(kuò)展來解決
  • 完全沒有類型檢查,靈活但容易隱藏潛在的問題
  • 使用Module來實(shí)現(xiàn)多重繼承,不如JAVA所采用的接口(Interface)方式清晰,而且由于沒有嚴(yán)格的類型檢查,所以框架層的設(shè)計(jì)無法對實(shí)現(xiàn)有很嚴(yán)格的約束
  • 沒有很完善的開發(fā),重構(gòu)的工具,雖然現(xiàn)在Eclipse已經(jīng)提供Ruby的開發(fā)插件,但還沒有實(shí)現(xiàn)重構(gòu),跳轉(zhuǎn)和自動(dòng)代碼生成等很有用的功能,主要原因是由于Ruby支持動(dòng)態(tài)類型
  • 依然保留部分非面向?qū)ο蟮恼Z法,例如全局變量,全局方法
  • 允許在擴(kuò)展代碼中隨意替換現(xiàn)有類的方法定義或變量,非常靈活,但可能會(huì)因?yàn)殄e(cuò)誤地修改了框架邏輯而引發(fā)難以發(fā)現(xiàn)的錯(cuò)誤,但可以用freeze方法來組織被修改
  • 不支持真正的多線程,多線程環(huán)境是通過在虛擬機(jī)環(huán)境中模擬出來的,不能充分發(fā)揮多CPU的功能,如果一個(gè)線程在執(zhí)行底層調(diào)用被Block住則整個(gè)應(yīng)用程序也被Block住。
  • 對Unicode和多國語言的支持不好

場景

很多人在日常工作使用 Ruby。也有人只是將它作為一種業(yè)余愛好。在這里,你看到的只是現(xiàn)實(shí)世界中 Ruby 的冰山一角。

  • 仿真模擬:NASA 蘭利研究中心使用 Ruby 進(jìn)行仿真;摩托羅拉的一個(gè)研究小組使用 Ruby 寫了一個(gè)生成場景和處理數(shù)據(jù)的模擬器。
  • 三維建模:Google SketchUp 是一個(gè) 3D 建模應(yīng)用,使用 Ruby 作為它的宏腳本接口。
  • 商業(yè):多倫多康復(fù)中心使用基于 RubyWebDialogs 的應(yīng)用來管理、跟蹤呼叫和現(xiàn)場服務(wù),為 IT 幫助臺(tái)和 IT 運(yùn)營團(tuán)隊(duì)提供支持。
  • 機(jī)器人學(xué):在 MORPHA 項(xiàng)目,Ruby 用來實(shí)現(xiàn)西門子服務(wù)機(jī)器人的反應(yīng)控制部分。
  • 電訊:朗訊一個(gè) 3G 無線電話產(chǎn)品中使用了 Ruby。
  • 系統(tǒng)管理:Level 3 Communications 公司的 Unix 容量和規(guī)劃系統(tǒng)負(fù)責(zé)收集分散在全球超過 1700 臺(tái) Unix(Solaris 和 Linux) 服務(wù)器的性能統(tǒng)計(jì)數(shù)據(jù), 它的中央數(shù)據(jù)收集部分是由 Ruby 編寫的。
  • 網(wǎng)頁應(yīng)用: RubyonRails框架的公司; SASS 世界上最成熟、穩(wěn)定和強(qiáng)大的專業(yè)級 CSS 擴(kuò)展語言;A List Apart 建立于 1997 年的雜志網(wǎng)站,最近使用自定義的 Ruby on Rails 重新構(gòu)建。
  • 安全:由 Rapid7 管理的社區(qū)開源項(xiàng)目 Metasploit Framework 是一個(gè)免費(fèi)的滲透測試平臺(tái),旨在幫助 IT 專業(yè)人員評估網(wǎng)絡(luò)和應(yīng)用程序的安全性。項(xiàng)目由超過了 70 萬行代碼組成,2010 年已經(jīng)下載超過一百萬次。Rapid7 開發(fā)的商業(yè)版本 Metasploit Express 和 Metasploit Pro均基于 Ruby 開發(fā)。

總結(jié)

Ruby vs Go:性能

Go開發(fā)的關(guān)鍵原則是簡單性和生產(chǎn)力。Go語言的語法簡單、直觀,易于閱讀,能夠讓程序員快速學(xué)習(xí)。Go語言的主要作者之一Rob Pike曾表示該語言就是專門為簡化開發(fā)過程和快速獲得結(jié)果而創(chuàng)建的。Ruby的設(shè)計(jì)也注重簡潔性和生產(chǎn)力,其粉絲都稱其是一種美麗、巧妙的語言。Ruby和Go都受到C系列編程語言的影響,相對年輕,但是卻俘獲了不少人的心,這其中包括程序員和業(yè)務(wù)決策者。Go非常適合解決簡單和復(fù)雜的多線程任務(wù),這也是當(dāng)初谷歌設(shè)計(jì)這門語言的目的。受到流行的Ruby on Rails框架的影響。Ruby非常適合創(chuàng)建小型商業(yè)項(xiàng)目、博客和個(gè)人頁面。但是面對復(fù)雜的解決方案,Ruby有點(diǎn)力不從心,性能速度低,這可能會(huì)影響要求苛刻的客戶的總體滿意度。根據(jù)我們的性能測試結(jié)果,在相同的環(huán)境下,Go項(xiàng)目比Ruby編寫的類似項(xiàng)目運(yùn)行得更快。

Ruby vs Go:社區(qū)

根據(jù)Tiobe和Stack Overflow的調(diào)查,Go是近年來發(fā)展最快、最受歡迎的編程語言之一,而Ruby則表現(xiàn)相反,近幾年中越來越不受歡迎。Ruby是由個(gè)人創(chuàng)建的,而Go則由Google設(shè)計(jì)的,其包括有廣泛的云基礎(chǔ)架構(gòu),支持性社區(qū)、論壇、教程,以及最重要的其他庫,可幫助語言向前發(fā)展。此外,Go是許多重要公司的首選,如Docker,BBC,SoundCloud,F(xiàn)acebook,Dropbox,甚至是Medium。這些企業(yè)用戶也是Go進(jìn)一步發(fā)展的保證。與之對應(yīng)的,Ruby也被Twitter,Shopify,Crunchbase等大公司選中。

Ruby vs Go:兼容性

編程語言和軟件堆棧其他部分集成是可以直接影響將新解決方案、功能或改進(jìn)添加到現(xiàn)有程序的速度。由于Go與其他語言(特別是C系列語言)的自然兼容性,許多程序員甚至在使用不同堆棧(如Python和Go或PHP和Go)時(shí)都可以使用Go來提高應(yīng)用程序的性能。此外,Go作為服務(wù)器端語言可與幾乎所有數(shù)據(jù)庫交互。至于Ruby,它的兼容性僅限于最流行的數(shù)據(jù)庫。

Ruby vs Go:開發(fā)經(jīng)驗(yàn)

我們的團(tuán)隊(duì)多年來一直在使用這兩種語言進(jìn)行開發(fā),他們各自都有其優(yōu)點(diǎn)和缺點(diǎn)。根據(jù)我們的經(jīng)驗(yàn),Go非常適合任何規(guī)模的后端系統(tǒng)和高度可擴(kuò)展的網(wǎng)絡(luò)服務(wù)器。Go是一種現(xiàn)代競爭性的語言,能夠?yàn)槟峁┛焖佟⒏哔|(zhì)量的性能,簡潔的環(huán)境以及與其他技術(shù)的良好兼容性。但如果您更看重結(jié)果的快速交付,對于性能質(zhì)量沒有苛刻的要求,那么Ruby可能更適合您。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2022-02-17 08:35:59

OLTPOLAP數(shù)據(jù)倉庫

2022-02-22 08:15:59

微服務(wù)架構(gòu)單體架構(gòu)

2021-05-20 06:57:16

RabbitMQ開源消息

2022-02-18 10:13:07

SolrElasticSea開源

2020-11-05 09:58:16

Go語言Map

2021-09-29 10:00:07

Go語言基礎(chǔ)

2021-10-13 10:00:52

Go語言基礎(chǔ)

2022-02-16 10:03:06

對象接口代碼

2020-10-22 08:33:22

Go語言

2020-10-22 11:15:47

Go語言變量

2020-11-11 10:52:54

Go語言C語言

2021-11-16 14:09:58

Containerd Dockerk8s

2023-05-12 08:19:12

Netty程序框架

2021-06-30 00:20:12

Hangfire.NET平臺(tái)

2021-07-28 10:02:54

建造者模式代碼

2021-07-14 08:24:23

TCPIP 通信協(xié)議

2021-08-11 07:02:21

npm包管理器工具

2021-08-02 06:34:55

Redis刪除策略開源

2021-11-08 08:42:44

CentOS Supervisor運(yùn)維

2021-11-24 08:51:32

Node.js監(jiān)聽函數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號