1,语言要素
在描述一种语言时,应将注意力集中到语言的基本原语,它的组合手段,以及它的抽象手段,这是最重要的;
2,强健设计的语言层次
分层设计:一个复杂的系统应该通过一系列的层次构造出来,每个层次上所用的语言都提供了一些基本元素、组合手段、还有对该层次的细节做抽象的手段,即每个层次都为表述系统的特征提供了一套独特词汇,以及一套修改这一系统的方式;
正交设计:分层是因为目前的语言提供的连接手段是“调用”,如果语言能够提供“调用”之外的其它手段,如“织入”,则可能在分层的体系结构之外出现正交的体系结构;
3,Huffman编码与二叉树
待解决问题与所选数据结构的完美搭配
4,begin
即序列求值,C++中则是逗号表达式
5,树结构的缺点
叶子只能属于一个分支
6,函数式程序设计与命令式程序设计
不用任何赋值的程序设计称为函数式程序设计;与之相对应的,广泛采用赋值的程序设计被称为命令式程序设计
7,引用透明性与别名
如果一个语言支持在表达式里“同一的东西可以相互替换”的概念,这样替换不会改变有关表达式的值,这个语言就称为是具有“引用透明性”;一个计算对象可以通过多个名字访问的现象称为“别名”
8,同一与等价
“同一”在实现中往往是指向同一块存储的多个别名;“等价”则往往是指向多块存储的不同对象,但它们在计算中可以相互替换而不影响表达式的值;同一比等价更为严格
9,引用对象与值对象
在系统计算中需要必须是“同一”对象的,往往用引用对象来实现,此时对象有全局唯一ID,缺省即存储地址;
在系统计算中需要“等价”对象即可的,往往用值对象来实现,此时对象的存储地址无关紧要,这类对象常见有货币等
10,有状态与无状态
内部状态随时间变化的,称为有状态,反之为无状态;
时间是本质问题,有状态对象在并发系统中存在严重缺陷
有状态对象往往需要“同一性”,无状态对象往往“等价”即可
11,过程与数据
真实的情况是,在一个可以将过程当作对象的语言里,在“过程”和“数据”之间并没有本质性的差异,因此我们可以自由选择自己所需的语法糖衣,以便按自己选定的风格去做程序设计