跳到主要内容

高级语言与交互式编程

使用高级语言的主要理由是什么?​

  • 理由一(生产率): 见 020-人月与进度中的生产率数据, 整体提升而非部分增加;
  • 理由二(调试): 存在更少的 bug, 而且更容易查找;
  • bug 更少的原因: 它避免在错误面前暴露所有级别的工作, 既不会造成语法错误, 也不会产生语义问题(如不当使用寄存器);
  • 更容易查找的原因: 编译器的诊断机制帮助找出类似错误, 更重要的是非常容易插入调试快照;
  • 作者结论: 这些生产率和调试优势是势不可挡的, 无法想象使用汇编语言能方便地开发系统软件;

对高级语言的传统反对意见是否成立?​

反对意见作者回应
无法完成我想做的事情所有证据显示人们可以完成想做的事, 只是需要时间精力找出如何做, 可能需要一些讨人嫌的技巧
目标代码过于庞大新的优化编译器已非常令人满意, 并将持续改进
目标代码运行速度过慢经优化编译器生成的代码比绝大多数程序员手写代码效率更高; 全面测试后可把 1%-5% 替换成手写代码解决速度问题

系统编程应该用什么语言?​

  • 原著结论: 当时可供合理选择的语言是 PL/I--它提供完整功能集, 与操作系统环境吻合, 并有多种编译器(交互式、快速、诊断性好、优化程度高);
  • 作者个人用法: 用 APL 解决算法更快, 然后翻译成系统环境下的 PL/I;
  • 20 年后修正: "现在可供合理选择的语言是 PL/I"不再正确;

交互式编程解决了什么问题?​

  • 关键认识: 调试是系统编程中很慢和较困难的部分, 而漫长的调试周转时间是调试的祸根;
  • 逻辑合理性: 就这一点而言, 交互式编程的逻辑合理性勿庸置疑;
  • 数据支持: Harr 的数据表明系统软件开发中交互式编程的生产率至少是原来的两倍;
  • 概念差异: Multics(及后续 TSS)与其他交互式系统在概念上很大的不同--多个级别上数据和程序的共享和保护、可延伸的库管理、协助终端用户共同开发的设施;
  • 边界: 在某些应用上批处理系统决不会被交互式系统取代;

高级语言和交互式编程为什么是一对强大的工具?​

  • 依赖关系: 由于远程键盘终端无法用于内存转储的调试, 大多数交互式工具的有效使用需要采用高级语言来开发;
  • 协同效果: 有了高级语言, 可以很容易地修改代码和选择性地打印结果;
  • 结论: 实际上它们组成了一对强大的工具;
  • 20 年后: 只有懒散和惰性会妨碍它们的广泛应用, 如今它们已经在全世界使用;

文本编辑系统为什么是节省劳动最多的工具?​

  • 评价: 在所有工具中, 最能节省劳动力的可能是运行在可靠平台上的、计算机化的文本编辑系统;
  • OS/360 实例: 由 J. W. Franklin 发明的系统使用非常方便; 没有它, OS/360 手册的进度会远远落后, 而且更加晦涩难懂;
  • 副作用: 6 英尺厚的 OS/360 手册带来新的不理解问题, 很多人认为它是一大堆口头垃圾;
  • 作者的两点回应:
    • 文档规模不可避免, 需要仔细的阅读计划; 应把手册看成图书馆或百科全书, 而不是一系列强制阅读的文章;
    • 它比那些刻画大多数编程系统特性的短篇文档更加可取, 但仍有很多需要改进的地方, 事实上某些部分已被很好地改写;