作为一种简洁高效的编程语言,Forth自诞生以来便以其独特的简约哲学和灵活的结构吸引了众多程序员的关注。1999年,Forth语言的创始人Charles(Chuck)Moore接受了Jeff Fox的采访,详细回顾了过去十五年中他对Forth及其相关硬件设计的经验和思考。这次探讨不仅涉及Forth语言本身的演变,更深入剖析了硬件与软件的协调工作、代码简化的艺术以及未来计算机技术需重视的核心问题。Moore的语言哲学及创新实践对软件开发者和硬件设计师都具有重要启示。 Moore指出,十五年前他开始将关注点从纯软件问题转移到硬件,原因在于软件问题大多已迎刃而解。编写应用程序变得相对简单,挑战已转移到了硬件层面,特别是定制硬件系统的调试和可靠性问题。
而令他失望的是,硬件工程师们的表现虽优于业界普通软件工程师,却仍不及那些使用Forth语言的软件工程师。正是基于这一观察,他尝试在硬件设计中实施Forth理念,推动软硬一体化简约设计。 Moore回忆起他设计的首个Forth处理器Novix,这是一款16位处理器,性能达到每秒800万指令(8 MIPS),其上的cmForth实现比以往Forth版本更加简洁高效。随后他设计了32位的ShBoom处理器,性能达每秒5000万指令(50 MIPS),进一步证明了Forth与高性能硬件的结合潜力。最新的i21处理器则采用20位架构,声称达到每秒5亿指令(500 MIPS)的爆发性能。每一代处理器都搭配了相应定制的Forth方言,目标始终是最大程度地简化软硬件整体复杂度。
Moore强调,目前很少有人真正尝试降低复杂度,这正是他对Forth设计的核心关注。 他深刻指出现代计算环境尤其是大规模制造厂和团队规模对社会依赖较大,如果技术太过复杂,难以承受如千年虫(Y2K)这样看似简单的挑战。相反,如果硬件与软件能回归简约,技术就具备更持久的生命力,社会在面临变革时也能迅速自我修复。现代产品和服务却往往故意复杂化,致使用户体验混乱,也使开发者难以应对。 Moore对Forth语言的定义极为简洁:Forth即大量的小定义(Definitions)与堆栈(Stacks)。这正是它区别于其他编程语言的基石。
小定义的编写需要一个或两个参数,并且须依赖深度有限的堆栈操作。在他看来,现代编程中堆栈的应用反而被低估且不受欢迎,传统上人们更青睐于寄存器式的数据管理。但堆栈操作尤其适合信息隐藏与模块化设计,并且需要双堆栈体系支持。 Moore提出,“Forth是定义”,这催生了语言中关键的冒号定义,即通过:与;包裹的代码块。但他创新采用颜色编码标识定义过程,其中红色表示定义开始,绿色表示编译状态,黑色则为执行状态。此举不但减少了源代码中冗余的符号,也提升了代码的清晰度与可读性。
他在i21处理器所用的Color Forth即基于此理念。堆栈深度限制在18层,通过限定如DUP、DROP、OVER等简单操作减少对复杂堆栈索引操作的依赖,这使代码更易于理解和维护。 条件跳转与循环结构也经历了简化。原本经典Forth中包含IF ELSE THEN三种控制流程,Moore取消了ELSE,转而采用IF + 分号做为跳出或继续执行的控制结构,这简化了语义和实现。循环方面,他弃用传统DO LOOP和FOR NEXT等多参数循环指令,采用递归调用自身定义来实现循环,即用当前定义词自身调用来回环,减少了控制参数管理的复杂度。这种尾递归调用通过编译器优化转换为跳转指令,节省了返回堆栈资源。
在硬件操作方面,i21引入了递增取指令(@+),方便循环中顺序取地址数据,而这在经典Forth规范中缺失。通过使地址在专用寄存器中自动递增,大幅提升对数据流操作的效率。寄存器A被设计成地址寄存器,具备局部存储功能,但并未进一步设计为堆栈,保持了访问的简单性。Moore否认局部变量设计的应用价值,认为局部变量不仅无益,还会导致非最佳代码。相反,变量依然存在用于保存状态,比如光标位置等。 除了语言设计,Moore对程序规模和质量也有独到见解。
他批评大多数非他编写的程序代码量多十倍之多,导致维护难度高、错误频发。企业常为兼容老代码而不得不增加冗余代码,进而引爆如Y2K般的维护危机。他坚持理想程序应尽量精简,整体规模在1000条机器指令左右,既方便编写也便于维护。如何实现精简?他倡导不断分解因子化代码,重用基础定义,拒绝预留“钩子”以应对未来不确定需求。主张解决当前问题,不为假想复杂需求编写多余代码。 在应用实践层面,Moore尤其反感文件系统带来的冗余,他认为对多数应用而言文件操作是无谓复杂的额外负担,许多文件功能可以通过将数据加载到内存来替代,从而省去大批代码。
对网络协议等现代应用而言,优化的数据传输指令更为关键。他还鼓励Forth程序员专注于实用应用编写,而非过度雕琢语言本身。Moore热衷于发展一个新的网页浏览器项目,认为现有产品均是在模仿和继承早期设计,尚有极大改进空间。 面向用户界面,Color Forth采用大字号显示,减少屏幕信息量,提升了信息的易读性和认知效率。这部分设计灵感来源于人眼视觉限制及现代信息过载情况。虽然牺牲了部分上下文信息,但信息清晰度得到保证,有助于用户聚焦和理解。
网页设计亦应采用类似理念,突出重点,避免冗词赘述,提升内容传达效果。 Moore的Machine Forth哲学强调简约指令体系,舍弃不必要的算术操作,认为现代计算更多是数据搬运而非复杂计算。同时他设计了特殊的条件判断指令(如-IF),虽然未被广泛采用,但展示了基于实际应用场景的定制思路。总结他多年经验,Forth语言的简洁定义、限定堆栈深度、精炼控制结构及专用硬件指令,共同构成了一套高效且适应变化的软硬件生态。 Moore的1x Forth不仅仅是一门编程语言,更是一种对复杂数字世界的反思。他对简约而非复杂的坚定信念,对可持续技术发展的呼吁,以及对程序简洁度的执着追求,为当代软件开发者带来了宝贵的借鉴。
通过借鉴Forth语言的设计哲学,开发者和工程师能够在代码质量、系统稳定性及开发效率上获得提升。面对疫情、资源匮乏等全球挑战,我们对更加容易理解、维护和持续创新的技术的需求愈加迫切。而1x Forth正是这一技术信条的生动体现,值得所有技术人员深入学习与探索。