回到简体

This commit is contained in:
chai2010
2016-02-15 11:06:34 +08:00
parent 9e878f9944
commit 2b37b23285
177 changed files with 2354 additions and 2354 deletions

View File

@@ -1,21 +1,21 @@
## Go言起源
## Go言起源
編程語言的演化就像生物物的演化似,一成功的編程語言的代一般都會繼承它祖先的優點;當然有時多種語言雜合也可能會産生令人驚訝的特性;有一些激的新特性可能併沒有先例。我可以通過觀察編程語言和硬件境是如何相互促、相互影的演化程而到很多。
编程语言的演化就像生物物的演化似,一成功的编程语言的代一般都会继承它祖先的优点;当然有时多种语言杂合也可能会产生令人惊讶的特性;有一些激的新特性可能并没有先例。我可以通过观察编程语言和硬件境是如何相互促、相互影的演化程而到很多。
展示了有哪些早期的編程語言對Go言的設計産生了重要影
展示了有哪些早期的编程语言对Go言的设计产生了重要影
![](../images/ch0-01.png)
Go言有候被描述“C類似語言”或者是“21世的C言”。Go從C語言繼承了相似的表達式語法、控製流結構、基礎數據類型、調用參數傳值、指等很多思想,有C言一直所看中的編譯後機器碼的運行效率以及和有操作繫統的無縫適配。
Go言有候被描述“C类似语言”或者是“21世的C言”。Go从C语言继承了相似的表达式语法、控制流结构、基础数据类型、调用参数传值、指等很多思想,有C言一直所看中的编译后机器码的运行效率以及和有操作系统的无缝适配。
但是在Go言的家族樹中還有其它的祖先。其中一有影力的分支自[Niklaus Wirth](https://en.wikipedia.org/wiki/Niklaus_Wirth)所設計的[Pascal][Pascal]言。然[Modula-2][Modula-2]言激了包的概念。然[Oberon][Oberon]言摒了模接口文件和模塊實現文件之間的區别。第二代的[Oberon-2][Oberon-2]言直接影了包的入和明的法,有[Oberon][Oberon]言的面向象特性所提供的方法的聲明語法等。
但是在Go言的家族树中还有其它的祖先。其中一有影力的分支自[Niklaus Wirth](https://en.wikipedia.org/wiki/Niklaus_Wirth)所设计的[Pascal][Pascal]言。然[Modula-2][Modula-2]言激了包的概念。然[Oberon][Oberon]言摒了模接口文件和模块实现文件之间的区别。第二代的[Oberon-2][Oberon-2]言直接影了包的入和明的法,有[Oberon][Oberon]言的面向象特性所提供的方法的声明语法等。
Go言的另一支祖先,帶來了Go語言區别其他言的重要特性,靈感來自於貝爾實驗室的[Tony Hoare](https://en.wikipedia.org/wiki/Tony_Hoare)1978年表的鮮爲外界所知的關於併發研究的基礎文獻 *序通信程* *[communicating sequential processes][CSP]* 縮寫爲[CSP][CSP]。在[CSP][CSP]中,程序是一組中間沒有共享狀態的平行行的處理過程,它們之間使用管道行通信和控同步。不[Tony Hoare](https://en.wikipedia.org/wiki/Tony_Hoare)的[CSP][CSP]是一個用於描述併發性基本概念的描述言,不是一可以編寫可執行程序的通用編程語言。
Go言的另一支祖先,带来了Go语言区别其他言的重要特性,灵感来自于贝尔实验室的[Tony Hoare](https://en.wikipedia.org/wiki/Tony_Hoare)1978年表的鲜为外界所知的关于并发研究的基础文献 *序通信程* *[communicating sequential processes][CSP]* 缩写为[CSP][CSP]。在[CSP][CSP]中,程序是一组中间没有共享状态的平行行的处理过程,它们之间使用管道行通信和控同步。不[Tony Hoare](https://en.wikipedia.org/wiki/Tony_Hoare)的[CSP][CSP]是一个用于描述并发性基本概念的描述言,不是一可以编写可执行程序的通用编程语言。
接下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][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][Pascal]言的推导语法。Newsqueak是一个带垃圾收的纯函数式语言,它再次针对键盘、鼠和窗口事件管理。但是在Newsqueak言中管道是动态创建的,属于第一值, 可以保存到量中。
在Plan9操作繫統中,這些優秀的想法被吸收到了一叫[Alef][Alef]的編程語言中。Alef試圖將Newsqueak言改造爲繫統編程語言,但是因缺少垃圾迴收機製而導致併發編程很痛苦。(譯註在Aelf之後還有一叫[Limbo][Limbo]的編程語Go語言從其中借了很多特性。 具體請參考Pike的稿http://talks.golang.org/2012/concurrency.slide#9
在Plan9操作系统中,这些优秀的想法被吸收到了一叫[Alef][Alef]的编程语言中。Alef试图将Newsqueak言改造为系统编程语言,但是因缺少垃圾回收机制而导致并发编程很痛苦。(译注在Aelf之后还有一叫[Limbo][Limbo]的编程语Go语言从其中借了很多特性。 具体请参考Pike的稿http://talks.golang.org/2012/concurrency.slide#9
Go言的其他的一些特性零散地來自於其他一些編程語比如iota法是[APL][APL]言借鑒,詞法作用域嵌套函數來自於[Scheme][Scheme]言(和其他很多言)。然,我也可以Go中發現很多新的設計。比如Go言的切片爲動態數組提供了有效的隨機存取的性能,可能會讓人聯想到表的底的共享機製。還有Go言新明的defer句。
Go言的其他的一些特性零散地来自于其他一些编程语比如iota法是[APL][APL]言借鉴,词法作用域嵌套函数来自于[Scheme][Scheme]言(和其他很多言)。然,我也可以Go中发现很多新的设计。比如Go言的切片为动态数组提供了有效的随机存取的性能,可能会让人联想到表的底的共享机制。还有Go言新明的defer句。
{% include "../links.md" %}