首頁»編程語言»新編程語言選擇需謹慎

新編程語言選擇需謹慎

來源:csdn 發布時間:2014-12-19 閱讀次數:

  Google于2009年第一次提出了Go的構思,Facebook在去年春天引入了Hack,隨后不久Apple也發布了其Swift語言。

  在戰爭中,勝利者寫歷史書;在科技中,贏的公司都在寫編程語言。互聯是建立在開發標準和代碼之上,但是社交網絡和云計算領域受企業巨頭控制,并且它們開始把自己獨一無二的印記烙在數字科技上——這是必然的,就像征服者威廉和他的諾曼人一樣,大量新的詞匯加入到英語中。他帶來許多新事物,如陪審制度,這些都影響著當地的法律和語言的方式。

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

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

  Rob Pike說:“這個等待過程要45分鐘,我認為這是痛苦的。當需要等待那么長時間時,你有很多時間可以考慮,你需要怎么做可以更好。”

  設計編程語言在于權衡——對于程序員容易,對于機器最適合

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

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

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

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

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

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

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

    Go清除分號減輕了程序員的眼睛疲勞,但是程序員需要更嚴格的部署花括號,否則分號會注入到錯誤的地方。

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

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

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

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

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

  鑒于Go的設計主要是針對Google特定的問題,語法的選擇,即分號和花括號。這個問題并不那么簡單,需要追求細節,還要有熱情。愿意無視傳統的編程給這個世界帶來新的語言。可能最終推動語言的采用的就是程序員認真注意日常的編碼——程序員稱之為“痛點”

  Swift的起源

  每個編程政權都有這樣的痛點,但是迅速崛起的iOS給了開發者多于常規的份額。直到今年夏天Swift語言的出現為止,如果你想為iOS寫一個程序,你必須使用Objective C語言。在80年代,Steve Jobs就已經采用了Objective C,并且當Steve Jobs重返Apple之后,該語言逐漸成為Mac OSX的主力工具。

  現在開發者說一個語言也就透露了他的年紀。編寫Mac操作系統老將Andy Hertzfeld說:“當看到Swift公告的時候我非常激動。因為我一直鄙視Objective C,我喜歡其背后的原則,但是討厭其語法,我從來沒能夠真正的享受編程。”

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

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

  如果你“簽約”了Swift,意味著你購買了Apple的整個領域:你需要通過Apple開發和銷售你的程序;你的程序將運行在Apple機器上;如果你想在其它地方運行的話,你需要使用其它語言重新寫一遍;你的命運將和Apple密不可分。

  Hertzfeld說:“你必須提交到這個“有圍墻的花園”,所以他抵制了用Swift工作的誘惑。不過如果他們實現開源,或者對跨平臺有一點點興趣的話,我可能會接受Swift工作。”

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

伙伴們,你的推測僅僅是——投機。我們還沒有討論過這個,因為我們有大量的工作去應對大量的反饋,并要在今秋發布1.0版本之前落實大量的事情(如訪問控制)。你可以想象我們當中有很多人希望它開源,并成為LLVM的一部分,但是討論尚未發生,并且短時間內也不會出現。

  Swift的出現并沒有Go時間長,在任何情況下,其未來在Apple領域是安全的,如果Apple說Swift是十億iOS設備的未來,那么它就是。就像一位波特蘭獨立的iOS開發者David Wheeler一樣,人們會采用它,因為從長遠看來,他們別無選擇,同時它也有意義。Wheeler說Swift迅速的將他“拿下”了,他以為Apple將繼續修補Objective C,“我想知道它現在去哪了?”Wheeler說。

  語言本能

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

  事實上,大多數的語言是大型機構、企業或學校的產物。

  Hertzfeld說:“創建一種新的編程語言需要花費大量的資源。這是一個長達十年的項目去讓新的語言完全用工具加工、建立和使用,小公司做不到這點。”

  盡管有困難,但是悲哀的是自1960年以來,計算機行業里有太多的語言存在重復的部分。今天的悲哀是無用的,程序員不太可能停止設計新的語言,或者同意去分享,因為如早期開發者Alex Payne說的那樣:沒有激勵,語言的歷史充斥著標準化的努力。這是非常錯誤的,浪費了大量的時間,卻沒有產出一個讓任何人都滿意的結果。

  這么說并不意味著忽視Facebook開發的新語言Hack,盡管Hack是開放源代碼的,但是本質上PHP語言的變體或擴展。并沒有受到公司外部的人追捧。毫無疑問,Facebook希望看到變化,但是它并不是社交網絡積極推動的東西。這些天對于Facebook的Hack的反應就是“觀望”。

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

  有一點我們可以有信心的說,新語言是好的,它們簡化了程序員的生活;簡化了編程的工藝;它們融入了新的有前途的思想;它們贏得了包括公司內外部開發者的尊重。

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

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

  關于編程語言,一旦它們占領程序員的“頭腦”,那么你永遠不會知道它們最終會去哪里。在80年代創造Objective C的面向對象編程愛好者,他們可能不知道該語言在25年以后會變成一個巨大的全球生態系統移動設備所必要的編程語言。當Sun于1995年推出Java時,每個人都認為它將是一個用于構建瀏覽器小程序的好工具,然而它的命運走向了服務器端。同時發布的Javascript被廣泛的遺忘,在今天卻讓很多Web“移動”。

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

  原文鏈接:medium

QQ群:WEB開發者官方群(515171538),驗證消息:10000
微信群:加小編微信 849023636 邀請您加入,驗證消息:10000
提示:更多精彩內容關注微信公眾號:全棧開發者中心(fsder-com)
網友評論(共1條評論) 正在載入評論......
理智評論文明上網,拒絕惡意謾罵 發表評論 / 共1條評論
登錄會員中心
大神带着买彩票 永丰县| 浠水县| 南靖县| 吉林省| 江孜县| 淳化县| 嵩明县| 连山| 鹿泉市| 苏尼特右旗| 友谊县| 青州市| 阳高县| 星子县| 舒城县| 九台市| 哈密市| 高淳县| 沿河| 开封县| 肥西县| 屏东县| 普兰店市| 曲松县| 虎林市| 武安市| 鄂伦春自治旗| 高州市| 长乐市| 且末县| 藁城市| 长顺县| 攀枝花市| 余庆县| 肃北| 文登市| 务川| 星子县|