C语言已经死了,5个需要忘却它的理由
现在有很多C/C++程序员总是自命不凡,看不起其他开发者。其实也许别人更看不起他!
学生时代的我沉迷于C/C++,而今天,我写不出无懈可击的C++代码,所以我一直认为我做不到C/C++。这些年来,我一直在寻找写C++代码的模式。但是,说实话,我还没见过哪个C++程序员能称得上高手,也没见过C/C++代码写得特别好的。C/C++代码总是丑陋的,充满了bug!
我已经用C语言编程20多年了。我用C语言写过编译器、调试器、其他语言、游戏、客户端程序和服务器程序,你说得出的都有!还有什么我没写。我的书架上堆满了K&R和斯蒂尔的书,都是折角的。我太懂C语言了,但是我讨厌它。非常讨厌!
当我看到一个名为“为什么每个程序员都要学C语言?”当时真的起了一地的鸡皮疙瘩。如果你真的是一个职业程序员,你一定觉得这是一个天大的笑话,虽然作者的本意未必是这样的。这篇反驳文章很有意思,但还是没有抓住本质。所以我摊开来说。了解并使用C语言的程序员,不仅要使用其他语言,还要忘记学习C语言过程中的烦心事,原因有五。
1。内存分配
就这一点,我可以写一整篇文章,也许是一本书,甚至是一段可以填满图书馆技术书籍的内容。内存分配和存储单元分配的存在真的是一个很大的麻烦。要么你分配的内存太少而不能使用,要么你分配的内存太多而不能使用。这里的问题是:如何将其初始化为零?或者干脆不要初始化它。但最挠人的一步是释放内存。所有现有的工具包将帮助您确认您是否已经释放了之前分配的所有内存,是否在释放后您将永远不会使用它,并且将阻止您第二次释放它。更何况在C语言中分配和释放内存是非常慢的。在使用内存分配的时候,我真的连各种特殊情况都不愿意去想。只要问题(对象)大小合适,我更喜欢用stack 空房间或者预分配结构空房间。如果我这样做,我会有更多的事情要担心。另一方面,发明垃圾处理器的人确实应该获得诺贝尔奖。
2。多线程
我以前很喜欢C语言,真的。在我开始用C语言开发和维护多线程服务器之前,C语言在保护具有冲突连接的线程的数据方面没有给程序员提供哪怕一点点帮助。你在使用单线程的日子里获得的每一个直觉和经验,在使用多线程的时候都是错误的。至少JAVA有同步的关键字,有支持文档的内存(不过是个奇怪的文件),但即便如此,除非你使用新的javax.concurrent,否则你只能在那些庞大的并行机面前崩溃。回到C语言:在模拟生产环境下,调试一个数据中心死锁一周(这是真的发生过的)。而JAVA只需要Ctrl+Break!哦,我的天啊!!
3。指针
指针太难控制且阴险;我都没有委婉的说法来形容。我这辈子每年都要花几个月调试那些奇怪的指针问题。我曾经试图得到所有的技巧,例如难以理解的构造函数、组合和偏移,以及重用最后两位数作为标记,以及所有其他技巧。但是我发现不值得。可以解决其他语言的静态引用。
4。过早优化
说到招数,你有没有浪费脑细胞去研究*p++是否比p[i]快?你有没有花时间尝试做一些改变而不是乘法,或者尝试让循环中的求逆运行得更快?还在努力像反对添加结构和传递参数一样快地传递参数吗?停下来。算法的速度是关键,程序员的水平决定了他会用哪些算法。知道这一点可以让你的程序更好更快,让你的头少扭几块肌肉。有一些例子可以做到这一点...不,不要那样做!
5。Test
你最喜欢的C语言单元测试工具是哪个?嗯(表示踌躇等)...想不出来吗?单元测试一定一点都不重要,对吧?要么就是太麻烦了,跟不上进度,浪费时间。你可以把这段时间用在更有用的事情上,只占你工作时间的1%更合适。或者在数据中心,通过优化的无标记图形,调试这个只有100个同时在线用户造成的问题。
我本来应该继续说一些理由的,但是现在五个就够了;说到这里,我现在感觉好多了。c曾经很棒…那是1984年。时至今日,所有用C写的新代码都让我惊讶……如果让我比较,我觉得C++只比C好一点点,如果你想学一些更老的语言,试试Forth,Lis或者APL。这些老式的语言至少可以教会你用一种不同的优雅的方式来思考你的程序。
0条评论