写点什么

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:004200
用户头像

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

关注

评论

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

在浏览器里使用SAPGUI里的SE80

汪子熙

JavaScript SAP abap Fiori SAP UI5

会说话的ABAP report

汪子熙

SAP abap SAPGUI

如何使用腾讯云提供的云主机

汪子熙

腾讯云 云主机 Cloud

ABAP宏的调试

汪子熙

调试 SAP abap macro

设计千万级学生管理系统的考试试卷存储方案

俞嘉彬

如何使用代码获得一个function module的Where Used List

汪子熙

CRM SAP abap SAPGUI

高性能 JavaScriptの六 -- 老生常谈Ajax

空城机

JavaScript ajax 大前端 5月日更

如何给VirtualBox虚拟机的ubuntu LVM分区扩容

汪子熙

虚拟机 Cloud virtualbox CloudFoundry

S/4HANA for Customer Management里的搜索分页处理

汪子熙

CRM SAP abap S/4HANA

CRM订单状态的Open, In process和Completed这些条目是从哪里来的

汪子熙

CRM SAP ERP abap

架构实战营 - 模块四作业

Sun

如何将iso文件安装到Virtual里的ubuntu去

汪子熙

Linux ubuntu windows 虚拟机 Windows 10

SAPGUI里实现自定义的语法检查

汪子熙

SAP abap SAPGUI 语法检查

人生算法:做事要闭环

石云升

读书笔记 职场经验 5月日更 人生算法

SAP Fiori里的List是如何做到懒加载Lazy load的

汪子熙

JavaScript SAP Fiori SAP UI5

如何用ABAP代码读取CDS view association的数据

汪子熙

CDS SAP abap CDS view

金融科技如何在产业互联网蓝海中扬帆远航?大数据、区块链与物联网应用被看好

CECBC

观察者模式在One Order回调函数中的应用

汪子熙

CRM SAP abap

优化docker镜像的几种方法

运维研习社

Docker 镜像 优化技巧 5月日更

如何证明CRM WebClient UI上的应用是有状态(Stateful)的

汪子熙

CRM SAP abap WebClient UI

如何在ubuntu上安装virtualbox的driver module vboxdrv

汪子熙

ubuntu 虚拟机 vboxdrv 驱动

如何使用SAP Cloud for Customer里的ABSL代码调用Web service

汪子熙

SAP C4C Cloud for Customer

架构师训练营 作业四

开拓纪

S4HANA和CRM Fiori应用的搜索分页实现

汪子熙

CRM SAP Fiori SAP UI5 S/4HANA

如何使用Putty登录安装在VirtualBox里的ubuntu

汪子熙

ubuntu windows 虚拟机

ABAP的语法高亮是如何在浏览器里显示的

汪子熙

SAP abap SAPGUI 语法高亮

CRM, C4C和Hybris的工作流简介

汪子熙

CRM SAP C4C Hybris Commerce Cloud

那些年我用过的SAP IDE

汪子熙

ide SAP abap SAPGUI

如何在Chrome development tool里查看C4C前台发送的未经 GZIP 压缩之前的请求细节

汪子熙

chrome SAP C4C Chrome开发者工具

ABAP和Java里关于DEFAULT(默认)机制的一些语言特性

汪子熙

SAP abap Netweaver SAPGUI

ABAP git客户端的简单介绍

汪子熙

GitHub SAP abap

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