這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
今天接觸到了Go語言, 請原諒我現在才接觸到Go, 之前聽雲風大神說起過, 但我總把它和易語言混淆了, 導致我沒有更早的瞭解到這個語言.
就在一年多前, 那個時候的我還是對C++無比的熱愛, 認為c++是做後台伺服器的不二選擇. 那個時候總認為c 跟 c++是一家的, 所以我總愛標榜自己為c/c++程式員.
C++雖然完全相容了C(這是優點, 也是C++致命的缺陷), 但是C++跟C的設計思想可以說是很不一樣的, 具體說起來可以參見雲風關於C++和C的一些討論.
對C++的認識隨著自己做聚能推項目不斷加深, 我瞭解幾乎所有c++的特性, 但說實在的, 我能用上的特性真的不多. 我也試圖研究那些神一般的模板元編程, 但我實在是研究不下去, 因為我覺得這麼複雜的的實現, 只是為了那麼一點點的效率, 值得嗎? 除了作者自己, 我估計沒幾個人能看懂他寫出來的模板代碼. 這對於維護簡直就是噩夢. boost, 是模板元的深度中毒者的傑作. c++的類庫支援還是太少了, 所以當時我不得不藉助於boost庫來達到不重複造輪子的目的. 正是因為模板元, 開始讓我意識到, 是不是c++的設計真的過於複雜了. 我曾生理期待, 真的非常期待, C++能有一些改變, 至少不會像現在這樣複雜. 而c++ 11的出台讓我對於c++委員會更加的失望.
雲風曾經也是個熱愛c++的人, 後來他義無反顧的迴歸到了c的懷抱, 因為他認為c++的語言套件袱太大了, 他還引用了linus炮轟c++的那篇文章來抒發自己內心對c++的失望. 我幾年前就看過Linus大神的那篇著名的文章. 當時我不以為然, 我認為Linus個人偏見大過於理性分析, 雖然很多地方很有道理, 比如說記憶體管理跟字串處理不是程式的關鍵, 設計才是關鍵. 當時我認為, 如果不用c++, 還有其他什麼選擇呢? 動態語言如python, lua, ruby, 我們就不加入討論了, 因為動態語言跟靜態語言是有質的不同的. JAVA可以算是一個候選者吧, 但是我沒有學習JAVA, 雲風也沒有, 我相信很多C++程式員也會和我一樣, 很難轉向JAVA.
說說自己為什麼沒有選擇學習JAVA. 其實這帶有個人的偏見跟習慣. 就如同當年雲風對於JAVA嗜之以鼻一樣, 我對於這個連記憶體管理也需要由GC來幫忙的程式設計語言一直提不起太大的興趣, 當時認為記憶體就應該由程式員完全控制, 怎麼能讓GC摻和呢..而且java的安裝包(這是我最不能接受的)有100多M..而且JAVA畢竟太像C++了. 我覺得沒有太大的必要去學習一門跟C++功能類似的語言了. 所以...我就在c++的道路上越走越遠...
後來接觸的python, 被它給力的類庫秒殺, 實在是難以讓人拒絕使用. 所以一般的小東西我都是直接用python搞定的. 但是對於一些大型的項目, 我第一個想到的就是C++
其實我對c++太過複雜是有感覺的, 只是, 我又不想去學習一門類似JAVA那樣的解釋性靜態語言....
我一直在尋找, 一直在尋找, C++的替代品.
這個替代品我曾經以為是lua..但是看完lua, 還是沒有滿足我對程式設計語言的想象.
我心目中的程式設計語言應該是這樣的.
屬於C家族. 可以去除一些C++中過於複雜的特性, 但具有C++和C的優點(效能, 靜態語言), 開源, 可以有更加好的名字空間管理(我實在受不了namespace), 有一個不錯的GC(自從玩了python, 我就對於gc好感大增.), 支援協程, 而不是多線程(我對多線程深惡痛絕).
嗯, 可能大家都看出來了, GO語言幾乎滿足我對程式設計語言所有的想象.這篇文章證實了我的想象Go語言之父談Go:大道至簡
我想, 我應該很快會放棄用c++寫代碼了.
其實我並不是討厭c++, 我覺得c++於我, 是一個視窗, 讓我通過它瞭解了更多的底層的知識, 讓我對電腦的理解更加的深刻.對效率的把握更加的準確.而它複雜的文法也讓我對於其他程式設計語言的上手都很快速, 因為沒有一個語言..能有C++那麼複雜..:(
或者純C, 或者go. 或許我會回到c++, 但是出於對C++標準委員會這些年做的事情, 實在是不再敢抱有任何的希望.