@spiritnotes
2016-01-31T10:16:02.000000Z
字数 1208
阅读 1714
《代码之髓》
编程语言
读书笔记
如何深入高效地学习语言
程序设计语言诞生史
- 历史
- 产生原因
- 程序员懒惰
- 语言们各有各的便捷,使用场景/使用目的不一致
语法的诞生
- 语法: 语言设计者制定的规则
- 栈语言和 Forth 语言,Python/Java等虚拟机仍然使用栈语言
- 语法树和 LISP
- 中缀表达式
- Forth 和 lisp 是针对语法树的不同方式遍历
- Forth 先子节点再根节点,属于后缀遍历
- lisp 先根节点,然后子节点,深度优先,属于前缀
- 中缀,先左子节点,然后根节点,最后右子节点
程序的流程控制
- 结构化之前:条件跳转、跳转指令
- while 语句:让泛泛执行的 if 语句更简洁
- for 语句:让数值渐增的 while 语句更简洁
- foreach 语句:根据处理的对象来控制循环操作
函数
- 作用
- 返回命令
- goto 不能按照调用位置返回之前调用位置,调用其后代码
- 最开始是修改 GOTO 目标端返回跳转语句的目的
- 记录跳转目的地的专用内存,缺点:类似全局变量,无法函数多次调用
- 栈: 先进后出
- 递归调用 嵌套结构体的高效处理
错误处理
- 程序也会出错
- 如何表达错误
- 返回值
- 错误可能遗漏
- 错误处理导致代码可读性下降
- 通过跳转进行集中错误处理 GOTO
- 异常处理
- finally / RAII / scope(exit)
- 异常传递
- Java的检查型异常
- 修改太麻烦,具有传递性
- The trouble with checked exceptions
名字与作用域
- 名字
- 作用域
- 名字的有效范围
- 动态作用域
- 名字的绑定根据函数的调用
- 确定函数的名字需要按照调用链向上找
- 静态作用域
- 参数传递,调用方确定
类型
- 数
- x进制
- 定点数:固定小数位数的长度
- 浮点数:将数字分一部分作为记录小数位数的长度
- 类型扩展
- 用户定义类型和面向对象
- 作为功能的类型
- 总称型、泛型和模板
- 动态类型
- 灵活,可运行时确定类型和改变类型
- 静态检查不足
-类型推断
容器与字符串
- 容器
- 空间复杂度 / 时间复杂度
- 字典 / 散列 / 关联数组
- 字符串
并行处理
- 协作式多任务模式
- 抢占式多任务模式
- 竞态条件
- 无共享进程和 actor 模式
- 不修改
- 不介入
- 协调线程 corouitine / green thread / fibre
- 锁 / mutex / semaphore
对象与类
- 什么是面向对象
- 归集变量与函数简历模型的方法
- 模块、包 -- 如何需要多份
- 把函数放到散列里面 - 散列和函数独立开
- 闭包
- 类
继承与代码再利用
- 继承
- 不同实现策略
- 一般化与专门化: 子类是父类的一种
- 共享部分提取: 是关系不一定满足
- 差异实现: 实现方式再利用
- 继承是把双刃剑
- 里氏替代原则
- 多重继承
- 一个事物位于多个分类中
- 对于实现方式再利用非常遍历
- 多重继承-名字冲突
- 禁止多重继承
- 按顺序进程搜索
- 混入式处理 mix-in
- Trait