`
wandejun1012
  • 浏览: 2720079 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【转】C语言已经死了,5个需要忘却它的理由

    博客分类:
  • c
 
阅读更多

转自:http://developer.51cto.com/art/200612/36506.htm

我用C语言编程已经超过20年了。我写过C语言的编译器、C语言的调试器、用C开发的其他语言、游戏、客户端程序和服务器程序,你说吧!还有什么是我没写过的。还有我的书架上充斥着折了角的K&RSteele的书。我太了解C语言了,但是,我讨厌他。十分讨厌!


当我读到一篇博客,题目是“什么每个程序员都应该学习C语言?”时,我真是鸡皮疙瘩满地。如果你真的是个专业的程序员的话,你肯定觉得这是个天大的笑话,尽管作者的本意也许不是这样的。这篇反驳的文章有点意思,但是还是没有抓住本质。所以我展开了说一下。有以下5个原因来说明,为什么那些会C语言,并且使用C语言的程序员,现在不但应该去用别的语言,而且应该忘记他们学习C语言过程中的那些烦人的东西。


1、内存分配

 

仅仅关于这一点我就能写整整一篇文章了,也许能写一本书,甚至还有可能写出能够塞满图书馆技术书籍那块,那么多的内容。内存分配和存储单元分配的存在确确实实是个大麻烦。你要不就是分配太少的内存不够用,要不就是分配了太多内存浪费掉。这里的问题就是:怎么把它初始化为零呢?还是干脆就不初始化它。但最挠头的步骤还是释放内存。所有已有的工具包都会帮助你确认,你是否已经释放了之前分配的每一位的内存,在释放完之后是否永远不使用它,并且会阻止你,永远不要释放它第两次。更严重的是,分配内存和释放内存在C语言中都是很慢的,非常慢。使用内存分配时,要考虑的各种特殊情况,我真是连想都不愿意去想,只要问题(对象)的大小合适,我更愿意使用栈空间或者事先分配的结构空间。如果这么做的话,我就有更值得烦恼的事了。话说回来,发明垃圾处理器那人真应该得诺贝尔奖。


2、多线程

 

我过去是喜欢C语言的,真的。直到我开始用C开发并维护多线程的服务器。在为连接相冲突的线程保护数据方面,C语言没有为程序员提供那怕一点点的帮助。你在使用单线程的日子里获得的每一个直觉、经验,用在多线程的时候都是错误的。至少JAVA有表示同步的关键字和备有证明文件(但是是个很奇怪的文件)的记忆体,但即使是这样,除非你使用新的javax.concurrent,否则也只能在那些巨大的平行摆放的机器们面前崩溃。回到C语言上:在模拟生产的环境下,坚持一个星期在数据中心调试一个死锁(这事真的发生过)。而JAVA却只需要Ctrl+Break!天哪!!!


3、指针

 

指针太难以控制了,太阴险了;我甚至没有委婉一点的方式去形容它。我生命中每年都有几个月被用来调试那些奇怪的指针问题。我过去常常努力获取所有的诀窍,比方说难以理解的构成符、联合体和偏移量,以及重用最后两位做标记,还有所有其他的诀窍。但我发现这么做根本不值得。其他语言的静态引用就可以解决了。


4、过早的优化

 

说到诀窍,你是否曾经浪费脑细胞去研究究竟*p++是不是比p[i]快?你是否曾经花时间去试着做点变化来代替乘法,或者去尝试使循环中的倒置运行更快的方法?还在为传递一个参数的速度和反对添加结构,并且传递它的速度一样而苦恼不已?停吧!算法是速度的关键,程序员的水平决定了他会使用那些算法。知道这一点能让你的程序更好,更快一点并且让你的脑袋少扭几个筋。好吧,有一些例子也许可以这样做的……不,你就别那么做就行了!

 

5、测试

 

你最喜欢的C的单元测试的工具是哪个?嗯一个也想不到?单元测试一定是一点也不重要,是吧?或者是太麻烦了,很难跟上进度,浪费时间。你可以把这个时间用到更加有用的事情上,让它只占用工作时间的1%,那还比较合适。或者在数据中心,通过优化的没有标记的图形来调试这个仅仅由100个同时在线使用者引起的问题。



我本来应该继续再说一些原因的,但是5个现在就足够了;说完这些,现在感觉好点了。C以前是非常棒的那是在1984年的时候。直到今天,那些用C写的新代码都让我感到惊喜如果你让我比较的话,我觉得C++只是比C稍微好点。如果你想要学些老一点的语言,不妨尝试ForthLis,或者APL。这些老式的语言起码能教会你,用不同的而且优雅的方式去思考你的程序。


作者简介

 

Ed Burnette是一位有着丰富编程经验的程序员。他现在致力于使用JAVAC来开发OLAP客户端和服务器。他业余时间喜欢研究JavaEclipse和开源软件。他写了很多关于Eclipse的文章和书籍,另外他还是EclipseZone.com的主编。

 

分享到:
评论

相关推荐

    html转C语言字串或数组工具

    "html转C语言字串或数组工具"就是这样的一个实用程序,它能够帮助C语言开发者有效地处理HTML内容,将其转化为C语言可读的字符串或数组形式。这对于在C语言环境下构建网页爬虫、解析HTML文档或者进行数据提取等任务...

    二进制文件转C语言数组.rar

    这个“二进制文件转C语言数组.rar”压缩包提供了一种方法,将这些二进制数据转换成C语言数组的形式,方便在C语言程序中直接内嵌。下面将详细介绍这一过程以及相关的知识点。 首先,我们要理解二进制文件和C语言数组...

    任意文件转换成C语言数组

    标题提到的“任意文件转换成C语言数组”就是解决这类问题的一个方法。这种方法允许我们将文件内容编码为C语言数组,使得程序可以直接在内存中加载和使用这个数据。下面将详细解释这一过程及其相关知识点。 首先,...

    任意文件转C语言数组 二进制BIN文件、图片转数组

    标题“任意文件转C语言数组 二进制BIN文件、图片转数组”所指的就是这个过程,即将非文本格式的数据(如二进制文件、图片)转换为C语言的字符数组形式,以便于在C代码中直接使用。这样的操作对于单片机编程尤其有用...

    MP3文件转C语言16进制数组工具

    总结来说,"MP3文件转C语言16进制数组工具"是一个针对嵌入式开发者的实用工具,它能够方便地处理MP3或TXT文件,将其转换为可以直接在C语言程序中使用的16进制数组,简化了开发过程,提高了代码的可移植性和执行效率...

    C语言转C#语言工具

    标题中的"C语言转C#语言工具"是一款帮助程序员将C语言编写的代码转换为C#语言的工具。这种工具在跨平台开发或者需要利用C#的特性时特别有用,例如在.NET框架下工作。C语言是一种底层、高效的语言,而C#则提供了更...

    C语言已经死了,5个需要忘却它的理由

     我用C语言编程已经超过20年了。我写过C语言的编译器、C语言的调试器、用C开发的其他语言、游戏、客户端程序和服务器程序,你说吧!还有什么是我没写过的。还有我的书架上充斥着折了角的K&R和Ste

    音频文件数组转成c语言的数组

    C语言中处理音频时,需要知道这个参数来正确地创建数组。 3. **位深度**:位深度是指每个采样点的二进制位数,如8位、16位、24位等。位深度决定了音频的动态范围和精度。 4. **数据类型选择**:C语言中的`char`、`...

    delphi转c语言

    delphi转c语言工具,用于delphi代码转成C语言

    网页转C语言数组

    标题“网页转C语言数组”所指的就是这个过程,它涉及了网页数据的抓取、处理以及转换成C语言可读的格式。 1. **网页数据抓取**: - 网页数据通常以HTML、CSS和JavaScript等形式存在。要提取所需的数据,可以使用...

    C语言 JPG转BMP

    C语言 JPG转BMP!!

    GB2312于Unicode互转C语言程序(完整VS2010工程)

    标题中的“GB2312于Unicode互转C语言程序”指的是一个用C语言编写的程序,该程序具有将字符编码从GB2312转换到Unicode,以及从Unicode转换回GB2312的功能。GB2312是中国大陆早期广泛使用的简体中文字符集,而Unicode...

    将图片转换为C语言数组的程序

    标题中的“将图片转换为C语言数组的程序”是指一种工具或方法,它能够将图像数据转换成C语言数组的形式,以便在嵌入式系统中使用。这种转换过程对于那些不支持文件系统的嵌入式硬件尤其有用,因为在这些平台上无法...

    C语言字符编码转换UNICODE、GBK、UTF-8互相转换

    C语言虽然相对较旧,但它仍然被广泛用于系统级编程和底层开发,包括字符编码的转换。在这个主题中,我们将深入探讨如何在C语言中进行UNICODE、GBK和UTF-8之间的转换。 UNICODE,也称为Unicode Transformation ...

    16进制数据与浮点型数据转换——c语言程序

    在IT领域,尤其是在编程中,数据的...总结来说,这个“16进制数据与浮点型数据转换——C语言程序”提供了理解和操作不同数据类型之间转换的基础,对于深入学习计算机底层工作原理以及进行相关开发工作具有重要意义。

    NFA到DFA的转换(C语言实现)

    在C语言中,位运算可以用来有效地表示和操作状态集合,ε转移的处理则需要特殊考虑,因为它们可能导致多个状态同时到达同一个DFA状态。 为了测试和验证转换的正确性,通常会编写一组测试用例,包括各种正则表达式和...

    C语言期末大作业-C语言小游戏28个

    28个C语言小游戏(免积分下载)主要游戏名如下所示: c语言24点游戏源码 c语言Turbo C下写的俄罗斯方块 c语言五子棋源码 (一个人用不了那么多可以几个人入手哦!) c语言别踩白块儿(双人)源码 c语言吃逗游戏源码 ...

    用C语言绘制五角星,并让其旋转。

    用C#绘制五角星,并让其旋转。包括绘制五角星函数和旋转函数。

    C语言的png和jpeg图片格式转换为bmp格式

    综上所述,这个项目提供了一个很好的机会去学习和实践C语言在图像处理方面的应用,同时也涵盖了基本的图像格式理解和转换技巧。对于想要深入了解图像处理或开发相关软件的开发者来说,这是一个有价值的资源。

    C语言实现把汉字转换为拼音

    同时,运行稳定性是服务器应用的关键,描述中提到的“运行稳定”表明这个解决方案在实际部署后已经过了一定的考验。 总的来说,通过C语言实现汉字到拼音的转换是一项技术挑战,涉及到数据结构、编码处理、算法设计...

Global site tag (gtag.js) - Google Analytics