將Scala轉變為Javascript的編譯器:Scala.js
Scala.js是一個將Scala轉變為Javascript的編譯器。允許你完全使用Scala開發Web應用程序。
特性:
- Support all of Scala (including macros!), modulo a few semantic differences
- Very good interoperability with JavaScript code. For example, use jQuery and HTML5 from your Scala.js code, either in a typed or untyped way. Or create Scala.js objects and call their methods from JavaScript.
- Integrated with sbt (including support for dependency management and incremental compilation)
- Can be used with your favorite IDE for Scala
- Generates Source Maps for a smooth debugging experience (step through your Scala code from within your browser supporting source maps)
- Integrates Google Closure Compiler for producing minimal code for production. Compiled blobs range from 170-400kb
- Produces (very) efficient JavaScript code (benchmarks) </ul> 該編譯器支持全部Scala語言特性,允許開發者用Scala開發從前端到后端的Web應用,而且也潛在地帶來了在服務器和客戶端之間復用代碼的可能性。
面向Scala.js編寫的Scala代碼可以與現有的JavaScript代碼交互,既支持動態類型方式,又支持靜態類型方式。前者更為靈活:可以訪問全局窗口(window)對象,可以存取任何屬性,還可以調用任何方法。不過Scala的靜態類型特性沒有得到應用。作為選擇,可以提供JavaScript庫的類型簽名。比如對jQuery而言,就是提供如下信息:
利用這些類型信息,編譯器可以進行類型檢查,而IDE可以提供代碼補全功能。現有庫的類型簽名仍然需要手工編寫,但是Scala.js的作者正在研究,對于TypeScript擁有簽名信息的所有庫,能否利用TypeScript的簽名自動生成這里需要的信息。Scala.js還有一個問題,Scala標準庫在使用Google Closure編譯器進行最小化處理后還有16MB,未來還需要進一步縮減。
下面是在Scala.js中使用jQuery是一個例子,這里使用id“button”在按鈕上綁定了單擊處理程序,單擊之后,它會將id“pane”這個div后面附加上一段標記:
jQuery("#button").click { () => val paragraph = jQuery("<p>").html("Hello World!") jQuery("div#pane").append(paragraph) }
從JavaScript中調用Scala生成的代碼也是可能的。該編譯器會為編譯的代碼生成源代碼映射信息(source maps),因此棧跟蹤會指向原始Scala代碼中的位置,而非指向生成的JavaScript。
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!