PostScript® 1.0 - 一个代码研究

  • 背景与文章大纲:Adobe 的起源故事多次被讲述,Charles Geschke 和 John Warnock 离开 Xerox PARC 后共同创立 Adobe,Steve Jobs 促成 Adobe 软件与苹果激光打印机的合作,推动了桌面出版革命。PostScript 是其核心技术,其解释器读取描述页面的程序并将其渲染为光栅图像,图形由路径等组成,文本也以路径渲染,John Warnock 描述了字体渲染算法。文章将呈现两个时间表,涵盖开发者传记、开发过程、源代码设计等方面。
  • 时间线

    • 上下文时间线:涵盖 1965 年至 1997 年与桌面出版革命相关的重要事件,如 Utah 大学建立图形中心、Xerox 发明激光打印机、Press 系统开发等,以及 PostScript 的发布和发展历程。
    • 开发时间线:根据文件编辑历史推测 PostScript 主要语言组件和处理循环在 1983 年 1 月至 3 月完成,随后团队专注于图形引擎等方面,1984 年完成最后整合。
  • 开发者及其影响

    • 联合创始人:Charles Geschke 获 Carnegie Mellon 大学计算机科学博士学位,在 Xerox PARC 参与 Mesa 语言编译器设计,是 1.0 版本源代码的主要修改者;John Warnock 获 Utah 大学博士学位,参与多个与图形相关的项目,其开发的 JaM 语言影响了 PostScript 的设计。
    • 1.0 版本贡献者:Tom Boynton 负责 banddevice.c 和 math.c 等文件,曾在 Xerox PARC 工作;Doug Brotz 获斯坦福大学计算机科学博士学位,在 Laurel 邮件客户端开发中与 Warnock 合作,1983 年加入 Adobe 并对 PostScript 做出诸多贡献,虽无图形编程背景但在图形和字体处理方面表现出色;Andrew Shore 相关细节较少,其“Andy’s Stupid Input Device”的故事体现了 PostScript 的设计特点。
    • 设计系统:John Gaffney 开发的语言为 PostScript 设计奠定基础,The Design System 的关键方面被认为是 PostScript 语言的重要部分。
    • Xerox:Xerox 在出版工具开发过程中积累了经验,如 Press 系统的设计,这些经验对 PostScript 的发展产生了影响。
  • 开发和测试环境:Adobe 工程师在 leased VAX 750 上开发,使用 Sun-1 工作站和从 DEC 借来的 LN01 激光打印机进行测试,LN01 打印机性能和内存有限。
  • 设计和源代码

    • 物理形式:分布约 12,000 行 C 代码,按 Makefile 分为 kernel、graphics、device、fonts、user 五组,缺失部分文件,可统计各文件组代码行数以了解复杂度。
    • 奇特文件:包括 four “oddball”文件,它们似乎不属于软件主体,可能用于特定测试或开发目的。
    • 架构:PostScript 设计借鉴 Unix 模式,以 stdin 为输入、stdout 或 stderr 为输出,初始化后可重置,虚拟内存存储程序的内存状态,右侧的光栅图像处理器将光栅化页面转换为输出设备的最终表示。
    • 编程语言和方言:代码用 K&R C 编写,开发者利用预处理器和 typedefs 使语言更类似 Mesa,保留了 Mesa 的一些特性,如函数修饰、类型定义等。
    • 历史约束:光栅化过程需要存储每页的颜色值,当时内存容量有限,PostScript 的设计需适应这一情况,1984 年内存价格的下降对激光打印机的商业化和桌面出版革命产生重要影响。
  • 有趣的算法和设计

    • 输入设备:InputDevice 是一个接口,包含三个操作函数,用于处理图像输入,image命令通过这些函数实现图像插入,后期版本支持压缩图像。
    • 迷你缩减器(Mini-Reducer):用于简单凸四边形的光栅化,算法使用平面扫描方法将任意形状转换为非重叠梯形,虽不完整但体现了高效的实现方式,与其他类似算法可能有相似之处。
  • 替代路径/竞争对手

    • Interpress:在 1980 年代中期被视为 PostScript 的竞争对手,在与打印机交互、文件结构等方面有优势,但在图形支持和字体处理等方面不如 PostScript,其文档结构被 PDF 采用。
    • 设备独立(DVI)文件:作为 TeX 项目的一部分,是一种中间页描述语言,与 PDF 有相似之处,但不支持嵌入字体和复杂图形,不是 PostScript 的真正竞争对手。
  • “打印任何东西”哲学:Adobe 与 Xerox 的哲学差异导致 PostScript 注重功能完整性,将字体分解为路径,给予用户更多设计自由,虽存在语言可能超出设备限制的问题,但为程序员提供了改写程序的可能。
  • 部署和历史(1.0 之后):PostScript 字体处理算法改进,被嵌入苹果 LaserWriter, adoption 增加,Adobe 发布多次更新,PDF 的出现使 PostScript 逐渐过时,PDF 因其页面引用和交互性等优势而受欢迎。
阅读 15
0 条评论