偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

一篇帶你了解Go vs. Ruby

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

背景

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

GO

介紹

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

特點(diǎn)

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

缺點(diǎn)

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

場(chǎng)景

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

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

Go不適合領(lǐng)域

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

Ruby

介紹

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

特點(diǎn)

  • Ruby 是開(kāi)源的,除了不收費(fèi)之外,還可以自由使用、復(fù)制、修改和分發(fā)。
  • Ruby 是一種通用的、解釋的編程語(yǔ)言。
  • Ruby 是一種真正的面向?qū)ο蟮木幊陶Z(yǔ)言。在 Ruby 中,一切皆對(duì)象。所有的信息和代碼都擁有屬性和行為
  • Ruby 是一種類(lèi)似于 Python 和 Perl 的服務(wù)器端腳本語(yǔ)言。
  • Ruby 可以用來(lái)編寫(xiě)通用網(wǎng)關(guān)接口(CGI)腳本。
  • Ruby 可以被嵌入到超文本標(biāo)記語(yǔ)言(HTML)。
  • Ruby 語(yǔ)法簡(jiǎn)單,這使得新的開(kāi)發(fā)人員能夠快速輕松地學(xué)習(xí) Ruby。
  • Ruby 與 C++ 和 Perl 等許多編程語(yǔ)言有著類(lèi)似的語(yǔ)法。
  • Ruby 可用于開(kāi)發(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 是一門(mén)相當(dāng)靈活的語(yǔ)言,允許用戶改變自身。 Ruby 的核心部分可以更改,也可以重新定義。此外,還可以在現(xiàn)有功能的基礎(chǔ)上增加新功能。Ruby 不想阻礙程序員的創(chuàng)造力。

缺點(diǎn)

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

場(chǎng)景

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

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

總結(jié)

Ruby vs Go:性能

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

Ruby vs Go:社區(qū)

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

Ruby vs Go:兼容性

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

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

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

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

2022-02-17 08:35:59

OLTPOLAP數(shù)據(jù)倉(cāng)庫(kù)

2022-02-22 08:15:59

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

2021-05-20 06:57:16

RabbitMQ開(kāi)源消息

2022-02-18 10:13:07

SolrElasticSea開(kāi)源

2021-09-29 10:00:07

Go語(yǔ)言基礎(chǔ)

2021-10-13 10:00:52

Go語(yǔ)言基礎(chǔ)

2020-11-05 09:58:16

Go語(yǔ)言Map

2022-02-16 10:03:06

對(duì)象接口代碼

2020-10-22 08:33:22

Go語(yǔ)言

2020-10-22 11:15:47

Go語(yǔ)言變量

2020-11-11 10:52:54

Go語(yǔ)言C語(yǔ)言

2021-07-14 08:24:23

TCPIP 通信協(xié)議

2021-06-30 00:20:12

Hangfire.NET平臺(tái)

2023-05-12 08:19:12

Netty程序框架

2021-07-28 10:02:54

建造者模式代碼

2021-08-11 07:02:21

npm包管理器工具

2021-11-24 08:51:32

Node.js監(jiān)聽(tīng)函數(shù)

2021-08-02 06:34:55

Redis刪除策略開(kāi)源

2021-11-08 08:42:44

CentOS Supervisor運(yùn)維

2021-12-15 11:52:34

GPLLinuxGNU
點(diǎn)贊
收藏

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