星期五, 1月 22, 2010

Google 的新語言:Go

早晨起了個早,有些時間,想到最近看過 Google 推出了一個新語言叫做 Go,於是上網翻翻資料了解到底是怎麼一回事。

我對於這個語言取名叫做 Go 有些不喜歡。在英文上 go 可以做動詞(行動、走去、購得、運作...),是一個意義相當多、使用頻繁的基礎字。

很少人知道 go 可以做名詞。我在高中的時候交了一篇英文作文,其中有一句 "I like to play go.",意思是說我喜歡下圍棋。批改下來時老師在旁加註 “英文需徹底加強,一個句子中不可以同時用二個動詞“。後來去找了老師,告訴他我所知道的 go 的定義,他則回答我他沒聽過、字典也查不到的定義都不算定義,並要我認真學習,不要胡思亂想、天馬行空。早知道我就寫 wei-chi 這個常用的音譯就好了。

為什麼不喜歡這個名稱呢?眾所皆知在網路時代,搜尋是一切知識探索的起點。早期我們要查一些日常認知的事物是很容易找到相關的資料的。例如十年前你搜尋 blowfish (河豚)時,可以找到很多關於河豚的網路文章;到了現在搜尋 blowfish,在第一頁呈現的是關於加密的技術,只有在最後面才出現一個圖片搜尋結果(河豚)。另一個例子是當你搜尋 giraffe 時,在第一頁上你首先看到是利用 giraffe 作為商業名詞的網路連結。網路世界十足表達了現在的商業世界。

目前以 google 搜尋 go 在第一頁結果還可以看到圍棋的資訊,等 go 程式語言熱門之後,我擔心要真的查到圍棋資訊可能要在數頁之後了。

為何要開發 go 這個新語言呢?Rob Pikegoogle talk 提到了下列幾點:
  1. 已經有十年市場上沒有出現新的主流語言
  2. 越來越混亂的函式庫及錯綜複雜的函式庫關係
  3. 網路的崛起
  4. 主機 cluster 的應用
  5. 多核心 CPU 成為主流
要解決這些問題,光是建立新的函式庫並沒有幫助,在現有的程式語言加任何東西是走錯路了,必需重新思考程式語言該有的本質功能。(好像打到了 Intel。Intel 為了提升多核 CPU 應用,在現有的程式語言上加了很多東西。)

看起來 google 的野心不小,想要建立一個新的主流語言,並重建系統開發工具的架構。看了一下 go 開發團隊成員來歷,我覺得這是很有可能成功的:
  • Ken Thompson: 發明了 B 程式語言。後來跟其共事的 Dennis Ritchie 將之改成為現在所熟知的 C 程式語言。
  • Rob Pike: 這次發表 Go language 的代言人。Bell 實驗室 unix 團隊主要人物,這次開發 Go language 的作業系統 Infenon 也是由其開發出來的。另外,他與 Thompson 共同設計了 UTF-8 字碼。
  • Robert Griesemer: 設計 Chrome 的 Javascript 引擎 V8。
  • Ian Taylor: gcc 編譯器的改善者。
另外在 Go programming language 的 FAQ 中提到,go 團隊認為,這非常值得他們去開發一個新語言,能夠 concurrent (很難翻成中文,先進請指正), 記憶體垃圾收集, 並且編譯速度又更快。其結果是:
* It is possible to compile a large Go program in a few seconds on a single computer.
* Go provides a model for software construction that makes dependency analysis easy and avoids much of the overhead of C-style include files and libraries.
* Go's type system has no hierarchy, so no time is spent defining the relationships between types. Also, although Go has static types the language attempts to make types feel lighter weight than in typical OO languages.
* Go is fully garbage-collected and provides fundamental support for concurrent execution and communication.
* By its design, Go proposes an approach for the construction of system software on multicore machines.

目前這個語言算是還在開發中,但也已有實作的產品(go 網站即是用 go 語言建置的)。據 Rob Pike 估計,學習 go 程式語言約與學習 java 相當,因此在 go 的文件中也有提到這並非是一個給基礎程式設計師使用的程式語言。

如果對此語言有興趣,可以到 Go programming language 去下載嚐試看看。有 C, C++, Java, Python, C#, Object-C 基礎的人,我覺得應該不會難學。

(原本不想在 Blog 上談技能/專長上的主題,看來是本性難移啊!)



Powered by ScribeFire.



沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。