如何看待 Scala.js?

好像還蠻厲害的,甚至都為 React 做了適配。

可以怎麼用呢?


其實無論是原來的語言多了JS作為Target, 還是改良JS, 還是重新發明一個語言, 看這個列表

List of languages that compile to JS · jashkenas/coffeescript Wiki · GitHub

Compile 到JS的語言真的多如牛毛, Scala.js的出現或許是既然大家都有了, 我也來一個這種 (

所謂為某個庫, 譬如問題里說的React做適配這種事, 只是實現提供了FFI有好心人實現React的binding, 但是別人家Clojurescript利用immutable特性搞起的binding -- om 引領UI發展風潮, 不過React里那個JSX倒是挺像Scala的XML Literals的, 不過後來Scala把這去掉了 (

至於用compile 2js的, 一定程度上是嫌棄某些js特性或者js缺少某些特性, 用Scala, Haskell之流是很多是追求類型安全, 還有一點是前後端的代碼復用, 代碼復用很多人都會覺得是偽需求, 前後端場景不太一樣能復用的代碼不多(反過來可以看看Isomorphic JavaScript), 兼之可能還有一種One Language Rule Them All的幻覺, 其實對於Scala, Clojure這種特別能擼DSL的語言來說, 用EDSL寫HTML, CSS完全不在話下, React看上去就是用javascript寫所有東西嘛, 還能橫跨Javascript, JVM兩大生態系統.

個人覺得Javascript之前的挫是因為沒有一個完善的模塊系統, 最早設計用來做一下頁面效果,

再到用IIFEs組織namespace, 再到後來各種方案之類的. compile 2js的語言可以躲開這種Javascript弱雞地方.

實現上, scalac是出了名的複雜, Scala的二進位兼容性也很多吐槽, Martin在今年的Scala Day上提出了TASTY 一個帶類型的AST中間表示[0], 這樣的話Scala就可以編譯到TASTY上再由TASTY生成Java Bytecode或者Javascript, 不知道Scala.js的跟進怎樣. Scala語言上的進展還有很多, 最近Dotty實現自舉[1], Martin提出各種標準庫改進, Scala.js也已經脫離beta狀態, 開發也挺活躍, Scala社區都是挺有前景的.

(本人前端渣, 對Javascript評價不當請各位大神指出)

[0] http://www.slideshare.net/Odersky/scala-days-san-francisco-45917092

[1] We got liftoff! The Dotty compiler for Scala bootstraps.

最後附圖 via Cartesian Closed Comic #20: Weird language


現在哪種語言不能編譯成JS都不好意思說 Hello World 了:

https://github.com/jashkenas/coffeescript/wiki/List-of-languages-that-compile-to-JS

JS作為動態類型的腳本語言搶了彙編語言的市場,這隻能用慘絕人寰來形容-_-#。不是親眼所見誰能相信 asm 和 js 會在一起 http://asmjs.org

估計過十年能寫JS的都是底層開發的系統程序員。


The guide: Hands-on Scala.js

One sample, 2048 write by Scala JS: scalajs-react-2048

看起來不錯。

Getting a language to compile to JavaScript is relatively easy. What"s not so easy is: a) making it efficient and, most importantly, b) interoperating with JavaScript. For the latter, in particular, too many languages fail to provide consistent, easy to use and understand interoperability with JavaScript.

Scala.js is an exception to this rule: interoperating with JavaScript blends in the language itself and its semantics, up to the point where, seeing a piece of Scala.js code, you can hardly tell what is Scala.js and what is JavaScript. Basically similar to how Scala interoperates with Java.


前一陣用過widok(GitHub - widok/widok: Reactive web framework for the JVM and Scala.js),後來我同事楊博自己寫了一個binging.scala(GitHub - ThoughtWorksInc/Binding.scala: Reactive data-binding for Scala) 都是基於scalajs的。

倒是還沒有直接研究過scalajs,記得scalajs剛出來的時候好像在哪裡說過它是scala官方支持的項目,現在找不到相應的資料了。 如果是真的,那應該是比較靠譜的一個編譯到Javascript的語言了。

用法沒啥說的哈,原本用js寫的基本都可以用scalajs寫就是了。


這個時代的TCP是HTTP, 這個時代的彙編是JS


感覺還是缺少殺手產品和框架, 只做框架適配的化,不能體現特點

對於可測試, 這點確實很有優勢


從js終將消亡的歷史路線來看,這是個小小的進步


一個可以認為的趨勢是一種語言、習慣完成全棧開發


scala本來就適合做dsl,降低其它框架的使用複雜度。js編寫過程可以報錯了,靜態。類型也可以避免出錯了。也有編輯器支持提示了。挺好的。除了react其實現在有好多scalajs封裝的其它前端js框架了

react對state的管理,一連串的action實際可看作是一連串函數,直接壓縮過程到終態,這和scala函數式也挺契合


Scala.js的社區把Scala.js稱為「game changer」。

Coming from JS/Coffee/TypeScript, I think Scala.js is an absolute game changer for us. And as more and more Scala libraries get ported over to Scala.js, I believe this is just the start.

Community - Scala.js

意思就是「你們這麼多年JavaScript、CoffeeScript、TypeScript都白學了的意思」。


推薦閱讀:

TAG:編程語言 | Scala |