免费下载案例集|20+数字化领先企业人才培养实践经验 了解详情
写点什么

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

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

关注

评论

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

数字孪生智慧市政三Web3D可视化管理平台

2D3D前端可视化开发

物联网 可视化 智慧城市 数字孪生 智慧市政

大模型训练:Transformer模型、架构与训练方法

百度开发者中心

人工智能 大模型训练

优化模型之”标注错误“

矩视智能

深度学习 机器视觉

MySQL的自增id会用完吗?用完怎么办

互联网工科生

MySQL MySQL自增ID

低代码如何赋能实体经济走向数实融合

力软低代码开发平台

重构AI智慧未来,小度全屋智能生态再进化

新消费日报

双翻页大屏看书,Mate X5上的华为阅读让你“阅”如纸上

最新动态

私有化部署助力企业信息安全,WorkPlus助您完美替代企微、钉钉、飞书!

WorkPlus

全球领先的即时通讯厂家,为企业提供卓越沟通解决方案

WorkPlus

数据库安全运维是什么意思?数据库安全运维系统用哪家好?

行云管家

数据库 数据安全 数据库安全 数据安全运维

报名倒计时 | 超硬核!第四届中国云计算基础架构开发者大会邀你参会

OpenAnolis小助手

云原生 深圳 龙蜥社区 机密计算 CID

七个开发者不可不知的VS Code小技巧

树上有只程序猿

vscode

华新丽华∣国产化价值替代的先行者

用友BIP

用友 Fast by BIP

Hyperworks对比其他仿真软件有哪些特色_Hyperworks介绍

智造软件

CAE软件 altair hyperworks

语音识别技术的行业应用与发展趋势

来自四九城儿

开源贡献难吗?

字节跳动云原生计算

flink 开源 字节

OpenHarmony应用全局的UI状态存储:AppStorage

OpenHarmony开发者

OpenHarmony

ABAQUS常用的插件及使用介绍-ABAQUS软件教程

思茂信息

abaqus 有限元仿真 有限元技术

大模型训练的轻量化视觉预训练模型

百度开发者中心

人工智能 大模型训练

内部即时通讯软件,为企业协同办公保驾护航

WorkPlus

Snagit for mac(屏幕截图工具) 2023.2.4永久激活版

mac

苹果mac Windows软件 屏幕截图软件 Snagit 2023

IPQ9574, IPQ9554, IPQ4029, IPQ5018-IPQ6010- high-performance multi-core cpu-leading WiFi revolution

wifi6-yiyi

ipq9574

流程图如何制作?好用的11款流程图软件盘点!

彭宏豪95

效率 流程图 流程图绘制工具 办公软件 绘图工具

选择美国高防服务器,保障您的业务不受网络攻击

一只扑棱蛾子

美国高防服务器 高防服务器

深度学习CV任务的突破与优化

百度开发者中心

人工智能 深度学习 大模型训练

NFTScan 支持非 EVM 公链的 NFT Collection 的认证功能

NFT Research

NFT NFT\ NFTScan

九月 Web3 游戏报告: 数量增长,巨头入场,用户获取和留存仍存挑战

Footprint Analytics

区块链游戏 NFT Web3 游戏 Web3 Games

HarmonyOS语言基础类库开发指南上线啦!

HarmonyOS开发者

HarmonyOS

通过 Random 和 UUID 算法实现 JMeter 的随机数生成

Liam

程序员 测试 Jmeter 测试工具 随机数

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