查看程序设计语言——实践之路笔记的源代码
←
程序设计语言——实践之路笔记
跳转到:
导航
、
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
{{{版权声明}}} == 第一章 == === 语言设计的艺术 === * 为什么会有这么多语言? ** 计算机科学的发展进步,编程语言设计本身也在发展,从机器语言->汇编->结构化->面向对象/逻辑/函数式/ ** 特殊用途,DSL的需求 ** 个人偏爱 * 为什么有些语言比其他语言更成功? ** 表达能力,本质上也是抽象能力 ** 易于上手,学习曲线很重要 ** 易于实现,对于编译器的实现者而言很重要 ** 有很好的编译器 ** 经济、支持者和惯性,cobol和Ada语言,Java本身也是大公司在后面支持。 * 考察一门语言好或者不好,要从语言的使用者和实现者两个角度去考察。 === 程序设计语言的谱系 === 按照计算模型大体分为两类: * 说明式 ** 函数式,Lisp/Scheme,ML,Haskell,还有Erlang,包括我热爱的Clojure ** 数据流 Id,Val ** 逻辑式的,基于约束 神奇的Prolog,VisiCalc *命令式 **冯.诺伊曼 Fortran,Pascall,Basic,C **面向对象 C++,Smalltalk,Eiffel,Java... === 为什么研究程序设计语言 === * 理解困难特性 * 从不同可能性中选择适当的方式去表达事物,其实就是我们通常说的'''最佳实践'''。 * 更好地使用排错系统、汇编器、连接器等工具 * 在缺乏某些有用特征的语言里模拟这些特征。 === 编译和解释 === * 编译: 源程序 -> 编译器 -> 目标程序 输入 -> 目标程序 ->输出 * 解释: 源程序/输入 -> 解释器 -> 输出 * 编译通常有性能优势,而解释更灵活,有更好的报错信息,更强的动态性(延迟约束)。 * 预处理器和编译器: 编译器会去试图理解源码(分析语法语义),而预处理器并不这样做,它只是基于简单的模式匹配做文本性的处理。 * 混合型语言,编译和解释混合,中间代码 + JIT编译 === 编译概览 === [[文件:编译器阶段.png]] * 编译可能分为几遍进行(一般更喜欢称为趟吧),一遍成为一个编译遍,每一遍做编译的不同阶段。 * 编译器通常分为前端和后端: ** 前端: 扫描、语法分析、语义分析 ** 后端: 中间代码生成、代码优化和目标代码生成(生成后可再次优化) * 符号表,维护标识符类型信息,内部结构以及作用域等信息 * 语义检查: **动态语义:运行时检查,如数组越界、类型转换、非空指针。 **静态语义:编译时检查,如标识符使用前有定义,case语句是否合法,函数是否有返回值等。
该页面使用的模板:
模板:版权声明
(
查看源代码
)
返回到
程序设计语言——实践之路笔记
。
个人工具
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
帮助
工具箱
链入页面
相关更改
特殊页面