BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

使用Scala.js将Scala编译为JavaScript

| 作者 Zef Hemel 关注 0 他的粉丝 ,译者 臧秀涛 关注 2 他的粉丝 发布于 2013年6月24日. 估计阅读时间: 2 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

在上周的Scala Day上,Sébastien Doeraene演示了Scala.js,这是一款将Scala编译为JavaScript的编译器。该编译器支持全部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。

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

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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT