写点什么

Martin Odersky 谈 Scala.Net 及 Scala 语言

  • 2011-09-15
  • 本文字数:3577 字

    阅读完需:约 12 分钟

我们就 Scala.Net(.NET 环境下的 Scala 语言实现)及 Scala 语言本身的话题采访了 Typesafe 公司的主席,首席架构师及联合创始人 Martin Odersky。Martin 是 Scala 编程语言的创始人,也是 EPFL(瑞士领先的技术大学)编程研究组的教授。他在整个职业生涯中一直不断追求着一个目标:让写程序这样一个基础工作变得高效、简单、且令人愉悦。

他可能比世界上任何一个人写过更多的 Java 和 Scala 代码。他编写了 javac,这是目前大部分 Java 程序员所使用的编译器。他也编写了 Scala 编译器 scalac,可谓是 Scala 社区飞速发展的基石。他著有《Programming in Scala》一书,是最畅销的 Scala 书籍。他曾经就职于 IBM 研究院、耶鲁大学、卡尔斯鲁厄大学以及南澳大利亚大学。在此之前,他在瑞士苏黎世联邦理工学院追随 Pascal 创始人 Niklaus Wirth 学习,并于 1989 年获得博士学位。

InfoQ: 其实几年前就有.NET 下的 Scala 实现,但后来却消失了。为什么您觉得为.NET 平台提供 Scala 语言也十分重要?

Martin Odersky: Scala 和.NET 之间的历史问题说来话长,在黑客社区外已经很少谈论了。像 Mikolay Mihaylov 和 Lukas Rytz 这样的独立开发者,还有 EPFL 的 Scala 组成员 Miguel Garcia,都在构建交叉编译器方面做出过很多贡献,他们努力让这个交叉编译器可以在.NET 环境下使用──这样便可让一个可执行的 Scala.NET 程序编译它自身了。Miguel 说这就是“典型的鸡生蛋蛋生鸡问题”。

Scala 对于.NET 来说意义重大,无论是对开发者还是公司来说都一样。开发人员可以用一种语言来应对两个环境,公司也可以把各种稀缺的资源,例如优秀的开发者,从两个分离的平台上节省下来,提高灵活性。

由于 Scala 简介而富有生产力,因此在.NET 平台上使用 Scala,开发人员就能在业界两大主流平台,即 JVM 和.NET 上快速部署程序。.NET 提供了一个良好的集成平台,这样 Scala 和其他许多语言轻松地集成在一起。使用 Scala,你就可以利用现有的.NET 类库和应用程序,而不是全部重写。最终,这意味着.NET 和 JVM 平台上的大量工具和应用程序都可以轻松地相互移植,这对谁都有好处。

InfoQ:您觉得 Scala.Net 会与 F#竞争吗?

Martin Odersky: 不太会,可能慢慢会产生些竞争。Scala 的能力与 F#不太一样,这是种面向对象与函数式编程集成的编程风格。.NET 平台上的 Scala 最适合那些想要让程序同时运行在 JVM 和.NET 上的开发人员。大部分已经在用 F#的人也会继续使用 F#,当然,也可能会有一部分人为了能在 JVM 上运行代码而开始使用 Scala.Net。

InfoQ: 会支持什么版本的 Scala 呢?

Martin Odersky: 会随着 Scala 发展更新至最新版本,.NET 版本可能会有几天延迟,主要是需要额外进行构建和测试。

InfoQ: 具体地说,您是怎样把 Scala 移植到.NET 平台上去的呢?有哪些主要的收获和挑战?

Martin Odersky: 据 Miguel Garcia 所说,主要的挑战之一是 Scala 程序往往大量使用了 JDK 的功能,这些是.NET 平台无法支持的。因此,我们必须让编译器可以为.NET 生成合适的代码。交叉编译器已经不是一件容易的事情了,何况它还依赖了大量 JDK 的 API。

IKVM 是个颇有历史的开源项目,由 Jeroen Frijters 负责,能够把 Java 程序转化至 MSIL,同时也包含一套提供了基本 JDK 支持的.NET 类库,这为 Scala 类库到.NET 的移植奠定了坚实的基础。IKVM 编译器可以把 JVM 二进制码转化为.NET 程序集。这种二进制代码级别的改变固然是重要的一步,但也不能直接成为可执行程序,因为它还是包含一些对 JDK 的依赖。因此剩下的事情,则是构建一个预处理器,把 Scala 代码中对 JDK 的依赖替换成 IKVM 里的.NET 等价物。这主要是一些映射方面的工作。

InfoQ: 现在能不能下载到初始版本?我们大概是怎么在.NET 环境下开发 Scala 的呢?

Martin Odersky: 你可以直接在微软的 Visual Studio 里编写 Scala 程序。这个秋天就会有 Scala 的 Visual Studio 插件了,会包含一些 IDE 的基本功能:代码补全,代码浏览,行断点,表达式断点,还有异常报告等等。

目前的插件还不支持代码补完和代码浏览,所以开发人员会更倾向于使用 Eclipse 或 Intellij 来编写代码,然后用 Visual Studio 进行调试。你可以在这里找到一份“使用指南”和有关 Scala.Net 项目的幻灯片。

目前的实现已经很健壮了。Scala.Net 编译器已经可以编译它自身,这大约有十万行 Scala 代码。

InfoQ: 那么运行在 JVM 和 CLR 上的 Scala 程序是如何互通的呢?

Martin Ordersky: .NET 虚拟机,也就是 CLR,它提供的基本类型可以说是 JVM 的超集,其中还有些记录一般的值类型。从编译器编写者的角度来说,做这种双向的转化都是比较容易的。字符串的转化过程就工作地很好,应该不会有被遗漏的死角,测试还是很完备的。IKVM 也在社区里用了许多年了。

InfoQ: 我们来讨论 Scala 本身吧。如果要您用一句话来描述 Scala,您会怎么说?

Martin Odersky: Scala 是一个简洁的,高生产力的编程语言,混合了面向对象和函数式编程的风格,并可以无缝地与 Java 程序代码集成。

InfoQ: 如果有人打算启动一个 Scala 项目,他的同事需要看一些证明,那么目前最大的 Scala 应用有哪些,分别是做什么的呢?

Martin Odersky: 如今已经有许多使用 Scala 的大型应用程序了,从 NASA 发射控制,到 EDFT 和 Trafigura 的核心业务交易应用程序。还有一些最大的应用每天都有人在用,例如 Twitter,Fouresquare 以及 LinkedIn,这些 Scala 应用程序每天都要处理数十亿的 Web 事务。

InfoQ: 如何说服一个经理,让他信任 Scala 而不是他最喜欢的 Java 平台?

Martin Odersky: 信任 Scala 的原因和信任 Java 平台的原因是一样的。它们都使用同样可靠的 JVM。Scala 编译器也很可靠,它是由 Martin Odersky 开发的,这家伙编写了 javac 参考编译器,你每天都在用它编译 Java 程序。Scala 应用程序和 Java 应用程序可以无缝集成,连部署方式都一样。绝大部分人都可以获得更好的开发效率,更快的项目运作周期,以及更少的维护成本。Typesafe 还提供了商业支持。

InfoQ: 您觉得 Scala 在未来一两年内的主要改变和扩展会是什么呢?

Martin Odersky: 针对 Scala 的研发主要是为了简化开发人员的工作。多核和 GPU 系统虽然都已经存在很久了,但如今的编程模型还很难利用到这些计算能力。程序员还在担心扩展性,同步,竞争,死锁等并发问题。未来的 Scala 会让开发人员使用简单的模型,确保任务可以在单台多核系统上执行,也能适应使用 GPU 类型处理器的异构系统。

目前我们已经有了 Scala 并行集合,程序员只需小小改动现有的 Scala 代码就可以利用多核系统的性能优势。Typesafe 的 Akka 更是极大地简化了分布式处理模型,让您可以使用 Erlang 那样健壮的基于消息的计算。EPFL 和斯坦福大学的联合研究,希望可以让性能有较大飞跃,并简化异构系统的编程模型,还有如机器学习,机械设计,气流模拟,金融风险分析,蒙特卡洛以及其他多种大规模并行计算应用。你可以在未来一到两年内看到 Scala 在这些方面的进展。

InfoQ: 那么从语言和周边生态环境的角度来看,您觉得 Scala 在 5 年后会是什么样子呢?

Martin Ordersky: 我希望它能成为业界广泛使用的编程语言。还有就是,我希望在保持当前发展速度的前提下,Scala 社区也能保持现有的理智和友好。

InfoQ: 对于 Java 的未来您有什么个人看法吗?

Martin Odersky: 看上去 Java 平台会继续统治服务器端。我希望这个平台上能够出现比现在要多得多的编程语言。

InfoQ: 您最近创立了 Typesafe 公司。这个公司的目标和商业模型是怎么样的呢?

Martin Odersky: 公司的目标是为 Scala 的商业用户和社区用户提供最好的产品和支持。它提供开发人员和工具,能够尽可能的简化大规模应用程序的开发。公司的商业模型会基于对开源组件的支持,就像 Red Hat,Spring Source 或 Cloudera 那样。

InfoQ: Martin,感谢您接受采访。

关于受访者

Martin Odersky是 Typesafe 的联合创始人,也是 Scala 编程语言的发明者。Martin 是 EPFL(瑞士领先的技术大学)编程研究组的教授。他在整个职业生涯中一直不断追求着一个目标:让写程序这样一个基础工作变得高效、简单、且令人愉悦。他可能比世界上任何一个人写过更多的 Java 和 Scala 代码。他编写了 javac,这是目前大部分 Java 程序员所使用的编译器。他也编写了 Scala 编译器 scalac,可谓是 Scala 社区飞速发展的基石。他著有《Programming in Scala》一书,是最畅销的 Scala 书籍。他曾经就职于 IBM 研究院、耶鲁大学、卡尔斯鲁厄大学以及南澳大利亚大学。在此之前,他在瑞士苏黎世联邦理工学院追随 Pascal 创始人 Niklaus Wirth 学习,并于 1989 年获得博士学位。

查看英文原文: Scala.Net and Scala with Martin Odersky


给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家加入到 InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。

2011-09-15 00:004207
用户头像

发布了 157 篇内容, 共 55.1 次阅读, 收获喜欢 6 次。

关注

评论

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

落地DataOps,必须克服的挑战有哪些?

雨果

DataOps

智慧城市、数字政府、城市大脑、一网统管之间有什么关系

雨果

智慧城市 城市大脑 数字政府 一网统管

哪里有便宜的云服务器?可以下月付款吗?

行云管家

云计算 服务器 云服务器

基于 MinIO 部署单实例 Databend | 新手篇(1)

Databend

基于Delta Lake构建数据湖仓体系

阿里云大数据AI技术

大数据 开源 企业号十月 PK 榜

云网融合赋能智慧转型,“天翼云管 ”开启贴身云管家时代

天翼云开发者社区

更易用的OceanBase|生态工具征文大赛正式开启!

OceanBase 数据库

Pytorch、CUDA和cuDNN的安装图文详解win11(解决版本匹配问题)

timerring

PyTorch cuda 10月月更 cudnn

永久免费低代码开发平台有哪些?

优秀

低代码 低代码开发平台

深入理解什么是TCP 粘包?粘包警察是什么梗?

C++后台开发

网络协议 TCP/IP 后端开发 C++开发 TCP 粘包

【限量招募30人】免费参与SPSS云版本内测

淋雨

SPSS

项目实战:在线报价采购系统(React +SpreadJS+Echarts)

葡萄城技术团队

React 项目实战 采购软件 echart

场景金融持续引发行业关注,4.0时代打造金融服务新生态

易观分析

银行 场景金融

系统服务熔断、限流:常见限流算法&主流熔断技术详解

程序员小毕

Java 程序员 分布式 微服务 SpringCloud

全局图优化:提升 MegEngine 模型推理性能的又一神器

MegEngineBot

深度学习 开源 性能优化 MegEngine 全局图优化

2022年中国篮球内容消费趋势洞察

易观分析

消费 篮球

JscriptScript的类型

渔戈

JavaScript 前端 10月月更

数聚生态,智驭全界!看天翼云如何为智慧园区注入新动能!

天翼云开发者社区

京东云开发者|探寻软件架构的本质,到底什么是架构?

京东科技开发者

架构 软件架构 软件架构师

千锋1024程序员节大咖讲师技术直播火力全开

千锋IT教育

SAP | 消息 MESSAGE

暮春零贰

SAP 消息 10月月更

MetaForce佛萨奇魔豹2.0系统开发技术讲解方案

I8O28578624

现代农业|AIRIOT智慧农业管理解决方案

AIRIOT

低代码 物联网 智慧农业

天翼云推出全栈政务混合云支持私有化运行

天翼云开发者社区

浅谈Mixin、Composition API、Reactive API、Ref API以及readonly🔥

渔戈

前端 Vue3 10月月更

天翼云国产化全栈云服务赋能数字中国建设

天翼云开发者社区

凭什么 31x31 大小卷积核的耗时可以和 9x9 卷积差不多?| 文末附 meetup 回顾

MegEngineBot

深度学习 开源 卷积 MegEngine

开启自然资源管理“智绘”之路!

天翼云开发者社区

JavaScript的类型转换

渔戈

JavaScript 前端 10月月更

高可用系统哪家靠谱?工作原理是什么?

行云管家

高可用 高可用架构 高可用集群

快被Gartner捧上天的Data Fabric数据经纬到底是个啥?

雨果

Data Fabric 数据经纬

Martin Odersky谈Scala.Net及Scala语言_.NET_Michael Stal_InfoQ精选文章