<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## Go語言起源 編程語言的演化跟生物物種的演化類似,一個成功的編程語言的后代一般都會繼承它們祖先的優點;當然有時多種語言雜合也可能會產生令人驚訝的特性;還有一些激進的新特性可能并沒有先例。通過觀察這些影響,我們可以學到為什么一門語言是這樣子的,它已經適應了怎樣的環境。 下圖展示了有哪些早期的編程語言對Go語言的設計產生了重要影響。 ![](https://box.kancloud.cn/2016-01-10_5691fbe222a12.png) 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語言的另一支祖先,帶來了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語言中管道是動態創建的,屬于第一類值, 可以保存到變量中。 在Plan9操作系統中,這些優秀的想法被吸收到了一個叫[Alef][Alef]的編程語言中。Alef試圖將Newsqueak語言改造為系統編程語言,但是因為缺少垃圾回收機制而導致并發編程很痛苦。(譯注:在Alef之后還有一個叫[Limbo][Limbo]的編程語言,Go語言從其中借鑒了很多特性。 具體請參考Pike的講稿:http://talks.golang.org/2012/concurrency.slide#9 ) Go語言的其他的一些特性零散地來自于其他一些編程語言;比如iota語法是從[APL][APL]語言借鑒,詞法作用域與嵌套函數來自于[Scheme][Scheme]語言(和其他很多語言)。當然,我們也可以從Go中發現很多創新的設計。比如Go語言的切片為動態數組提供了有效的隨機存取的性能,這可能會讓人聯想到鏈表的底層的共享機制。還有Go語言新發明的defer語句。 {% include "../links.md" %}
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看