為什麼需要一個新的語言
硬體限制 - 摩爾定律正在失效
Intel於2004年發佈了第一塊具有3.0GHz時脈速度的Pentium4處理器。目前最新一代Intel Core I9的時脈速度約為3.5-4.0GHz。可以見得在過去的十年裡,CPU的處理能力沒有太大的發展。
从上图中可以看出,在过去十年间单线程的性能和处理器的速率保持稳定。倘若你把增加晶体管的数量作为解决方案,那么你错了。 因为在较小的尺度上开始出现一些量子特性(如:隧穿效应),这将导致放置更多晶体管实际上花费更多(为什么)并且增加晶体管的性价比在下降。
為了解決上述的問題,制造商開始往橫向發展,替處理器添加越來越多的核心,現在你可以找到四核和八核CPU的產品。
我們同時引進了超線程、向處理器添加更多緩存以提高性能,但是此類的解決方向也存在其局限性,我們並不能通過增加更昌的緩存到處理器來提高其性能,因為緩存本身的物理特性限制:緩存越多,它就越慢。而增加處理器的核心同時也有一些問題,首先是核心也不可能無限縮小,接著是多核處理器雖然可以同時執行多線程,但也引發了處理器的平行運算問題。
如果我們不能依賴硬體去發展,剩下的出路就是從更高效的軟體來作為提升性能的落腳點了。但很遺憾,現代的計算機語言的效率普遍都不高。
「The modern processor is like a modified car with a hair-trigger, quarter-mile acceleration that excels. Unfortunately, modern programming languages are like the F1 circuit in monte carlo。」 — David Ungar
聊聊程式語言
對程式語言來說,並發程度和系統效率在多數情況下無法兼得,要嘛運行效率高,但低效的並發和編釋,如C++,要麼執行低效,但能有效的編釋,如.NET、Java.
go出现之前,无论汇编语言、还是动态脚本语言,在执行效率和开发效率上都不能兼备。 開發過程中相較於 Java 和 C++呆滯的編譯速度,Go 的快速編譯時間是一個主要的效率優勢。Go擁有接近C的運行效率和接近PHP的開發效率。
運行效率 execution speed: C/C++ > Java > PHP
開發效率 developing efficiency: PHP > Java > C/C++
![https://miro.medium.com/max/2020/1_20V0btS4zHUCrX9BPnGhA.png](https://miro.medium.com/max/2020/1_20V0btS4zHUCrX9BPnGhA.png)
Go的設計為了解決當時Googld開發遇到的各種問題,包括:大量的C++代碼,同時又引入了Java和Python,成千上萬的工程師,行數以萬計的代碼,分布式的編釋系統,還有數百萬台的伺服器。
Go捨棄了現在OOP類型語言的很多特性,為了讓程式開發更加簡潔與高效。
- 無類的存在。Go只有Struct。无类。所有事物都被划分到包中。Go 中只有结构体,它取代了类。
- 不支持繼承,這使得代碼易於追蹤與修改。
- 沒有構造方法
- 沒有注解
- 沒有泛型
- 沒有異常
至此介紹完Golang的發展歷史,與Go的語言特性,大家應該對於Golang的設計理念,解決方案的目標都有清楚的概念了。 明天開始會進入Golang學習的正題,從環境建置開始。