说说c, c++ 和 go

  今天接触到了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++标准委员会这些年做的事情, 实在是不再敢抱有任何的希望.