今天接觸到了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++標准委員會這些年做的事情, 實在是不再敢抱有任何的希望.