最近更新: 2007-02-26

初會Flapjax, a better-than-JavaScript programming language

Tags: ajax, javascript

在 developerWorks 上看到《Flip for Flapjax》介紹 Flapjax ,聲稱是比 JavaScript 更好的 Web 應用程式語言 (better-than-JavaScript programming language for modern Web applications) 。官方網站上提到 Flapjax 的特色為:

  • Event-driven, reactive evaluation
  • Persistent data saved on a data store we provide
  • Convenient data sharing
  • Access-control for shared data
  • Interfaces to external Web services
  • Optional templating syntax

乍看之下這些功能似乎跟「程式語言」無關,更像是一套 library 或 framework 所提供的。但 Flapjax 確實是一套程式語言,它是一套特定用途的語言,亦即 DSL (Domain-specific programming language) 。 Flapjax 藉此提供比 JavaScript 更直覺的表達力以幫助程序員開發 Web 應用程式。

Flapjax 的實踐方式是實作一個編譯器 (或者該說是翻譯器呢?) ,這編譯器是 JavaScript 的 front-end ,它將程序員以 Flapjax 語法撰寫的程式內容譯為 JavaScript 程式碼,我們再將編譯結果上傳至伺服器供使用者瀏覽。因為編譯結果是 JavaScript 程式碼,所以支援 JavaScript 的瀏覽器就能正常處理。

我們不妨看看 Flapjax Demo Code::Where is the mouse 的示範。這是一個簡單的應用,在此可以很清楚地看到 Flapjax 的使用方式。首先,程序員以 Flapjax 在網頁中撰寫程式,如 the unobtrusive Flapjax version 所示。接著將此網頁內容交給 Flapjax 編譯,目前只提供線上編譯器:Flapjax Online Compiler (雖然網站中提供一個以 Python 撰寫的命令列編譯工具,但它實際上還是把程式內容上傳給 Flapjax Online Compiler 編譯)。 Flapjax 編譯器會網頁內容中的 Flapjax 程式碼轉譯成 JavaScript 程式碼,如 the unobtrusive JavaScript version with Flapjax library 所示。我們將此結果儲存並上傳到伺服器,才算完成一個開發動作。

Flapjax 的設計概念還算有趣。然而目前不提供下載單獨使用的編譯器,這點倒讓我猜不透用意。按照它的開發流程,必然要跑一遍:撰寫 source code → 編譯 → 上傳 target code 的過程。線上編譯的緩慢回應速度,勢必考驗程序員的耐心。另一方面,從 Python, PHP, Ruby 等程式語言的開發過程來看,公開編譯器的源碼,結合 FS/OSS 的力量,將有助其迅速發展成熟。 Flapjax 不提供編譯器源碼,似乎不是個好主意。

樂多舊網址: http://blog.roodo.com/rocksaying/archives/2772183.html

樂多舊回應
未留名 (#comment-4047207)
Tue, 27 Feb 2007 08:50:20 +0800
感覺上有點像是 Google 的 GWT 啊~
寫 Java 然後產出 Javascript
未留名 (#comment-4061605)
Thu, 01 Mar 2007 01:41:44 +0800
確實是類似的概念,但 Flapjax 提供的是一套新語法,專門針對 Web 應用設計使用。這和 GWT 用 Java 來寫的方式還是有差。

就我看過的 GWT 範例而言,它無法擺脫 Java 的冗長文法表達方式,也不能像真正的 JavaScript 那樣實踐動態而彈性設計方式。 Java 是靜態語言,而 JavaScript 是動態語言,許多動態語言的設計方式用 Java 無法簡潔地表達。有些功能,使用 Java+GWT 寫出來的程式碼,還比 JavaScript 冗長。