pull/1/head
chai2010 2016-01-05 16:26:22 +08:00
parent 666f57bed5
commit 786a1c9396
4 changed files with 7 additions and 7 deletions

View File

@ -10,9 +10,9 @@ Go語言有時候被描述爲“C類似語言”或者是“21世紀的C語
但是在Go語言的家族樹中還有其它的祖先。其中一個有影響力的分支來自[Niklaus Wirth](https://en.wikipedia.org/wiki/Niklaus_Wirth)所設計的[Pascal](https://en.wikipedia.org/wiki/Pascal_(programming_language))語言。然後[Modula-2](https://en.wikipedia.org/wiki/Modula-2)語言激發了包的概念。然後[Oberon](https://en.wikipedia.org/wiki/Oberon_(programming_language))語言摒棄了模塊接口文件和模塊實現文件之間的區别。第二代的[Oberon-2](https://en.wikipedia.org/wiki/Oberon-2_(programming_language))語言直接影響了包的導入和聲明的語法,還有[Oberon](https://en.wikipedia.org/wiki/Oberon_(programming_language))語言的面向對象特性所提供的方法的聲明語法等。
Go語言的另一支祖先帶來了Go語言區别其他語言的重要特性靈感來自於貝爾實驗室的[Tony Hoare](https://en.wikipedia.org/wiki/Tony_Hoare)於1978年發表的鮮爲外界所知的關於併發研究的基礎文獻 *順序通信進程* [*communicating sequential processes*](https://en.wikipedia.org/wiki/Communicating_sequential_processes) 縮寫爲CSP。在CSP中程序是一組中間沒有共享狀態的平行運行的處理過程它們之間使用管道進行通信和控製同步。不過[Tony Hoare](https://en.wikipedia.org/wiki/Tony_Hoare)的CSP隻是一個用於描述併發性基本概念的描述語言併不是一個可以編寫可執行程序的通用編程語言。
Go語言的另一支祖先帶來了Go語言區别其他語言的重要特性靈感來自於貝爾實驗室的[Tony Hoare](https://en.wikipedia.org/wiki/Tony_Hoare)於1978年發表的鮮爲外界所知的關於併發研究的基礎文獻 *順序通信進程* *[communicating sequential processes](https://en.wikipedia.org/wiki/Communicating_sequential_processes)* ,縮寫爲[CSP](https://en.wikipedia.org/wiki/Communicating_sequential_processes))。在[CSP](https://en.wikipedia.org/wiki/Communicating_sequential_processes)中,程序是一組中間沒有共享狀態的平行運行的處理過程,它們之間使用管道進行通信和控製同步。不過[Tony Hoare](https://en.wikipedia.org/wiki/Tony_Hoare)的[CSP](https://en.wikipedia.org/wiki/Communicating_sequential_processes)隻是一個用於描述併發性基本概念的描述語言,併不是一個可以編寫可執行程序的通用編程語言。
接下來Rob Pike和其他人開始不斷嚐試將CSP引入實際的編程語言中。他們第一次嚐試引入CSP特性的編程語言叫[Squeak](http://doc.cat-v.org/bell_labs/squeak/)(老鼠間交流的語言),是一個提供鼠標和鍵盤事件處理的編程語言,它的管道是靜態創建的。然後是改進版的[Newsqueak](http://doc.cat-v.org/bell_labs/squeak/)語言提供了類似C語言語句和表達式的語法和類似Pascal語言的推導語法。Newsqueak是一個帶垃圾迴收的純函數式語言它再次針對鍵盤、鼠標和窗口事件管理。但是在Newsqueak語言中管道是動態創建的屬於第一類值, 可以保存到變量中。
接下來Rob Pike和其他人開始不斷嚐試將[CSP](https://en.wikipedia.org/wiki/Communicating_sequential_processes)引入實際的編程語言中。他們第一次嚐試引入[CSP](https://en.wikipedia.org/wiki/Communicating_sequential_processes)特性的編程語言叫[Squeak](http://doc.cat-v.org/bell_labs/squeak/)(老鼠間交流的語言),是一個提供鼠標和鍵盤事件處理的編程語言,它的管道是靜態創建的。然後是改進版的[Newsqueak](http://doc.cat-v.org/bell_labs/squeak/)語言提供了類似C語言語句和表達式的語法和類似[Pascal](https://en.wikipedia.org/wiki/Pascal_(programming_language))語言的推導語法。Newsqueak是一個帶垃圾迴收的純函數式語言它再次針對鍵盤、鼠標和窗口事件管理。但是在Newsqueak語言中管道是動態創建的屬於第一類值, 可以保存到變量中。
在Plan9操作繫統中這些優秀的想法被吸收到了一個叫[Alef](http://doc.cat-v.org/plan_9/2nd_edition/papers/alef/)的編程語言中。Alef試圖將Newsqueak語言改造爲繫統編程語言但是因爲缺少垃圾迴收機製而導致併發編程很痛苦。譯註在Aelf之後還有一個叫[Limbo](http://doc.cat-v.org/inferno/4th_edition/limbo_language/)的編程語言Go語言從其中借鑒了很多特性。 具體請參考Pike的講稿http://talks.golang.org/2012/concurrency.slide#9

View File

@ -2,9 +2,9 @@
所有的編程語言都反映了語言設計者對編程哲學的反思通常包括之前的語言所暴露的一些不足地方的改進。Go項目是在Google公司維護超級複雜的幾個軟件繫統遇到的一些問題的反思但是這類問題絶不是Google公司所特有的
正如Rob Pike所説“軟件的複雜性是乘法級相關的”通過增加一個部分的複雜性來脩複問題通常將慢慢地增加其他部分的複雜性。通過增加功能和選項和配置是脩複問題的最快的途徑但是這很容易讓人忘記簡潔的內涵卽使從長遠來看簡潔依然是好軟件的關鍵因素。
正如[Rob Pike](http://genius.cat-v.org/rob-pike/)所説,“軟件的複雜性是乘法級相關的”,通過增加一個部分的複雜性來脩複問題通常將慢慢地增加其他部分的複雜性。通過增加功能和選項和配置是脩複問題的最快的途徑,但是這很容易讓人忘記簡潔的內涵,卽使從長遠來看,簡潔依然是好軟件的關鍵因素。
簡潔的設計需要在工作開始的時候舍棄不必要的想法併且在軟件的生命週期內嚴格區别好的改變或壞的改變。通過足夠的努力一個好的改變可以在不破壞原有完整概念的前提下保持自適應正如Fred Brooks所説的“概念完整性”而一個壞的改變則不能達到這個效果它們僅僅是通過膚淺的和簡單的妥協來破壞原有設計的一致性。隻有通過簡潔的設計才能讓一個繫統保持穩定、安全和持續的進化。
簡潔的設計需要在工作開始的時候舍棄不必要的想法,併且在軟件的生命週期內嚴格區别好的改變或壞的改變。通過足夠的努力,一個好的改變可以在不破壞原有完整概念的前提下保持自適應,正如[Fred Brooks](http://www.cs.unc.edu/~brooks/)所説的“概念完整性”;而一個壞的改變則不能達到這個效果,它們僅僅是通過膚淺的和簡單的妥協來破壞原有設計的一致性。隻有通過簡潔的設計,才能讓一個繫統保持穩定、安全和持續的進化。
Go項目包括編程語言本身附帶了相關的工具和標準庫最後但併非代表不重要的關於簡潔編程哲學的宣言。就事後諸葛的角度來看Go語言的這些地方都做的還不錯擁有自動垃圾迴收、一個包繫統、函數作爲一等公民、詞法作用域、繫統調用接口、隻讀的UTF8字符串等。但是Go語言本身隻有很少的特性也不太可能添加太多的特性。例如它沒有隱式的數值轉換沒有構造函數和析構函數沒有運算符重載沒有默認參數也沒有繼承沒有泛型沒有異常沒有宏沒有函數脩飾更沒有線程局部存儲。但是語言本身是成熟和穩定的而且承諾保證向後兼容用之前的Go語言編寫程序可以用新版本的Go語言編譯器和標準庫直接構建而不需要脩改代碼。

View File

@ -6,9 +6,9 @@
我們的來自Addison-Wesley的編輯Greg Doench收到了很多幫助從最開始就得到了越來越多的幫助。來自AW生産糰隊的John Fuller、Dayna Isley、Julie Nahil、Chuti Prasertsith到Barbara Wood感謝你們的熱心幫助。
Alan Donovan特别感謝Sameer Ajmani、Chris Demetriou、Walt Drummond和Google公司的Reid Tatge允許他有充裕的時間去寫本書感謝Stephen Donovan的建議和始終如一的鼓勵以及他的妻子Leila Kazemi併沒有讓他爲了家庭瑣事而分心併熱情堅定地支持這個項目。
[Alan Donovan](https://github.com/adonovan)特别感謝Sameer Ajmani、Chris Demetriou、Walt Drummond和Google公司的Reid Tatge允許他有充裕的時間去寫本書感謝Stephen Donovan的建議和始終如一的鼓勵以及他的妻子Leila Kazemi併沒有讓他爲了家庭瑣事而分心併熱情堅定地支持這個項目。
Brian Kernighan特别感謝朋友和同事對他的耐心和寬容讓他慢慢地梳理本書的寫作思路。同時感謝他的妻子Meg和其他很多朋友對他寫作事業的支持。
[Brian Kernighan](http://www.cs.princeton.edu/~bwk/)特别感謝朋友和同事對他的耐心和寬容讓他慢慢地梳理本書的寫作思路。同時感謝他的妻子Meg和其他很多朋友對他寫作事業的支持。
2015年 10月 於 紐約

View File

@ -36,7 +36,7 @@ Go語言尤其適合編寫網絡服務相關基礎設施同時也適合開發
因爲Go編寫的程序通常比腳本語言運行的更快也更安全而且很少會發生意外的類型錯誤。
Go語言還是一個開源的項目可以免費獲編譯器、庫、配套工具的源代碼。
Go語言的貢獻者來自一個活躍的全球社區。Go語言可以運行在類UNIX繫統——
Go語言的貢獻者來自一個活躍的全球社區。Go語言可以運行在類[UNIX](http://doc.cat-v.org/unix/)繫統——
比如[Linux](http://www.linux.org/)、[FreeBSD](https://www.freebsd.org/)、[OpenBSD](http://www.openbsd.org/)、[Mac OSX](http://www.apple.com/cn/osx/)——和[Plan9](http://plan9.bell-labs.com/plan9/)繫統和[Microsoft Windows](https://www.microsoft.com/zh-cn/windows/)操作繫統之上。
Go語言編寫的程序無需脩改就可以運行在上面這些環境。