子程序、控制抽象与面向对象编程
1. 子程序与控制抽象相关问题
1.1 异常处理相关
- 队列操作异常处理 :需要修改代码,当尝试向已满的队列中入队元素或从空队列中出队元素时抛出异常。
- 不同语言异常处理优势对比 :Algol 60 允许将标签作为参数传递并使用 goto 语句跳转到这些标签,可用于从嵌套函数中跳出以应对意外情况,但现代语言设计者认为标签参数不是好主意。而 Ada、Modula - 3、C++/Java/C# 的异常处理在某些方面更具优势,不过具体优势未详细说明。
- Scheme 中异常实现 :基于练习 6.31,展示如何使用 Scheme 中的 call - with - current - continuation 实现异常,语法仿照 Common Lisp 的 handler - case。
- 非局部 goto 实现 :根据结构化异常的实现知识,描述如何实现 Pascal 的非局部 goto 或 Algol 60 的标签参数,同时考虑是否需要对这些特性的使用施加限制。
1.2 协程与迭代器相关
使用协程在 Modula - 2 中构建迭代器支持,代码应让程序员轻松创建新迭代器,并尽量将实现细节隐藏在模块内部,特别是隐藏 yield(由迭代器协程调用)和 next(在循环体中调用)例程实现中的 transfer 使用,同时讨论该语言抽象设施存在的弱点。