17款JavaScript工具让陈旧代码换面
从Lisp到Pascal,陈旧的代码如今已经再度焕发生机,而这一切要归功于下面将要介绍的各类JavaScript交叉编译器、翻译器以及模拟器。
计算机语言在保质期方面有着与众不同的独特规律。其中最为热门的各类编程语言所表现出的增长趋势与瞬息万变的时尚界可谓殊途同归。不过当热潮褪去、辉煌不再之后,奇怪的状况也将就此出现。不同于那些最终被大多数人彻底遗忘的流行歌曲或者灯笼裤设计,这些编程语言仍将继续存在、时常出现、纠缠不休、摆脱不掉。这种永生不朽的背后到底是什么样的动力所造就?答案很简单,保留旧有代码在成本上往往比利用那些最时髦、最具时代前沿特性的语言进行重写要低得多。
曾几何时,使用一套陈旧的代码库完全是种孤独的经历,甚至有点像在荒岛上独自生活。工作的主要内容在于保证一切都能够在虚拟磁带库与成绑的线缆之上正常运转。老式工具与老式编译器之所以始终受到选择甚至推崇,完全是因为只有它们才能让旧有代码继续起效。老式代码库会被当作传家宝,特别是在其中包含有源代码的情况下。
但最近几年来,随着新型交叉编译器以及解释器的陆续出现,这一切发生了转变。似乎在一夜之间,陈旧的代码已经能够融入现代编程环境,虽然还称不上完美和谐、但却已经足以实现整合,使相关技术人员不再感到自己的工作内容彻底脱离时代。正确的工具能够如庞德的名言所说,“让它再度焕发生机”。
归功于无所畏惧的尝试精神与坚定决心,老式代码如今已经通过一系列JavaScript工具找到了新的生存之道。时至今日,尘封的代码库已经能够切实起效并运行在现代设备之上。突然之间,原本只能运行在大型机上的代码已然可以立足于任何用户手机设备上的网络页面后台当中。
这些工具还远称不上完美,但它们的出色表现足以掩盖掉这些固有缺陷。重新编写原有代码会带来巨大挑战,因为这通常意味着相关人员需要透彻理解传统代码的编写思路——这几乎不可能实现,主要因为当年的开发人员需要针对磁盘空间极为昂贵的状况、这意味着仅仅是几行注释也会带来切实存在的成本压力。尽管投入大量精力能够产生可观的效益并消除一部分技术难题,但我们往往并没有多余的资源来如此奢侈地处理问题。相反,使用交叉编译器、翻译器以及模拟器能够更轻松也更快捷地打理这些陈旧代码库,并将其带入现代化领域——相比之下,利用庞大的技术团队深入研究这些即将消亡的编程语言、从其中挑出可用的陈旧代码并对一切进行重写显然很不划算。
在今天的文章中,我们将了解那些晦涩的元祖级编程语言如何在新兴JavaScript工具的帮助下重新焕发生机。以此为代表的转换工具很可能是惟一一种能够让这些晦涩难懂的编程语言继续生存的手段。大家不妨将其视为陈旧代码内容的生命维持系统。
Pascal
各位还记得二十年前TurboPascal统治桌面编程世界的那段时光吗?很明显Elevate Software公司的技术人员们还记得,也正因为如此、他们打造出一款专门负责将ObjectPascal转化为JavaScript的工具。他们甚至作出承认,表示用户不需要学习Pascal即可开发出能够运行在Web环境下的代码。大家能够直接向其输入Pascal代码,而该工具会将处理后的代码返回给用户——这些代码在内容及运行效果方面都与现代浏览器代码别无二致。
Cobol
这种编程语言主要活跃在大型机舞台之上,而且截至发稿时Dice.com网站上仍有553个与之相关的JavaScript招聘岗位。CobolScript是一套Node.js软件包,其能够将标准Cobol代码中的大部分内容转化为面向Node.js服务器编写的JavaScript代码形式。
开发人员将其称为尚处于发展过程中的项目,并列出了其中尚不具备的多种功能,不过目前已经存在大量切实可先找实例、足以证明其给出的既定承诺。举例来说,其能够让早已无人问津的Cobol代码从MySQL当中获取数据,并结合HTML共同构建起现代Web应用程序。
Lisp
对于大部分曾经阅读过Hal Ableson以及Gerry Sussman合著的《计算机程序结构与解读》一书并据此学习编程的朋友来说,计算小括号数量并确保其平衡已经成为大家打发无聊的午后时光的最佳方式。Lisp及其衍生版本在那些早期学习这门语言的技术人员心中一直占据着重要地位,其中的许多结构设计思路时至今日仍然扮演着大量现代编程语言的基础角色,也包括JavaScript在内。语法虽然可能最终消失,但灵活的架构将永远存在。
大家可以通过十数种方式通过JavaScript让自己的Lisp代码再度焕发活力,而且它们在由传统转向现代的实验过程中选择了不同的实施手段。举例来说,EdgeLisp能够提供大量Lisp标准架构,而且其开发团队还承诺称,EdgeLisp将“让Common Lisp程序员们获得宾至如归的感受”。Parenscript则提供“Lisp宏的全部功能”,而且其大多数来自Common Lisp当中。如果大家更喜爱Lisp-1,那么Ralph则是另一套可行性方案。
Scheme的拥护者们则能够找到与之相关的一系列解决方案,包括BiwaScript、Moby Scheme以及nconc等等。
另外还存在着大量实验性语法,旨在保证Lisp当中所有极富乐趣的思维方式都能够通过略有差异的格式被继承下来。LispyScript将宏的强大能力与小括号结合了起来。作为另一选项,Oppo在自述当中作出了如下说明:“如果JavaScript相当于披着C外衣的Lisp,那么Oppo就是披着Lisp外衣的Lisp,同时里面穿着C衬衣。”
Smalltalk
尽管大家都已经很清楚,苹果与微软两家公司都在操作系统的设计当中深度借用了来自施乐PARC的理念,但人们常常忘记的是、施乐PARC的研究人员们同时也给编程语言带来了影响深远的革命。当时大部分程序员都热衷于摆脱GOTO语句以及子程序,而Smalltalk则是当时首先将面向对象选项纳入设计的编程语言之一。
举例来说,Clamato能够将简单易行的Smalltalk架构转化为与JavaScript相似的组成部分(且最终为其所用)。虽然还算不上一应俱全,但Clamato项目的开发人员们已经将其与jQuery相对接,并利用其它DOM操作工具对其进行弥补,因此大家完全可以以此为基础构建Web应用程序。
Little Smallscript则能够提供一套子集,从而将Smalltalk代码编译为JavaScript并将其运行在Node.js之上。而那些已经选择了更具现代特性的Squeak的朋友则能够使用其JavaScript版本——名为SqueakJS。
Logo
在Scratch以及Alice等完整的IDE方案出现之前,我们往往会使用Logo来教导小朋友们如何编写代码。时至今日,Logo语言仍然存在——如果大家愿意,完全可以将Logo Interpreter引入自己的浏览器,并充分在享受当初那个需要利用波特率及键盘敲击次数计算带宽使用量的时代下、利用精简语法建立图形的全部乐趣。Logo拥有一套简单而精致的操作机制,这一点在任何依靠拖拽与按钮进行操作的现代方案中都无法找到。
Basic
上世纪七十年代是游戏机的黄金时代、摇滚乐的黄金时代、同时也是编程语言的黄金时代。大家不光能够将自己的Commodore 64游戏在Web之上进行模拟,同时也能够继续运行来自那个光荣年代的Basic代码。好吧,这种说法也许并不够准确,毕竟多年以来Basic已经带来众多衍生版本。不过大家如今仍然可以编写出一些新的、且具备Basic赖以成名的出色精简性的代码成果。
如果大家喜欢使用QBasic,这款结构化语言主要依靠微软的推崇而知名,那么完全可以先从qb.js入手,这是一款JavaScript实现方案、能够直接运行在各位的浏览器当中。一旦开始运行,qb.js会在浏览器内部将Canvas对象转化为一个塞满了陈旧、过时字体内容的长方图形。在随后的发展过程中,这种线条窗口逐渐演化成了窗口。虽然并不是所有组件都能顺畅起效,但其代码完全开放,因此大家可以遵循 GPL 3.0许可协议对其进行修改及扩展。
NSBasic则是一套更具商业性的选项,能够面向JavaScript环境生成足以运行在桌面系统及移动设备之上的代码。NSBasic的目标受众主要是那些不希望涉足高复杂性Eclipse或者XCode、但又需要在智能手机上平台上搞出点小成果的开发人员。大家可以将自己尘封已久的Basic编写经验转化为进军App Store的第一块跳板。