其实吧,这就是胡说而已,那就胡说几句吧。
c语言是计算机应用的基础工具,可以讲,没有c语言,必然会有另外一个不叫c语言的c语言来替代它,因为这个语言的出现其实是计算机历史的必然。
当所有的语言在cpu上以汇编的方式执行的时候,c语言是距离cpu次近的语言,因为有汇编存在,如果您非要讲机器语言叫做语言,我认输,好不?
汇编的最大的特点是快啊,对不对,但是他有致命的缺陷,那就是和cpu指令有关,也就是和平台相关,而c语言的使命,就是解决这个问题的,通过一个编译过程来消除这个致命的缺陷。从抽象层次上来说,c语言比汇编高一个抽象层次。
想当年,Bjarne Stroustrup发明c++的时候,使用的cfront就是将c++先翻译为c后再使用c的编译器进行编译,如果您看过Inside the c++ Object Model,您就可以了解c++很多特征通过c如何来仿真。
如果您编程的历史足够长,一定还会记得当年蛋疼的华为面试题中有如何用c语言来仿真继承、仿真类和对象。
亲啊,面试的主考官看过这本书,您没有看过,你可能不会啊。
这是多么蛋疼的炫技,就像讲易经的老师开始发功一样。
多么痛的领悟?!
其实c语言和c++或者java这类语言,其使用的方法是不一样的。
谁说面向过程就不能做大系统,您听说过pascal语言写的操作系统吗?对,早期的mac os就是用pascal写的,就是您手上用的iphone6的操作系统啊亲!急死我了。
谁说函数式的语言难以维护,您了解common lisp、clojure、scheme吗?scheme是美国计算机学科入门的语言。
其实面向对象方法是给我们这些普通人来准备的,头脑简单,思维单一,智商底下的人才天天面向对象,您了解Bjarne Stroustrup的痛苦吗?他那么辛苦的用c语言构造出来c++,你们居然说太难了,我们用java吧,因为那是纯面向对象,其实,其本质不过是“我们”是一群纯蠢蛋而已。对,我也是“我们”的一员。
c语言可以做任何事,这不是废话吗?不过,如果增加了lambda,就完美了,终于谈到主题了。
君不见,那么IT界层出不穷的框架、新语言、新技术,好像IT技术发展的多么的快速、多么的高明、其实吧,绝大多数的概念都是在超冷饭,lisp语言1960就实现的lambda,java在今年,也就是2014年的java8版本中才实现,这都是54年前的概念了,还有太多的孩子们以为那是一个新概念呢。
IT界有多少大忽悠,站在讲台上,这个语言那个框架,其实也挺可怜,不忽悠人会饿死啊,亲。
我们专注一点,就简单的聊聊c和c++吧,前提是这两个我都不熟。因为我实在搞不懂什么是熟悉、精通和会之间的区别。因为大部分人都是熟悉、精通和会,我不敢这么讲,只能说不熟了。
c++的支持多种编程范式,函数式、模板、最有名的莫过于面向对象思想,所以其优势在于生产力很高,可以快速的搭建框架,快速的实现。尤其面向对象技术加上c++最牛的模板技术,可以以最紧凑的代码实现非常高的系统抽象,从而让基础设施在渐进迭代中快速的逼近真实需求而不会导致系统框架的不稳定,这是我的一点小小的理解。
c语言相对c++来讲,从语言方面,概念就很紧凑,核心很小,实现简单,执行效率高,主要面向函数式编程。它没有所谓面向对象的思想,因为它的产生原因前面已经说了,是为了替代汇编语言。所以,使用c语言,可不要以面向对象的方面来使用,会让你很快放弃了。但是,如果您学习过lisp或者类似于lisp的语言,比如clojure或者scheme,再回头来看c语言,您就会眼前一亮,因为函数式编程思想,才是真正的天才的思想,这是给天才们准备的。函数式编程可以以面向对象编程方式相反的思路来考虑。
对,您听的没错,我们从大学里面大家都在讲,一个系统构造,要从底而上来构建领域模型,从顶而下来构造设计模型,这对于面向对象语言来说,没有问题,它就是干这个的。但是对于函数式,却需要从顶而下来构建领域模型,从底而上来构建设计模型,因为其本质在于我们再设计过程中对于不同抽象层次的构建技术是不同的。面向对象是获取抽象过程是先内聚再分离,函数式却是先分离再内聚。所以,这里,函数式编程的优势其实就是我在不了解所有的细节之前,就可以着手实现,讲细节延后到细节明晰之后在实现,这就是它最牛的地方,而面向对象技术要做到这一点,就需要很大的抽象预留。
说到这里,也就明白了,为什么我题目说,如果c语言增加了lambda,就完美了,因为c语言距离最本质的函数式,还差这么一段距离,所以为啥我们总是觉得它有点难用呢?