从计算的本质到编程语言

时间:2014-04-30 22:31:39   收藏:0   阅读:571

计算的本质


所谓计算,是构建在一套公理体系上的,并且在此基础上不断向上演化。抽象地说,就是从一个符号串 f 变换成另一个符号串 g 。比如说, 从符号串 12+3 变换成15就是一个加法计算。如果符号串 是 x^2 ,而符号串 是 2x ,从 f 到 g 的计算就是微分。定理证明也是如此, 令 表示一组公理和推导规则, 令 是一个定理, 那么从 到 的一系列变换就是定理 的证明。它们都是从己知符号串开始,一步一步地改变,经过有限步骤,最后得到一个满足预先规定的符号串的变换过程。

计算的两大类型:

计算的两种范式:

编程语言的切入点不同,同时可能会是两种范式之一或混合,比如 Lisp 侧重于前者(Lamda演算),C 注重于后者(冯诺伊曼模型),而更多的语言都在寻求某种折衷。

随着计算机硬件和编译技术的发展,流行语言新特性越来越向LISP进行靠拢,语言设计思想逐也渐向Lisp靠拢。

(过程式)C -> (面向对象)C++ -> (反射+垃圾回收,运行时获取类型)Java -> (动态,运行时可以改变类型Python)->(代码可以生成代码,编译时和运行时无绝对区分(Common Lisp)

图灵完备与等价:

编程语言


编程语言的学习

编程语言决定编程思想,是描述算法的基础。算法和其复杂度分析都是相对于某种计算模型,而程序语言就是描述这种计算模型的符号系统。算法必须用某种语言表述出来。

学习程序语言,要理解其最核心最精华的原理,这才是本质。最好方式是写简单的解释器,实现最基本的功能。之后编程语言的新特性你都大概知道可以如何实现,而不只停留在使用者的水平。推荐用Scheme,很适合写解释器。

每种语言都有其适用的场合,都有其优点缺点,都有其设计哲学和编程思想。“C++高大上,我就学C++,别的都不学” 这种想法是绝逼不可取的。要精通一两门语言没错,但是也要多学其它,学习的能力思想,是最重要的。

编程语言的选择

当选择一门语言来做东西时,要根据项目需求来评估下它的库、文档、工具支持、与操作系统的集成、资源,还有那么一堆其实和计算机工作原理没什么关系的东西,以及,一堆和如何让人更好工作的紧密相关的东西。

php是最好的编程语言,就是你了,php :-)

编辑器与IDE

这是个旷日持久的论战,一不小心就被喷死。我还是要在这里说一下自己的看法:

对于编辑器:

对于IDE:

参考


  1. 巴别塔-编程语言之旅
  2. Lisp的永恒之道
  3. 为什么Lisp语言如此先进?
  4. 王垠-怎样写一个解释器
  5. 王垠-什么是语义学
  6. 王垠-如何掌握程序语言
  7. 90分钟实现一门编程语言——极简解释器教程
  8. 跟vczh看实例学编译原理
  9. 做编译器或操作系统哪个更有趣味?
  10. 如何设计一门语言(一)——什么是坑(a)
  11. 想做 C++ 方面开发,是基于 Linux 还是基于 Windows 平台?
  12. 如何理解「面向对象编程的精髓在于将操作绑定在数据上」?
评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!