歡迎加入QQ討論群258996829
來自星星的你 頭像
蘋果3袋
3
來自星星的你

從Go、Swift出發(fā):語言的選擇需謹(jǐn)慎

發(fā)布時(shí)間:2014-12-09 20:36  回復(fù):0  查看:2767   最后回復(fù):2014-12-09 20:36  

Google于2009年第一次提出了Go的構(gòu)思,F(xiàn)acebook在去年春天引入了Hack,隨后不久Apple也發(fā)布了其Swift語言。

在戰(zhàn)爭中,勝利者寫歷史書;在科技中,贏的公司都在寫編程語言?;ヂ?lián)是建立在開發(fā)標(biāo)準(zhǔn)和代碼之上,但是社交網(wǎng)絡(luò)和云計(jì)算領(lǐng)域受企業(yè)巨頭控制,并且它們開始把自己獨(dú)一無二的印記烙在數(shù)字科技上——這是必然的,就像征服者威廉和他的諾曼人一樣,大量新的詞匯加入到英語中。他帶來許多新事物,如陪審制度,這些都影響著當(dāng)?shù)氐姆珊驼Z言的方式。

可以確定的是,新的語言給予程序員一些有用的支撐點(diǎn)。Google Go語言的構(gòu)建簡化了并發(fā)運(yùn)行代碼的工作,由于存在并行編程模式,因此這一語言也被設(shè)計(jì)用來解決多處理器的任務(wù)。對(duì)于流行的Web腳本語言,像PHP和JavaScript,Apple的Swift語言提供給iPhone程序員一些簡潔性和靈活性。每個(gè)語言都有它自己的標(biāo)志:Swift是一只風(fēng)格化的鳥,Go語言則是一只拗腳的地鼠。

Ken Thompson、 Rob Pike 和Robert Griesemer是Google的三位編碼大師,于2009年半開玩笑的提出了Go的構(gòu)思。像C++和Java這些廣泛使用的編程語言是遲鈍的,尤其是面對(duì)Google那種大規(guī)模的項(xiàng)目部署時(shí)。每次添加或改變一些東西時(shí)候,你都需要等待編譯器將代碼轉(zhuǎn)換為機(jī)器可讀的二進(jìn)制版本。

Rob Pike說:“這個(gè)等待過程要45分鐘,我認(rèn)為這是痛苦的。當(dāng)需要等待那么長時(shí)間時(shí),你有很多時(shí)間可以考慮,你需要怎么做可以更好?!?

設(shè)計(jì)編程語言在于權(quán)衡——對(duì)于程序員容易,對(duì)于機(jī)器最適合

創(chuàng)建運(yùn)行快的代碼要求程序員付出更多的努力。人們編寫運(yùn)行迅速的代碼需要花費(fèi)多少時(shí)間和精力呢?另一個(gè)主要權(quán)衡在于直接訪問機(jī)器時(shí)語言提供的內(nèi)存數(shù)量。不僅在這里,在其它地方也一樣,語言發(fā)明者必須選擇:知道他們可能會(huì)搞砸時(shí),你為程序員提供多少自由?你為他們提供多少措施來緩解他們的失誤?

語言設(shè)計(jì)的任務(wù)是莊嚴(yán)的、正式的、宏偉的、充滿了難題和矛盾。這里沒有正確的答案,只有不同的選擇,以適應(yīng)不斷變化的硬件、多變的用戶和挑剔的程序員。

Go語言的創(chuàng)造者有足夠的經(jīng)驗(yàn)去做這些選擇,Ken Thompson創(chuàng)建了Unix,他和他的同伴Pike(貝爾實(shí)驗(yàn)室老將)共同設(shè)計(jì)了字符編碼的風(fēng)格,被稱為UTF-8,現(xiàn)如今大多數(shù)Web會(huì)使用。所以他們知道小的決策也會(huì)有巨大的影響?,F(xiàn)在增加的每一條規(guī)則,可能就意味著在未來極多的按鍵需要程序員去操作。每一條規(guī)則的遺漏可能意味著無數(shù)的崩潰。

例如,編程語言通常使用分號(hào)來分隔語句,使用括號(hào)將相關(guān)語句組織在一起。典型的如“Hello,World”C語言程序:

main()  
{  
printf(“hello world”);  
}  

Go的創(chuàng)造者認(rèn)為括號(hào)是至關(guān)重要的。有些語言(尤其是Python)把這放到了一邊,允許程序員使用縮進(jìn)(空格)或“隱形的字符”來告訴人和機(jī)器代碼的位置。Go團(tuán)隊(duì)認(rèn)為這是一個(gè)“深刻的錯(cuò)誤”,括號(hào)意味著程序員可以明確不含糊的告訴計(jì)算機(jī)如何在很大一塊區(qū)域組合代碼。在一次與Sergey Brin會(huì)面上,Google的創(chuàng)始人提出Go的設(shè)計(jì)人員使用方括號(hào),而不是花括號(hào),節(jié)約開發(fā)者無數(shù)趟使用“Shift”鍵。

在2009年12月份,Go決定停止要求程序員以分號(hào)結(jié)束語句。分號(hào)用于解析器——把項(xiàng)目分解成塊(相關(guān)代碼組成一塊)的幕后工具,目前的FAQ解釋道:“我們想盡可能的消除它,從此當(dāng)你遞送你代碼到解析器的時(shí)候,機(jī)器將注入分號(hào)。”

Go清除分號(hào)減輕了程序員的眼睛疲勞,但是程序員需要更嚴(yán)格的部署花括號(hào),否則分號(hào)會(huì)注入到錯(cuò)誤的地方。

這些選擇并不是沒有爭議的,一個(gè)批評(píng)家在Pike的講座上抱怨道:“他們通過冗余的花括號(hào)破壞了語言?!闭Z言也可以被設(shè)計(jì)的很容易,僅僅使用空格行使花括號(hào)的角色來阻斷代碼的不同部分。Google的Andrew Gerrand 回應(yīng)道:“每天都有一定規(guī)模不可思議的倒霉事發(fā)生。意思是有人會(huì)偷偷的把一些看不見的符號(hào)放入代碼庫中,導(dǎo)致一個(gè)微妙的Bug。這在Google的Python程序中已經(jīng)發(fā)生了不止一次。”

然而對(duì)于那些在軟件論壇爭論細(xì)微差別的程序員來講,“任性的”語法也會(huì)使他們“醉了”。

和我們所說的語言不同,程序員稱之為自然語言。編程語言是為特別目的和用途精心編制的。Go,正如Pike解釋的那樣,它是由Google設(shè)計(jì)的用來解決Google問題。Google存在大的問題......我們需要一種語言,可以讓我們更容易的完成我們的工作——編寫服務(wù)軟件。

Google在云服務(wù)中運(yùn)行它自己的全球性超級(jí)計(jì)算機(jī),這種計(jì)算恰恰使Go能夠得到最佳化的使用。但是Google并沒有從銷售軟件中獲得一分錢。并且Go已經(jīng)是一種免費(fèi)的、開源的項(xiàng)目,這使得它迅速的進(jìn)入了其他裝備的技術(shù)庫。Redmonk咨詢公司的一名分析師說:“它成為云基礎(chǔ)設(shè)施的新興語言?!?

Go已經(jīng)逐漸的流行起來。例如,Dropbox已經(jīng)從Python轉(zhuǎn)移了大部分的后端代碼到Go。Automattic,一家運(yùn)營Wordpress.com的公司,也使用了Go,雖然WordPress本身一直使用PHP腳本語言。Automattic開發(fā)者Demitrious Kelly說:“這些天有十幾個(gè)新的框架和方法擺在那,你必須要問自己,它比我們擁有的要好嗎?但是這本身就是一個(gè)復(fù)雜的問題,要好到什么程度?它可以讓我們做到什么是我們以前做不到的事情?值得嗎?”Kelly稱,在眾多測(cè)試當(dāng)中Go的表現(xiàn)不錯(cuò),部分原因是該語言比較小,他說:“Go語言很容易在一個(gè)星期內(nèi)就上手?!?

鑒于Go的設(shè)計(jì)主要是針對(duì)Google特定的問題,語法的選擇,即分號(hào)和花括號(hào)。這個(gè)問題并不那么簡單,需要追求細(xì)節(jié),還要有熱情。愿意無視傳統(tǒng)的編程給這個(gè)世界帶來新的語言。可能最終推動(dòng)語言的采用的就是程序員認(rèn)真注意日常的編碼——程序員稱之為“痛點(diǎn)”

Swift的起源

每個(gè)編程政權(quán)都有這樣的痛點(diǎn),但是迅速崛起的iOS給了開發(fā)者多于常規(guī)的份額。直到今年夏天Swift語言的出現(xiàn)為止,如果你想為iOS寫一個(gè)程序,你必須使用Objective C語言。在80年代,Steve Jobs就已經(jīng)采用了Objective C,并且當(dāng)Steve Jobs重返A(chǔ)pple之后,該語言逐漸成為Mac OSX的主力工具。

現(xiàn)在開發(fā)者說一個(gè)語言也就透露了他的年紀(jì)。編寫Mac操作系統(tǒng)老將Andy Hertzfeld說:“當(dāng)看到Swift公告的時(shí)候我非常激動(dòng)。因?yàn)槲乙恢北梢昈bjective C,我喜歡其背后的原則,但是討厭其語法,我從來沒能夠真正的享受編程?!?

Apple將其下一代產(chǎn)品、編程語言項(xiàng)目委托給一位名叫Chris Lattner的計(jì)算機(jī)科學(xué)家,LLVM項(xiàng)目的主要發(fā)起人與作者之一。LLVM 是一個(gè)開源項(xiàng)目,其核心庫提供了與編譯器相關(guān)的支持,可以在不同的平臺(tái)上運(yùn)行(包括Apple和Google在內(nèi),都廣泛的使用它)。在2005年加入Apple后,Chris Lattner繼續(xù)LLVM項(xiàng)目以及相關(guān)的工作,隨后在大眾視野里消失了幾年,去年6月份,在Apple全球開發(fā)者大會(huì)上,其攜帶Swift出現(xiàn)在大家的面前。

Swift旨在成為“第一款工業(yè)級(jí)質(zhì)量的系統(tǒng)編程語言!”換句話說,Swift是有前途的,你將能夠不用費(fèi)力就可寫出運(yùn)行迅速的代碼。這贏得了大批iOS開發(fā)者和旁觀者的歡呼。 Hertzfeld說::“做得好,它緩解了每個(gè)人巨大的痛點(diǎn)。對(duì)于iOS開發(fā)者來說不去追求Swift的頂端是愚蠢的?!?

如果你“簽約”了Swift,意味著你購買了Apple的整個(gè)領(lǐng)域:你需要通過Apple開發(fā)和銷售你的程序;你的程序?qū)⑦\(yùn)行在Apple機(jī)器上;如果你想在其它地方運(yùn)行的話,你需要使用其它語言重新寫一遍;你的命運(yùn)將和Apple密不可分。

Hertzfeld說:“你必須提交到這個(gè)“有圍墻的花園”,所以他抵制了用Swift工作的誘惑。不過如果他們實(shí)現(xiàn)開源,或者對(duì)跨平臺(tái)有一點(diǎn)點(diǎn)興趣的話,我可能會(huì)接受Swift工作?!?

開源版本的Swift意味著開發(fā)者能夠找到一種方法快速的將程序移植到不同的平臺(tái),并且這也能保證在未來,當(dāng)Apple失去了Swift繼續(xù)下去的興趣,該語言還是有未來的。那些曾逗留在“有圍墻的花園”外圍的開發(fā)者往往非常關(guān)心這個(gè)問題。Apple對(duì)于開源并不完全過敏,雖然它似乎決心要抓住世界范圍內(nèi)iOS的控制權(quán)。在Swift公布不久后,LLVM項(xiàng)目里的開發(fā)者開始就Swift“隔絕自然”問題糾纏于Apple和Lattner,Lattner回應(yīng)說:

伙伴們,你的推測(cè)僅僅是——投機(jī)。我們還沒有討論過這個(gè),因?yàn)槲覀冇写罅康墓ぷ魅?yīng)對(duì)大量的反饋,并要在今秋發(fā)布1.0版本之前落實(shí)大量的事情(如訪問控制)。你可以想象我們當(dāng)中有很多人希望它開源,并成為LLVM的一部分,但是討論尚未發(fā)生,并且短時(shí)間內(nèi)也不會(huì)出現(xiàn)。

Swift的出現(xiàn)并沒有Go時(shí)間長,在任何情況下,其未來在Apple領(lǐng)域是安全的,如果Apple說Swift是十億iOS設(shè)備的未來,那么它就是。就像一位波特蘭獨(dú)立的iOS開發(fā)者David Wheeler一樣,人們會(huì)采用它,因?yàn)閺拈L遠(yuǎn)看來,他們別無選擇,同時(shí)它也有意義。Wheeler說Swift迅速的將他“拿下”了,他以為Apple將繼續(xù)修補(bǔ)Objective C,“我想知道它現(xiàn)在去哪了?”Wheeler說。

語言本能

大型計(jì)算機(jī)時(shí)代的主流語言有相似的起源:來自IBM的FORTRAN,以及COBOL在很大程度上是基于Grace Hopper的Flow-matic,而這個(gè)是為Remington Rand公司的Unicac創(chuàng)建的。在1990年,Sun創(chuàng)建了Java,2000年 Microsoft創(chuàng)建了C#。

事實(shí)上,大多數(shù)的語言是大型機(jī)構(gòu)、企業(yè)或?qū)W校的產(chǎn)物。

Hertzfeld說:“創(chuàng)建一種新的編程語言需要花費(fèi)大量的資源。這是一個(gè)長達(dá)十年的項(xiàng)目去讓新的語言完全用工具加工、建立和使用,小公司做不到這點(diǎn)?!?

盡管有困難,但是悲哀的是自1960年以來,計(jì)算機(jī)行業(yè)里有太多的語言存在重復(fù)的部分。今天的悲哀是無用的,程序員不太可能停止設(shè)計(jì)新的語言,或者同意去分享,因?yàn)槿缭缙陂_發(fā)者Alex Payne說的那樣:沒有激勵(lì),語言的歷史充斥著標(biāo)準(zhǔn)化的努力。這是非常錯(cuò)誤的,浪費(fèi)了大量的時(shí)間,卻沒有產(chǎn)出一個(gè)讓任何人都滿意的結(jié)果。

這么說并不意味著忽視Facebook開發(fā)的新語言Hack,盡管Hack是開放源代碼的,但是本質(zhì)上PHP語言的變體或擴(kuò)展。并沒有受到公司外部的人追捧。毫無疑問,F(xiàn)acebook希望看到變化,但是它并不是社交網(wǎng)絡(luò)積極推動(dòng)的東西。這些天對(duì)于Facebook的Hack的反應(yīng)就是“觀望”。

開發(fā)者指出,每一個(gè)新的語言開始作為一個(gè)擺脫不掉的種子存在于個(gè)人或小組的大腦中,這一直困擾著我。我們可以做的更高。無論如何,需要有耐心和努力去學(xué)習(xí)一個(gè)新的語言;開發(fā)者要仔細(xì)選擇。Payne說:“當(dāng)選用一個(gè)新的語言時(shí),我會(huì)跟隨其他人的東西,因?yàn)檫@些人和你一樣依賴于圖書館和文檔,我想你希望知道你是否進(jìn)入了一個(gè)正確的‘小鎮(zhèn)’?!?

有一點(diǎn)我們可以有信心的說,新語言是好的,它們簡化了程序員的生活;簡化了編程的工藝;它們?nèi)谌肓诵碌挠星巴镜乃枷?;它們贏得了包括公司內(nèi)外部開發(fā)者的尊重。

因?yàn)檫@些原因,霸權(quán)主義可能是一個(gè)錯(cuò)誤的歷史對(duì)照來制造新編程語言潮流。相反,我們討論的這些更像是稱為軟實(shí)力的外交政策類型:Go和Swift以特定方式體現(xiàn)它們公司的精髓。服務(wù)器VS個(gè)人設(shè)備;開放Web VS應(yīng)用商店;一個(gè)跨平臺(tái)的世界VS一個(gè)公司。所有區(qū)分編程語言的分歧——編譯或解釋?靜態(tài)VS動(dòng)態(tài)變量類型?內(nèi)存管理/垃圾回收?在今天這些可能都是很重要的。

換句話說,任何人擔(dān)心企業(yè)發(fā)展編程語言的真正原因可能不是“OMG,他們想要接管世界!”相反,他們擔(dān)心的原因是不管他們成長的多大,他們總會(huì)受到根源語言的約束。

關(guān)于編程語言,一旦它們占領(lǐng)程序員的“頭腦”,那么你永遠(yuǎn)不會(huì)知道它們最終會(huì)去哪里。在80年代創(chuàng)造Objective C的面向?qū)ο缶幊虗酆谜撸麄兛赡懿恢涝撜Z言在25年以后會(huì)變成一個(gè)巨大的全球生態(tài)系統(tǒng)移動(dòng)設(shè)備所必要的編程語言。當(dāng)Sun于1995年推出Java時(shí),每個(gè)人都認(rèn)為它將是一個(gè)用于構(gòu)建瀏覽器小程序的好工具,然而它的命運(yùn)走向了服務(wù)器端。同時(shí)發(fā)布的Javascript被廣泛的遺忘,在今天卻讓很多Web“移動(dòng)”。

對(duì)于開發(fā)者來說,選擇一個(gè)語言就像選擇一個(gè)國家的國籍,你不僅僅購買語法和語義,你也購買了經(jīng)濟(jì)和文化,以及你怎樣獲得生計(jì)和力量的規(guī)則。就像他們常說的:為了避免一個(gè)“死”語言控制了世界,購買需要謹(jǐn)慎。

 原文鏈接:Medium 

您還未登錄,請(qǐng)先登錄

熱門帖子

最新帖子

?