程序设计语言——实践之路笔记

来自Dennis的知识库
2012年12月5日 (三) 16:22Dennis zhuang讨论 | 贡献的版本

(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到: 导航搜索


目录

第一章

语言设计的艺术

  • 为什么会有这么多语言?
    • 计算机科学的发展进步,编程语言设计本身也在发展,从机器语言->汇编->结构化->面向对象/逻辑/函数式/
    • 特殊用途,DSL的需求
    • 个人偏爱
  • 为什么有些语言比其他语言更成功?
    • 表达能力,本质上也是抽象能力
    • 易于上手,学习曲线很重要
    • 易于实现,对于编译器的实现者而言很重要
    • 有很好的编译器
    • 经济、支持者和惯性,cobol和Ada语言,Java本身也是大公司在后面支持。
  • 考察一门语言好或者不好,要从语言的使用者和实现者两个角度去考察。

程序设计语言的谱系

按照计算模型大体分为两类:

  • 说明式
    • 函数式,Lisp/Scheme,ML,Haskell,还有Erlang,包括我热爱的Clojure
    • 数据流 Id,Val
    • 逻辑式的,基于约束 神奇的Prolog,VisiCalc
  • 命令式
    • 冯.诺伊曼 Fortran,Pascall,Basic,C
    • 面向对象 C++,Smalltalk,Eiffel,Java...

为什么研究程序设计语言

  • 理解困难特性
  • 从不同可能性中选择适当的方式去表达事物,其实就是我们通常说的最佳实践
  • 更好地使用排错系统、汇编器、连接器等工具
  • 在缺乏某些有用特征的语言里模拟这些特征。

编译和解释

  • 编译: 源程序 -> 编译器 -> 目标程序 输入 -> 目标程序 ->输出
  • 解释: 源程序/输入 -> 解释器 -> 输出
  • 编译通常有性能优势,而解释更灵活,有更好的报错信息,更强的动态性(延迟约束)。
  • 预处理器和编译器: 编译器会去试图理解源码(分析语法语义),而预处理器并不这样做,它只是基于简单的模式匹配做文本性的处理。
  • 混合型语言,编译和解释混合,中间代码 + JIT编译

编译概览

个人工具
名字空间

变换
操作
导航
工具箱