关于并行貌似正确的废话-程序语言发展的启示

《关于并行貌似正确的废话》系列文章:

  1. 关于并行貌似正确的废话–串行已经尽力了
  2. 关于并行貌似正确的废话-程序语言发展的启示
  3. 《关于并行貌似正确的废话-程序员是优秀的管理者》

怎么办?解铃还需系铃人。既然自动的做不了,程序员就需要有并行的头脑,用并行的语言和开发方式,设计,实现。怎么并行?

或许计算机和程序语言的发展史能给我们一些启发。

先说最原始的图灵机,一个执行器,一个纸带,一个指针,一个状态。执行器根据当前状态,指针对应纸袋位置的符号,决定机器的下一个状态。后来有了冯诺依曼结构。纸袋和状态存在存储器中,执行器就是控制器,计算器负责计算下一个状态。我们可以把那时候对计算机的操作看作状态序列的跳转操作。

后来有了操作系统控制作业的输入、控制计算机执行作业、控制计算机输出结果。后来发现输入输出的时候,计算部分在空闲。计算的时候,输入输出空闲。花这么多钱买的噪音这么大的破铁箱子就这点本事?专家们忍不住了,要多任务!于是每个任务在计算机内部被细化为输入输出和计算三个部分。但任务有长有短,还是有空闲,于是多进程系统诞生。每个任务只能在独立的存储区内工作,一个单独的守护进程代替人做调度,谁做完了谁撤,谁在等待,就让谁执行。

后来有了编程语言,程序员使用C语言告诉计算机,你先这么这么做,如果满足这个条件,就从A语句开始往下做。如果不满足走B。然后到C点开始,如果满足条件,就反复执行C到D之间的代码,直到条件不满足。慢慢的,提倡在C语言中不使用Goto,只是函数调用,循环,判断,直线语句解决所有问题。主张重复的功能多写成函数。再后来,程序越来越大,提倡不同功能的函数放到不同的文件中,再后来有了变量,常用库函数,库文件。主张函数和变量的声明,复杂的头文件包含和宏定义放到头文件中。

Unix出现了,Unix的设计理念是模块化。模块化设计和实现至今还影响着我们。每个模块都完成独立的功能,提供清晰的接口。模块之间有依赖关系。将这些模块划分为内核态和用户态,限制权限。

后来有了面向对象语言,C++,C#,JAVA, python,Lua等等,有了类,有了模板,有了例外,有了继承,有了虚函数。一个类封装一类对象,C中的struct只是封装了属性,而C++中的class可以封装针对对象的动作。这个类只能做这些动作,这个类中的某些动作只能在它自己的其他动作中用到(private)。再把一些不同类中的类似操作合并成模板(template),这几个类的某个动作可以用一个函数来完成。如果除了错,不管你是在什么函数调用,什么类中,只要仍出一个信号告诉某一级的某个运行中的函数说,我出错了,出了什么错。它就能把这个信息输出出来,这样就把错误处理也做了封装。继承和虚函数也一样,封装,然后扩展。

其实我们一直在做的就是封装!把我们不关心的东西通通封装起来,只给出要使用这个东西必须的那部分内容就行了。这是计算机人机交互这几十年进化的永恒主题。让人尽可能简单的使用计算机。

====>

相关文章:

This entry was posted in 编译前沿, 编译技术 and tagged , , , , , . Bookmark the permalink.

8 Responses to 关于并行貌似正确的废话-程序语言发展的启示

  1. Sil says:

    还在前戏中,群众们都在等高潮啊

  2. myesis says:

    真有你的,还来个上中下。。。
    Envy封装的不错,还有多态。。。

    • erlv says:

      @myesis, 分成上中下是觉得以前的长篇大论太枯燥了,而且自己很难把握。呵呵。原来你也是钢炼迷,握手。

  3. Pingback: 编译点滴 » 关于并行貌似正确的废话–串行已经尽力了

  4. baozii says:

    我等最后那篇……长下见识…

    • erlv says:

      @baozii, 呵呵,感觉最后一篇也没能写出好东西。自己对编程的理解还不够,只能泛泛而谈

  5. Pingback: 编译点滴 » 关于并行貌似正确的废话-程序员是优秀的管理者

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>