网易首页 > 网易号 > 正文 申请入驻

让 Scala 生成 JavaScript 已成为现实,Scala.js 的这十年

0
分享至

Scala.js 是一款将 Scala 代码编译为 JavaScript 代码的编译器,其支持全部 Scala 的语言特性。值十周年之际,官方回顾了这款编译器的从零到有,从一开始的不可能到已是一项成熟的技术。

原文链接:https://www.scala-lang.org/blog-detail/2023/02/05/ten-years-of-scala-js.html

作者 | Sébastien Doeraene

译者 | 弯月 责编 | 屠敏

出品 | CSDN(ID:CSDNnews)

以下为译文:

十年前,2013年2月5日是我们团队第一次提交 Scala.js 的日子。刚开始的时候,将 Scala 编译成 JavaScript 只是一个梦想。而如今这已成为现实。Scala.js 是一项成熟的技术,具有坚如磐石的核心、充满活力的专用库生态系统以及热情的用户及贡献者社区。

在十周年之际,我想回顾一下 Scala.js 的整个发展经历。

一切的开始

当年我们刚开始开发 Scala.js,它还是 EPFL LAMP(Martin Odersky 领导的研究实验室)的一个单人项目。

从 Scala 生成 JavaScript 并不是一个新想法。LAMP(Scala+GWT、JS Scala)和社区(s2js、JScala)已经进行了多次这样的尝试。在当时看来这几乎是一个不可能完成的任务,而这也成为了我们启动这个项目的动力。

2013 年 6 月,Scala.js 在 Scala Days 上首次亮相就收到了热烈欢迎,尽管当时只输出了一个 16 MB 的“Hello world”。一小群早期的爱好者开始注册邮件列表,就他们喜欢的项目展开了交流,为项目提供了珍贵的早期反馈。很快,一个单人小项目就成长为以两人为核心的团队,还有几十位热心粉丝。

坚实的基础

2013 年 11 月,版本 0.1 来了,并确立了Scala.js 的基本设计目标:

  • 与 JavaScript 的互操作性:能够直接表示和操作 JavaScript 值,就像它们是 Scala.js 的值一样。

  • 与 Scala/JVM 的可移植性:尽可能准确地将 Scala/JVM 的语义编译为 JavaScript,无需为互操作性而做出太多妥协。

  • 与 IDE、构建工具以及其他工具的兼容性:每个有效的 Scala.js 程序都必须经过类型检查,就像有效的 Scala/JVM 程序一样,不需要区别使用工具。

如今,这些核心设计目标仍然支配着 Scala.js 发展的总体决策。2014 年的 0.5.x 版本多加了一个额外的目标,即良好的运行时性能。我们也尝试尽可能所见生成的代码量,但上述核心设计目标优先。

为了保证这些目标,Scala.js 项目就质量和稳定制定了严格的标准。

Scala.js 是 Scala 生态系统中首批注重向后二进制兼容性的大型项目之一(其他项目还有 Akka 和 sbt)。版本 0.6.0 是版本 1 的垫脚石,预期生命周期为 6 个月。然而,这个版本在发展的过程中保持向后二进制兼容长达 5 年之久,终于在 2020 年 2 月 Scala.js 1.0.0 发布后功成身退。

有了如此长的兼容期,Scala.js 的生命周期最终都会超过底层的 Scala 版本。最近,我们放弃了 5 年前就宣布停产的 Scala 2.11 的支持。具有讽刺意味的是,根据 Scala.js 问题跟踪器的统计,迄今为止征集停止支持 Scala 2.11 的问题收获了最多的好评,它收到了100多个赞。

由于过硬的代码质量和测试要求,Scala.js 被称为坚如磐石。自 2021 年 8 月 Scala.js 1.7.0 发布以来,每个版本的已知错误数量都为零,包括整个核心存储库:编译器后端和链接器、Scala.js 特定的语言功能、Scala.js 标准库以及 JDK 的部分实现。

这个坚实的基础由核心团队维护,但这只是 Scala.js 成功的一部分。

充满活力的社区

Scala.js 有今天的成就,离不开所有为生态系统做出过贡献的用户。社区和生态系统开展的主要活动包括编写库、开发工具、开展演讲以及通过 StackOverflow、Gitter 和现在的 Discord 为 Scala.js 的其他用户直接提供帮助。

前两年,现有 Scala 生态系统的大多数库都不支持 Scala.js。一些用户使用 Scala.js 构建了第一批库和测试框架。随着 Scala.js 的发展成熟,我们需要更好地支持交叉编译库。因此,我们在 Scala.js 0.6.0 中添加了 crossProject 的概念。

从那以后,随着 Scala.js 0.6.0 宣布试验阶段结束,Scala.js 的采用率大幅上涨。特别是,Scala 生态系统中越来越多的库开始支持 Scala.js。拉取请求主要来自 Scala.js 用户,但维护人员选择接受这些拉取请求,以及随之而来的维护负担。作为 Scala.js 的维护者,我们只能尽量减轻支持交叉构建的难度。我们万分感谢库维护者提供的支持。如今,大多数非专门针对 JVM-only 特性的库都是为 Scala/JVM 和 Scala.js 交叉发布的。

与此同时,Scala.js 用户尝试了 UI 库的最佳设计。虽然新的设计仍在探索中,但有一些库已经在社区中站稳了脚跟。在此,我们建议将 Laminar 作为 Scala-only 默认选择。对于喜欢 React 的用户来说,Slinky 和 scalajs-react 是流行的替代方案。

此外,还有许多其他类型的贡献,我们无法在此一一列举。

当前的发展状况

如今,Scala.js 已成为一门成熟的语言和生态系统。我们估计已有数十万开发人员在使用。Jetbrains 开发者生态系统 2022 调查报告以及 Scala 2022 现状调查报告统计了 Scala 开发者中使用 Scala.js 的用户,分别为 12% 和 17%。Maven Central 统计报告称,核心组件每月的下载量超过 10 万次。

Scala.js 的成功远远超出了我们十年前的想象。核心团队努力构建扎实的基础,同时用户和贡献者社区才是成功的真正源泉。再次感谢所有为我们的生态系统做出过贡献的每一个人。我们期待与您携手,共同缔造 Scala.js 的下一个十年。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
政斗惨败只剩一张牌!马科斯求莎拉维持对华路线,但还能如愿吗?

政斗惨败只剩一张牌!马科斯求莎拉维持对华路线,但还能如愿吗?

流史岁月
2026-06-04 19:10:04
当年20万的“宇宙神车”,如今只要1万多,二手油车彻底崩了

当年20万的“宇宙神车”,如今只要1万多,二手油车彻底崩了

闲搞机
2026-06-04 11:07:25
“惨败”,德外长承认:德国支持以色列和乌克兰可能是落选安理会非常任理事国原因之一

“惨败”,德外长承认:德国支持以色列和乌克兰可能是落选安理会非常任理事国原因之一

环球网资讯
2026-06-04 13:45:07
AI脸引发全民生理性厌恶,AI美颜正在慢慢毁掉我们的审美

AI脸引发全民生理性厌恶,AI美颜正在慢慢毁掉我们的审美

西楼知趣杂谈
2026-06-04 12:14:18
“住不起给我滚 没钱就不要在这里住”! 业主不满停车费从免费涨到4元/天 争执期间被物业人员辱骂

“住不起给我滚 没钱就不要在这里住”! 业主不满停车费从免费涨到4元/天 争执期间被物业人员辱骂

闪电新闻
2026-06-04 18:25:08
德国首次落选 默茨执政一年遭遇内外双重“滑铁卢”

德国首次落选 默茨执政一年遭遇内外双重“滑铁卢”

上游新闻
2026-06-04 19:56:20
去冰后仅半杯,消费者吐槽:“我花的是满杯的钱”;瑞幸咖啡:去冰不满杯属于正常操作

去冰后仅半杯,消费者吐槽:“我花的是满杯的钱”;瑞幸咖啡:去冰不满杯属于正常操作

蓬勃新闻
2026-06-04 18:24:15
头号大热出炉!世界杯6大夺冠热门来了!阿根廷仅第4,葡萄牙第5

头号大热出炉!世界杯6大夺冠热门来了!阿根廷仅第4,葡萄牙第5

球叮足球
2026-06-03 09:47:29
中方回应日遗化武意外:两名日方人员及时救治后回国

中方回应日遗化武意外:两名日方人员及时救治后回国

界面新闻
2026-06-04 17:44:35
韩国人,用一场豪赌,硬生生造出了亚洲最疯狂的科技公司。

韩国人,用一场豪赌,硬生生造出了亚洲最疯狂的科技公司。

流苏晚晴
2026-06-03 18:11:55
一艘满载中国瓷器的沉船,开启“挪威考古学的新纪元”

一艘满载中国瓷器的沉船,开启“挪威考古学的新纪元”

澎湃新闻
2026-06-04 18:28:30
美军飞行员集体懵了:在中国沿海,怎么永远都是歼 - 11 在等我们

美军飞行员集体懵了:在中国沿海,怎么永远都是歼 - 11 在等我们

叶葉夜
2026-06-04 14:13:00
理想L9 Livis 2.8吨、蔚来ES9 2.9吨……一辆新能源车已经增重到3吨,何时是个头?

理想L9 Livis 2.8吨、蔚来ES9 2.9吨……一辆新能源车已经增重到3吨,何时是个头?

都市快报橙柿互动
2026-06-04 08:26:28
赛豆汽车,6月9日正式发布!

赛豆汽车,6月9日正式发布!

电动内参
2026-06-04 17:28:30
浙江将实施电价新政

浙江将实施电价新政

财闻
2026-06-04 21:12:27
“一个月5次,超过按50万一次收费!她被誉为“亚洲第一美人”

“一个月5次,超过按50万一次收费!她被誉为“亚洲第一美人”

阿振观点
2026-06-04 12:21:23
张一鸣造车成功,炸翻行业!

张一鸣造车成功,炸翻行业!

财经三分钟pro
2026-06-04 14:12:48
痛心!浙江大一女生高珊珊去世,长的很漂亮,家属透露更多

痛心!浙江大一女生高珊珊去世,长的很漂亮,家属透露更多

小鋭有话说
2026-06-04 12:05:11
被美国遣返的美籍华人,如今成无国籍人,中国做法值得全世界学习

被美国遣返的美籍华人,如今成无国籍人,中国做法值得全世界学习

探源历史
2026-06-02 14:28:29
广州92岁摆摊卖书的爷爷没有告诉过你的秘密:为病妻读故事,为追极光而远行

广州92岁摆摊卖书的爷爷没有告诉过你的秘密:为病妻读故事,为追极光而远行

潇湘晨报
2026-06-04 20:17:19
2026-06-04 21:39:00
CSDN incentive-icons
CSDN
成就一亿技术人
26614文章数 242292关注度
往期回顾 全部

科技要闻

历史最大IPO!马斯克下周冲击万亿富豪

头条要闻

60节火车皮价值千万玉米"不翼而飞" 法院:实际未装车

头条要闻

60节火车皮价值千万玉米"不翼而飞" 法院:实际未装车

体育要闻

欧冠决赛躺赢?他也曾是大巴黎的英雄

娱乐要闻

难怪奚梦瑶能嫁入豪门

财经要闻

SpaceX发行价135美元 6月12日上市交易

汽车要闻

北京现代5月销量强势反弹:国内17065辆 出口环比翻倍

态度原创

数码
时尚
教育
房产
军事航空

数码要闻

618 买洗地机别只看参数,追觅这两台把选择题讲明白了

「与美偕行」高端访谈EP4 | 以个性化赋能自信,重塑医美专业价值

教育要闻

中考前一周,家长最该做的5件事(不是催孩子刷题)

房产要闻

震撼!海口顶豪“素颜出境”,直接顶穿品质天花板!

军事要闻

美众议院要求特朗普停止对伊动武并撤军

无障碍浏览 进入关怀版