如何用AI技术降噪? QCon 广州“音视频架构实践”专场给你答案! 了解详情
写点什么

使用 Scala.js 将 Scala 编译为 JavaScript

  • 2013 年 6 月 23 日
  • 本文字数:720 字

    阅读完需:约 2 分钟

在上周的 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

2013 年 6 月 23 日 08:233252
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 122.0 次阅读, 收获喜欢 30 次。

关注

评论

发布
暂无评论
发现更多内容

架构实战营模块 5 作业

Roy

架构实战营

架构实战营毕业总结

哈喽

「架构实战营」

架构实战营模块 5 作业

星夜

架构实战营

淘宝数据可视化大屏案例(Hadoop实验)

王小王-123

海量数据 大数据分析 淘宝项目 hadoop实验 hive项目

基于Hadoop豆瓣电影数据分析(代码+原理)

王小王-123

大数据 数据分析 基于Hadoop豆瓣电影

传统微服务框架如何无缝过渡到服务网格 ASM

阿里巴巴云原生

阿里云 微服务 云原生 Service Mesh 服务网格 服务网格

VoIP Push 在海外音视频业务中的应用

融云 RongCloud

“微博评论”的高性能高可用计算架构

Pengfei

声网自研传输层协议 AUT 的落地实践丨Dev for Dev 专栏

声网

Dev for Dev 网络传输

[译]在软件开发行业工作 6 年后,那些年我曾改过的观念

宇宙之一粟

感悟 6月月更

远程沟通高效的自我总结| 社区征文

卢卡多多

初夏征文

Jetpack之Room的使用,结合Flow

yechaoa

android flow JetPack 6月月更 Room

基于学生选课数据库分析(Hadoop实验)

王小王-123

hadoop 大数据分析 学生选课项目 数据库项目

Python每日一练——第3天:三种猜数字小游戏

🧸漫月柒七

整整面试两月,凭借这份15w字Java面试刷题宝典成功入职阿里

Java全栈架构师

Java spring 程序员 面试 算法

leetcode 416. Partition Equal Subset Sum 分割等和子集(中等)

okokabcd

LeetCode 动态规划 数据结构与算法

M1笔记本居家办公的痛点及解决方案 | 社区征文

IT蜗壳-Tango

6月月更 初夏征文

在Hadoop环境里面统计西游记文章的词组(hdfs实验)

王小王-123

mapreduce hadoop统计词频 hadoop项目 文本统计分析

透过华为军团看科技之变(五):智慧园区

脑极体

web3 的身份验证之以太坊签名消息

devpoint

区块链 以太坊 web3.0 6月月更

穿越过后,她说多元宇宙真的存在

白洞计划

初识Hadoop之概念认知篇

王小王-123

hadoop hadoop概念

淘宝大数据分析案例(百万数据集Hadoop项目)

王小王-123

大数据分析 淘宝大数据 淘宝业务数据 淘宝项目可视化

Seata 与三大平台携手编程之夏,百万奖金等你来拿

阿里巴巴云原生

阿里云 开源 云原生 seata

什么是IGMP?IGMP与ICMP有啥区别?

wljslmz

网络协议 6月月更 IGMP 组播

HashMap分析-新增

zarmnosaj

6月月更

架构实战营模块5作业

挖了蘑菇哩斯

架构实战营

MySQL,MVCC详解,快照读在RC、RR下的区别

乌龟哥哥

6月月更

微博系统中”微博评论“的高性能高可用计算架构

Geek_e8bfe4

@Scheduled注解的坑,我替你踩了

慕枫技术笔记

后端 6月月更

Serverless 在阿里云函数计算中的实践

阿里巴巴云原生

阿里云 Serverless 云原生 函数计算

「云智公开课」百度沧海·存储

「云智公开课」百度沧海·存储

使用Scala.js将Scala编译为JavaScript_JavaScript_Zef Hemel_InfoQ精选文章