使用Scala.js将Scala编译为JavaScript

在上周的Scala Day上,Sébastien Doeraene演示了Scala.js,这是一款将Scala编译为JavaScript的编译器。该编译器支持全部Scala语言特性,允许开发者用Scala开发从前端到后端的Web应用,而且也潜在地带来了在服务器和客户端之间复用代码的可能性。

\

面向Scala.js编写的Scala代码可以与现有的JavaScript代码交互,既支持动态类型方式,又支持静态类型方式。前者更为灵活:可以访问全局窗口(window)对象,可以存取任何属性,还可以调用任何方法。不过Scala的静态类型特性没有得到应用。作为选择,可以提供JavaScript库的类型签名。比如对jQuery而言,就是提供如下信息:

\

ef0dd056b6699e65da753bb402d0e70e.png

\

利用这些类型信息,编译器可以进行类型检查,而IDE可以提供代码补全功能。现有库的类型签名仍然需要手工编写,但是Scala.js的作者正在研究,对于TypeScript拥有签名信息的所有库,能否利用TypeScript的签名自动生成这里需要的信息。Scala.js还有一个问题,Scala标准库在使用Google Closure编译器进行最小化处理后还有16MB,未来还需要进一步缩减。

\

下面是在Scala.js中使用jQuery是一个例子,这里使用id“button”在按钮上绑定了单击处理程序,单击之后,它会将id“pane”这个div后面附加上一段标记:

\
\jQuery(\"#button\").click { () =\u0026gt;\  val paragraph = jQuery(\"\u0026lt;p\u0026gt;\").html(\"Hello World!\")\  jQuery(\"div#pane\").append(paragraph)\}
\

从JavaScript中调用Scala生成的代码也是可能的。该编译器会为编译的代码生成源代码映射信息(source maps),因此栈跟踪会指向原始Scala代码中的位置,而非指向生成的JavaScript。

\

Scala.js编译器已基于Scala许可证发布,可以在github上获取。

\

查看英文原文:Compile Scala to JavaScript With Scala.js

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值