我们与Typesafe主席兼首席架构师,Typesafe的共同创始人Martin Odersky讨论了Scala.Net(支持.Net的Scala版本)以及一般的Scala。 Martin是Scala编程语言的创建者,也是瑞士领先的技术大学EPFL的编程研究小组的教授。 在他的整个职业生涯中,Martin的唯一目标是使编写程序的基本工作变得更快,更容易和更有趣。
在此过程中,他亲自编写的Java和Scala代码行比世界上几乎任何其他人都要多。 他写了javac(即当今大多数Java程序员使用的编译器)和scalac(即快速增长的Scala社区使用的编译器)。 他撰写了有关Scala的畅销书“ Scala中的编程”。 1989年,他从ETHZürich获得了Pascal的创建者Niklaus Wirth的博士学位,之后,他曾在IBM Research,耶鲁大学,卡尔斯鲁厄大学和南澳大利亚大学任职。
InfoQ:几年前,已经有一个.NET的Scala版本消失了。 那么,为什么您认为在.NET上提供Scala重要呢?
马丁·奥德斯基(Martin Odersky): Scala .Net具有复杂的历史,在黑客社区之外很少讨论。 像Nikolay Mihaylov和Lukas Rytz这样的人在创建交叉编译器方面取得了长足的进步,EPFL Scala小组的成员Miguel Garcia一直在努力工作,以使交叉编译器实际上将自己引导到.Net环境-为了拥有一个可执行的Scala.net,它可以编译自己的源代码-他将其称为“比例巨大的经典鸡肉和鸡蛋问题”。
此外,对于开发人员和一般公司来说,在.Net上使用Scala有价值的原因有很多。 开发人员只需学习一种语言即可适应两种环境,并且公司可以轻松地在平台之间移动稀缺的资源,优秀的开发人员,以节省资金并提高灵活性。
鉴于Scala简洁而高效的本质,通过在.Net上使用Scala,开发人员可以在两个主要的行业平台JVM和.Net上快速部署应用程序。 .Net为多种语言提供了一个集成平台,Scala的此实现可以很好地互操作。 您可以使用现有的.Net库或应用程序,而无需在Scala中重新编写所有内容。 最终,这意味着可以将为.Net和JVM环境创建的许多工具和应用程序相互移植。 这对每个人都有利。
InfoQ:您如何认为Scala.Net将与F#竞争?
马丁·奥德斯基(Martin Odersky):很少,也许随着时间的流逝会更多。 Scala提供了完全不同的功能,即面向对象与功能编程风格的集成。 .Net上的Scala为希望编写希望同时在JVM和.Net上运行的代码的开发人员提供了最大的收益。 大多数使用F#的人很可能会继续使用它。
有些人可能也开始在.Net上使用Scala,因为它将允许他们在JVM上运行该代码。
InfoQ:将支持哪些Scala版本?
Martin Odersky:将支持最新版本的Scala,在构建和测试.Net版本时,可能会延迟几天。
InfoQ:您究竟如何将Scala迁移到.NET,主要的优点和挑战是什么?
Martin Odersky:根据Miguel Garcia的说法,主要挑战之一是Scala程序大量使用Java JDK,而.Net只是不支持此功能。 因此,我们必须提出一个为.Net生成合适代码的编译器。 尽管交叉编译器是一项艰巨的工作,但它只能在JDK上运行,因此其源代码对JDK API有着很多依赖性。
由Jeroen Frijters驱动的一个长期运行的开源项目IKVM(可将Java程序转换为MSIL)和一个提供基本JDK支持的.Net库,为将Scala库移植到.Net奠定了良好的基础。 IKVM编译器采用JVM字节代码并将其转换为.net程序集。 字节代码级别的更改虽然迈出了一大步,但它本身并没有使我们真正地进行引导,因为我们仍然剩下JDK依赖项。 因此,任务变成了创建预处理器,该预处理器将修改Scala源代码,直接用IKVM .Net等效项替换JDK依赖项,这是主要的映射练习。
InfoQ:有一个可供下载的初步版本。 我应该如何使用Scala for .NET开发程序?
Martin Odersky:因此,您可以直接在MS Visual Studio中开发Scala程序。 今年秋天,用于Scala的Visual Studio插件将支持IDE预期的基本功能:代码完成,代码浏览,换行符,表达式换行和异常报告等。
目前,当前插件尚不支持代码完成或代码浏览,因此某些开发人员可能更喜欢使用Eclipse或Intellij在JVM上编写代码,然后在Visual Studio下进行最终调试。 您可以在此处找到“使用方法”指南,并在此处找到Scala.Net项目的幻灯片演示概述。
当前的实现已经非常强大。 Scala.Net编译器会自行编译,大约100k行Scala代码。
InfoQ:在JVM和CLR上运行的Scala应用程序将如何互操作?
Martin Odersky: .Net虚拟机CLR提供的原始类型是JVM类型的超集。 还有一些值类型,类似于记录。 从编译器作者的角度来看,很容易从一种转换为另一种。 字符串可以很好地与转换过程配合使用。 经过充分测试,不太可能遗漏任何极端情况。 IKVM在IKVM社区中已有多年使用。
InfoQ:现在让我大致切换到Scala。 如果我要您用一个句子描述Scala,那么该句子的外观如何?
Martin Odersky: Scala是一种简洁,高效的编程语言,在与Java应用程序代码无缝集成的同时融合了面向对象和功能样式。
InfoQ:如果有人计划启动一个Scala项目,她的同事将要求概念证明。 那么,目前使用Scala的最大应用程序是什么?用途是什么?
Martin Odersky:在EDFT和Trafigura等公司,有许多基于Scala的大型应用程序,从NASA发射控制到关键业务交易应用程序。 Twitter,Foursquare和LinkedIn的公众每天都在使用其中一些最大的应用程序,其中Scala应用程序每天处理数十亿次网络事务。
InfoQ:您对经理说什么,为什么他应该信任Scala而不是使用他最喜欢的Java平台?
Martin Odersky:出于对Java平台的信任,您可以信任Scala。 它使用相同的高度可靠的JVM。 Scala编译器可靠可靠,由Martin Odersky编写,Martin Odersky是编写用于Java程序的参考javac编译器的人。 Scala应用程序与Java应用程序无缝集成,并且操作部署是相同的。 最重要的是,您将获得更高效的开发,更快的项目周转时间和更低的维护成本。 并且得到Typesafe的全面商业支持。
InfoQ:如果我们谈论未来的1,2年,Scala将进行的下一步变更或扩展是什么?
Martin Odersky: Scala研发的重点是努力使开发人员的事情变得更简单。 多核和基于GPU的系统就在这里,而利用当今的编程模型很难利用这种能力。 程序员必须担心规模,同步,竞争,死锁和许多其他并发问题。 未来的Scala版本将使开发人员能够使用更简单的模型,并确保无论部署在单个多核系统上还是包含GPU样式处理器的异构系统上,一切都可以正常工作。
今天,您有了Scala并行集合,使程序员能够使用现有的Scala代码,并且进行较小的更改即可获得多核系统提供的性能。 通过Typesafe,您可以使用Akka大大简化了分布式处理模型,从而提供了基于健壮消息传递的计算(如Erlang)。 EPFL和斯坦福大学的联合研究旨在为异构系统在机器学习,机械设计,气流模拟,财务风险分析,蒙特卡洛等众多大型scala并行应用中提高性能并简化程序员模型。 在接下来的1-2年中,您将开始看到这些东西到达Scala。
InfoQ:那么您认为Scala在5年后在语言及其周围生态系统方面会是什么样?
马丁·奥德斯基(Martin Odersky):我希望它将成为一种已建立的编程语言,并在业界得到广泛使用。 我还希望,即使Scala社区目前Swift发展,也将保持其如今的智慧和友好水平。
InfoQ:您对Java的未来有何个人看法?
Martin Odersky:看来Java平台将继续在服务器上占据主导地位。 我希望该平台之上的语言多样性比迄今为止所看到的更多。
InfoQ:您最近成立了Typesafe公司。 那么公司的目标和商业模式是什么?
Martin Odersky:该公司旨在为Scala的商业和社区用户提供最佳产品和支持。 它将为开发人员提供尽可能简单地创建可扩展应用程序的工具。 公司的业务模型基于对开源堆栈的支持,类似于Red Hat,Spring Source或Cloudera。
InfoQ:马丁,谢谢你接受我们的采访。
关于被访者
Martin Odersky是Typesafe的共同创始人,是Scala编程语言的创建者,并且是瑞士领先的技术大学EPFL的编程研究小组的教授。 在他的整个职业生涯中,Martin的唯一目标是使编写程序的基本工作变得更快,更容易和更有趣。 在此过程中,他亲自编写的Java和Scala代码行比世界上几乎任何其他人都要多。 他写了javac(即当今大多数Java程序员使用的编译器)和scalac(即快速增长的Scala社区使用的编译器)。 他撰写了有关Scala的畅销书“ Scala中的编程”。 1989年,他从ETHZürich获得了Pascal的创建者Niklaus Wirth的博士学位,之后,他曾在IBM Research,耶鲁大学,卡尔斯鲁厄大学和南澳大利亚大学任职。
翻译自: https://www.infoq.com/articles/ScalaNETInterview/?topicPageSponsorship=c1246725-b0a7-43a6-9ef9-68102c8d48e1