2022 年,我在整理动画、协程、流程引擎等技术时,发现它们在本质上都试图对现实世界中的 “动作 (Action)” 进行形式化表达。通过深入思考,我意识到传统编程语言在描述真实世界动作方面存在严重不足,而这一瓶颈的突破点恰在 Call Frame 的概念。我将 CallFrame 从低层机器机制抽象出来,置于面向对象视角中,并发现对象化的 CallFrame 足以充当对动作的完整表征。基于此观察,我进一步提出 “函数即类、CallFrame 即其实例” 的观点,并据此设计了一门全新的面向对象编程语言——ago(取自世界语中的 Action)。编译器和运行时源码分享在 https://github.com/siphonlab/ago/。
在以图灵机为基础的程序设计框架中,程序可被视作状态之间连续不断的迁移,而负责完成迁移的正是函数调用。理想化的图灵机假设函数调用是无耗时、不可分割的原子求值过程;从数学函数的抽象角度来看,其执行不包含时间维度,因而无需关注计算所需的具体时长——我们不能谈论求 cos(x) tan(x) 的值要花多久,它们是逻辑活动。然而,在实际硬件与现实世界场景中,每一次状态迁移都必然在时间轴上展开:它可能需要等待外部事件、收集信息并对结果进行处理。传统图灵机模型将函数调用视为单一不可中断的过程,导致单一函数无法表达具有持续性、异步且可被外部因素暂停的动作,例如银行转账、员工请假审批或游戏精灵从点 A 平滑移动到点 B 等等。
从哲学角度看,这种缺陷并不令人惊讶。亚里士多德式运动观把 kinesis 视为临时过渡状态,强调终点而忽略过程;它更关注结果,而非持续展开的动态。而佛教哲学中的 Saṅkhāra 观念则把运动作为第一本体,类似的,怀特海的过程哲学也认为宇宙由相互关联的事件与过程构成,每个过程拥有完整生命周期——从生成、发展到消亡。这种不同的视角启发我们如何看待现实世界中具有时延性的动作。ago 面向对象编程语言在认知框架上仍以柏拉图‑亚里士多德式为主,但也部分承载了过程哲学式的理念。
基于上述思考,我得出了 函数即类、CallFrame 即实例 的结论,并通过 ago 语言实现了这一思想,为面向对象编程提供了一种新的视角和工具。
全文见: https://zenodo.org/records/21256260
欢迎拍砖
欢迎加入做贡献
欢迎投钱