17款JavaScript工具讓陳舊代碼換面
譯文從Lisp到Pascal,陳舊的代碼如今已經再度煥發生機,而這一切要歸功于下面將要介紹的各類JavaScript交叉編譯器、翻譯器以及模擬器。
計算機語言在保質期方面有著與眾不同的獨特規律。其中最為熱門的各類編程語言所表現出的增長趨勢與瞬息萬變的時尚界可謂殊途同歸。不過當熱潮褪去、輝煌不再之后,奇怪的狀況也將就此出現。不同于那些最終被大多數人徹底遺忘的流行歌曲或者燈籠褲設計,這些編程語言仍將繼續存在、時常出現、糾纏不休、擺脫不掉。這種永生不朽的背后到底是什么樣的動力所造就?答案很簡單,保留舊有代碼在成本上往往比利用那些最時髦、***時代前沿特性的語言進行重寫要低得多。
曾幾何時,使用一套陳舊的代碼庫完全是種孤獨的經歷,甚至有點像在荒島上獨自生活。工作的主要內容在于保證一切都能夠在虛擬磁帶庫與成綁的線纜之上正常運轉。老式工具與老式編譯器之所以始終受到選擇甚至推崇,完全是因為只有它們才能讓舊有代碼繼續起效。老式代碼庫會被當作傳家寶,特別是在其中包含有源代碼的情況下。
但最近幾年來,隨著新型交叉編譯器以及解釋器的陸續出現,這一切發生了轉變。似乎在一夜之間,陳舊的代碼已經能夠融入現代編程環境,雖然還稱不上***和諧、但卻已經足以實現整合,使相關技術人員不再感到自己的工作內容徹底脫離時代。正確的工具能夠如龐德的名言所說,“讓它再度煥發生機”。
歸功于無所畏懼的嘗試精神與堅定決心,老式代碼如今已經通過一系列JavaScript工具找到了新的生存之道。時至今日,塵封的代碼庫已經能夠切實起效并運行在現代設備之上。突然之間,原本只能運行在大型機上的代碼已然可以立足于任何用戶手機設備上的網絡頁面后臺當中。
這些工具還遠稱不上***,但它們的出色表現足以掩蓋掉這些固有缺陷。重新編寫原有代碼會帶來巨大挑戰,因為這通常意味著相關人員需要透徹理解傳統代碼的編寫思路——這幾乎不可能實現,主要因為當年的開發人員需要針對磁盤空間極為昂貴的狀況、這意味著僅僅是幾行注釋也會帶來切實存在的成本壓力。盡管投入大量精力能夠產生可觀的效益并消除一部分技術難題,但我們往往并沒有多余的資源來如此奢侈地處理問題。相反,使用交叉編譯器、翻譯器以及模擬器能夠更輕松也更快捷地打理這些陳舊代碼庫,并將其帶入現代化領域——相比之下,利用龐大的技術團隊深入研究這些即將消亡的編程語言、從其中挑出可用的陳舊代碼并對一切進行重寫顯然很不劃算。
在今天的文章中,我們將了解那些晦澀的元祖級編程語言如何在新興JavaScript工具的幫助下重新煥發生機。以此為代表的轉換工具很可能是惟一一種能夠讓這些晦澀難懂的編程語言繼續生存的手段。大家不妨將其視為陳舊代碼內容的生命維持系統。
#p#
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的***塊跳板。
另一款商業性選項則是SpiderBasic,其現代版本據說衍生自PureBasic的傳統版本。它能夠訪問構建現代、多窗口Web應用程序所必需的全部HTML 5以及WebGL鉤子。
原文標題:17 JavaScript tools breathing new life into old code