热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Scala.Net和Scala与MartinOdersky

我们与Typesafe主席兼首席架构师,Typesafe的共同创始人MartinOdersky讨论了Scala.Net(支持.Net的Scala版本&#

我们与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




推荐阅读
  • 深入解析C++ Atomic编程中的内存顺序
    在多线程环境中,为了防止多个线程同时修改同一数据导致的竞争条件,通常会使用内核级同步对象,如事件、互斥锁和信号量等。然而,这些方法往往伴随着高昂的上下文切换成本。本文将探讨如何利用C++11中的原子操作和内存顺序来优化多线程编程,减少不必要的开销。 ... [详细]
  • 本文档旨在提供C语言的基础知识概述,涵盖常量、变量、数据类型、控制结构及函数定义等内容。特别强调了常量的不同类型及其在程序中的应用,以及如何正确声明和使用函数。 ... [详细]
  • Golang与微服务架构:构建高效微服务
    本文探讨了Golang在微服务架构中的应用,包括Golang的基本概念、微服务开发的优势、常用开发工具以及具体实践案例。 ... [详细]
  • VMware 15.5.7 中文版激活方法
    本文提供了一种有效的方法来激活 VMware 15.5.7 的中文版本,同时介绍了如何利用最新的激活码进行操作,确保用户能够顺利使用。 ... [详细]
  • 本文介绍了多种Eclipse插件,包括XML Schema Infoset Model (XSD)、Graphical Editing Framework (GEF)、Eclipse Modeling Framework (EMF)等,涵盖了从Web开发到图形界面编辑的多个方面。 ... [详细]
  • 深入理解Java反射机制
    本文将详细介绍Java反射的基础知识,包括如何获取Class对象、反射的基本过程、构造器、字段和方法的反射操作,以及内省机制的应用。同时,通过实例代码加深对反射的理解,并探讨其在实际开发中的应用。 ... [详细]
  • 本文详细解析了Java中流的概念,特别是OutputStream和InputStream的区别,并通过实际案例介绍了如何实现Java对象的序列化。文章不仅解释了流的基本概念,还探讨了序列化的重要性和具体实现步骤。 ... [详细]
  • 本文介绍了在解决Hive表中复杂数据结构平铺化问题后,如何通过创建视图来准确计算广告日志的曝光PV,特别是针对用户对应多个标签的情况。同时,详细探讨了UDF的使用方法及其在实际项目中的应用。 ... [详细]
  • 深入解析JavaScript中的this关键字
    本文详细探讨了JavaScript中this关键字的具体指向及其在不同场景下的应用,通过实例和图表帮助读者更好地理解和掌握这一核心概念。 ... [详细]
  • 本文将详细介绍如何配置并整合MVP架构、Retrofit网络请求库、Dagger2依赖注入框架以及RxAndroid响应式编程库,构建高效、模块化的Android应用。 ... [详细]
  • 本文介绍了如何使用Java编程语言实现凯撒密码的加密与解密功能。凯撒密码是一种替换式密码,通过将字母表中的每个字母向前或向后移动固定数量的位置来实现加密。 ... [详细]
  • 本教程旨在指导开发者如何在Android应用中通过ViewPager组件实现图片轮播功能,适用于初学者和有一定经验的开发者,帮助提升应用的视觉吸引力。 ... [详细]
  • 构建高性能Feed流系统的设计指南
    随着移动互联网的发展,Feed流系统成为了众多社交应用的核心组成部分。本文将深入探讨如何设计一个高效、稳定的Feed流系统,涵盖从基础架构到高级特性的各个方面。 ... [详细]
  • GCC(GNU Compiler Collection)是GNU项目下的一款功能全面且高效的多平台编译工具,广泛应用于Linux操作系统中。本文将详细介绍GCC的特点及其基本使用方法。 ... [详细]
  • 本文探讨了一个在Spring项目中常见的问题——当pom.xml文件中引入了servlet依赖但未指定其作用域为provided时导致的应用启动失败。文章详细分析了错误原因,并提供了有效的解决方案。 ... [详细]
author-avatar
忽然想起你_静_970
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有