c语言从入门到死亡,云风的 BLOG

C 并不是对机器模型的完整抽象,就是说把 C 作为一种 portable assembly language 是有缺陷的。即使是做底层,光有 C 也是不够的 (IMHO) 。

C 语言的卫道者们最喜欢举的一个例子是:某某语言的 VM 都是用 C 的;或是某某语言都是先编译成 C 再编译成本地码等等,以示 C 的重要性。没错,现今的事实如此,这是历史选择的结果。我最近在读一本翻译的很糟糕的书,《游戏——自然规律支配偶然性》 。如果有人耐着性子读下去,就可以从书中列举的小球游戏看到选择一般怎样发生。

今天看来 C 并不太适合写 VM ,也非做别的语言编译成本地代码的中间语言之最佳选择(尤其对函数式语言来说)。选择 C 只是没有更好的选择而已。

我最近读了一些关于 C-- 的 paper ,C 对 gc 支持的不足可以说是最大的一个缺陷。这一点是语言的不足,用库去解决是不太现实的了。对于函数式语言来说,函数尾调用的堆栈优化也使 C 在性能表现上相形见绌。到了 C++ 解决了一些,不仅外观是拙劣的(大量的 inline 函数的使用),性能依然有欠缺。可悲的是,许多 C 程序员对这些不屑一顾(尤其是对 gc 的错误认识)。

其实即使是机器语言上的编程,到了具体流行的系统上,也有强烈的历史选择的痕迹。比如堆栈的设计,对于冯诺体系来说并不是必须。但是大家都这么设计了,CPU 也按这个做了优化(提供堆栈寄存器、优化堆栈指令的速度),导致了最终我们都得选择这种结果。别的设计并非不存在,比如 forth 语言就依赖双堆栈来工作。btw ,forth 这种小语言,至今也未能消失。它的大量使用甚至鲜为人知。比如在 boot firmware 领域的地位就无可取代。

C 在静态语言中没有太大的竞争者其实也是 C 的悲哀。造成了在 C 能力临界点上的领域,它依旧成了最好的选择。这造成了大家在低阶开发上把 C 当万能药来使。今天看来,没有 C 是万万不能的,这也是一个历史选择的结果。假若当年 pascal 战胜了 C ,现今所有用 C 写的代码都用 pascal 来实现也未尝不可。

C 在历史的选择中走到了今天,当然还会一直存在下去。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值