一个传统得不能再传统的 ABAP Report,里面有PARAMETERS、SELECT-OPTIONS、INITIALIZATION、START-OF-SELECTION、Open SQL、文件处理,末尾再来几条WRITE。过去看到这样的程序,我们几乎会条件反射地把它放回 SAP Application Server 的世界里。它应该由 ABAP Kernel 解释和执行,Selection Screen 应该显示在 SAP GUI 中,数据库访问应该经过 SAP Database Interface,文件操作也天然和 Application Server 或 SAP GUI Frontend 联系在一起。
可现在,同样的 ABAP Report 居然能够被编译成一个 Native Executable。
不是启动一个 Node.js Server 来解释 ABAP,也不是先装一个庞大的 Runtime Environment,更不是偷偷连接某个 SAP Development System。编译结束以后得到的是一个真正可以从 Terminal 直接启动的可执行文件。程序运行,显示 Selection Screen,执行 Open SQL,读写文件,输出结果,最后进程退出。
更夸张的是,这个程序甚至能够跑到 ZX Spectrum、CP/M 和基于 eZ80 的 AgonLight 上。
这里真正有意思的地方,并不是单纯把 ABAP 翻译成了 Go,而是围绕这次实验慢慢形成了一套完全不同的 ABAP 执行模型。它让我们重新思考一个已经习惯了几十年的问题,ABAP 到底是一