HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

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

关注

评论

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

搞一搞Elasticsearch

北漂码农有话说

联邦学习初识

soolaugust

学习

性能全开的十代酷睿,造就惠普光影精灵 6 的电竞燃魂

最新动态

终于可以职业规划了么?

escray

学习 面试

一看就懂的三次握手

书旅

TCP 三次握手 操作系统 协议族

Week 11命题作业

Jeremy

公司想要大龄程序员么?

escray

学习 面试

我是合适的人选么?

escray

学习 面试

简单交互式页面的思考(C)

Alex

指针 C语言 交互设计

四十不惑,准备面试

escray

学习 面试

星火PLUS交易所打造无边界数字经济联盟,掀起币圈追捧热潮

InfoQ_967a83c6d0d7

Week 11 学习总结

Jeremy

MySQL系列(一):MySQL深入学习先导篇之基础架构

z小赵

MySQL 数据库

再见C++

Sunny.

c++ 踩坑

究竟要找什么样的工作?

escray

学习 面试

【Elasticsearch 技术分享】—— Elasticsearch ?倒排索引?这都是什么?

程序员小航

elasticsearch ELK 倒排索引 ES 技术分享

Flink的2种部署模式-2

小知识点

scala 大数据 flink

一个@Transaction哪里来这么多坑?

程序员DMZ

spring 事务 读写分离

SpreadJS 应用案例:电力自动化在线数据采集报表系统

葡萄城技术团队

SpreadJS 电力 报表

我以后去做什么,技术还是业务?

escray

学习 面试 职业规划

一文读懂jar包的小秘密

程序那些事

Java jar jar包的小秘密 java解密

如何使 Grafana as code

郭旭东

翻译 Grafana

【API进阶之路】逆袭!用关键词抽取API搞定用户需求洞察

华为云开发者联盟

接口 软件开发 API 华为云 API Explorer平台

对于结果不同程度的追求,决定了这个人的身价

非著名程序员

程序员 个人成长 思维模型 结果思维

如何通过技术面试?

escray

学习 面试

大数据技术发展(三):Spark 代替 Hadoop ? Spark Or Flink ?

cristal

Java 大数据 flink hadoop spark

3 分钟生成一个单元测试报告,这个样式爱了

程序员小富

Java 测试

a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站…z站?

程序员生活志

我喜欢的工作,喜欢我么?

escray

学习 面试

Docker 的前世今生

哈喽沃德先生

Docker 容器 微服务 虚拟化

Centos7下service配置知识

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