近日,一个名为“Commodore 64 Basic for PostgreSQL”的开源项目在GitHub悄然上线,迅速在技术社区引发了一场关于“复古编程”与“现代数据库”跨界融合的热烈讨论。该项目将1982年风靡全球的Commodore 64(C64)家用电脑的BASIC语言运行环境,以扩展插件的形式嵌入到PostgreSQL数据库中,允许开发者使用经典的C64 BASIC语法编写存储过程、触发器和数据查询脚本——这听起来像是一场穿越时空的代码狂欢。
从“LOAD”到“SELECT”:一场怀旧的技术实验
Commodore 64是史上最畅销的个人电脑之一,其内置的BASIC 2.0解释器曾是无数编程爱好者的启蒙老师。而PostgreSQL作为当前最先进的开源关系型数据库,以丰富的扩展能力和SQL合规性著称。将两者结合,乍看像是愚人节的玩笑,但项目作者、来自荷兰的独立开发者Maarten van der Vlist在README中郑重表示:这是“为了一本正经地追求编程乐趣”。
该扩展(plc64)允许用户在PostgreSQL中创建以$$包裹的BASIC代码块,例如:
SELECT basic('10 FOR I=1 TO 10
20 PRINT I, ''Hello from C64!''
30 NEXT I
40 RETURN');
执行后,数据库会逐行解释BASIC语句,并通过RAISE NOTICE在日志中输出结果。项目还支持PEEK和POKE指令来读写数据库的“内存”,实际上对应着用户自定义的全局变量表。更令人拍案的是,经典的LOAD “*”,8,1命令被映射为从特定的数据库表中批量载入数据——当然,这里没有磁带机,取而代之的是普通的SQL INSERT。
技术实现:在SQL引擎中嵌入一个8位解释器
Maarten透露,整个项目基于PostgreSQL的“可信语言”(trusted language)扩展机制,底层用C语言编写了一个精简的BASIC解释器。该解释器兼容C64 BASIC 2.0的绝大部分指令,包括PRINT、INPUT、IF...THEN、GOTO、FOR...NEXT、GOSUB等,并额外添加了DB_QUERY()函数,用于在BASIC代码中直接执行SQL并获取结果集。
不过,由于PostgreSQL的安全沙箱限制,某些危险的操作(如POKE直接修改任意内存地址)被禁止,SYS命令也因为无法调用硬件中断而被废弃。Maarten自嘲:“你不能真的在数据库里RUN《矿工》游戏,但可以写一个BASIC程序来模拟订单库存计算。”
社区反应:两极分化中的真挚热情
消息传开后,开发者社区呈现出有趣的两极反应。一部分资深DBA(数据库管理员)表示“荒谬且毫无意义”,认为在数据库中使用老旧的BASIC语言是对现代工程实践的倒退,性能也会大打折扣。但更多复古计算机爱好者和极客则毫不掩饰兴奋之情。一位Reddit用户留言:“我爷爷一定会很高兴,他终于能用当年写《吃豆人》的语法来查询公司的客户表了!” 也有网友调侃:“现在可以用PRINT CHR$(205.5+RND(1))来随机生成唱片销量了。”
PostgreSQL核心团队成员Bruce Momjian在个人博客中回应称:“这虽然不是官方支持的语言,但它展示了PostgreSQL扩展机制的灵活性和社区创造力。如果你真的怀念那个蓝色屏幕和闪烁的光标,这不失为一种颇具仪式感的尝试。”
不止于玩笑:项目背后的深层价值
抛开趣味性,该项目其实触及了一个严肃的议题:如何降低数据库操作的门槛?BASIC语言以其极简的语法和即时反馈著称,一旦在数据库中得以应用,或许能让没有SQL基础的用户,通过简单的几行BASIC代码完成数据筛选、循环计算甚至简单的报表输出。Maarten表示,他的下一个目标是添加一个基于Web的C64仿真终端,让用户直接在浏览器中用键盘敲出BASIC语句,并实时看到查询结果以“窗口边框”的形式显示出来——正如40年前一样。
当然,目前该项目仍处于实验性质,不建议用于生产环境。但正如Maarten在项目首页的注释中所写:“我们常常忘记了编程本该是充满惊奇和乐趣的。当你在PostgreSQL里打出10 PRINT “HELLO WORLD”然后看到结果时,那种感觉和1982年的孩子第一次按下RETURN键,没有本质区别。”
这或许就是技术最好的样子:让过去与未来在代码中握手。