scala 多蒂到底是什么?

xriantvc  于 2022-11-09  发布在  Scala
关注(0)|答案(6)|浏览(288)

我正在阅读有关Scala 3的内容,发现了dotty。我在试着理解这是什么。在某处我读到了“It is new编译器”,在某处我读到了“It is part of Scala 3”,在某处我读到了“Dotty is new Scala 3”。

**谁能给我解释一下DOTTY到底是什么?**用外行术语和技术术语?

  • PS:我已经在StackOverflow上读过dotty的标签信息,但并不是很理解。*
0ve6wy6x

0ve6wy6x1#

让我用Scala 3的基础来解释一下:
Dependent Object Types (DOT)是Scala的新基础,它将成为Scala 3。DOT是路径依赖类型的核心演算,它将Scala语言及其类型系统提升到了一个新的水平。
根据马丁·奥德斯基的this blog
“如果你用慢火煮Scala,等到所有附带的特征都蒸发掉,只剩下最集中的精华,你会得到什么?在这样做了8年后,我们相信我们得到了答案:它是DOT,依赖对象类型的演算,是Scala的基础。”
因此,在Scala 3中,实现了点相关对象类型,作为Scala的基础,而dotty是针对的Scala 3的开发项目。此外,Scala 3支持新的编译器,也被称为Dotty,支持DOT,比当前版本的Scala编译器更强大。从技术上讲,对于Scala 2及更低版本,scalac是编译器,但对于Scala 3,dotc是编译器。
因此,Scala2(下文)和Scala3中的语言规范是相同的,但编译器是新的,它与DOT不同。此外,以DOT为基础,Scala3中还有其他新功能,如union typesintersection-type等。
Dotty是一种新的编程语言吗?
不是的。Dotty是计划成为Scala 3.0的语言和编译器的项目名称,这意味着Dotty是Scala编程语言的下一个版本,带有新的编译器(也称为Dotty)。
我希望这能给你对dotty的初学者的洞察力。

3df52oht

3df52oht2#

Dotty项目包含三个想法:

  • Dotty编程语言
  • dotc编译器
  • 美味的序列化格式

所有这些都有多方面的贡献:

Dotty:基于DOT演算的语言

  • 点演算*(Dependent Object Types)是马丁·奥德斯基(Martin Odersky)小组发展起来的一种新演算。它是专门为一种类似Scala的语言建模而专门设计的。它取代了旧的ν对象演算(即希腊字母ν,发音类似于“new”),后者也是为建模scala而设计的,但包含后来从scala中删除的特性。Dot要简单得多。

Dotty是一种语言,其类型系统和语义深深植根于DOT演算,因此,DOT演算的性质和证明也适用于Dotty。

Dotty:Scala进一步演进的试验床

Dotty不仅被设计为DOT演算的超集,而且足够类似于Scala,以便在Dotty中试验和测试的功能可以稍后移植到Scala上。
特别是,Dotty现在已经成为Scala3的基础,这是对Scala的重大重新设计(例如,在Scala3中,Scala将成为第一种从语言中移除泛型的主流语言,这与其他语言,如JAVA、C♯、VB.NET或C++所做的正好相反)。然而,即使Scala 3是对Scala的重大重新设计,它的意图是任何在Scala 2.13中编译而没有警告和弃用的代码都可以自动转换到Scala 3。IOW:从Scala 2.13到Scala 3的转换过程纯粹是机械的,不需要人工干预。

dotc:新型编译器设计的试验台

dotc编译器使用了一种受时态数据库启发的新颖设计。这完全独立于DOT、Dotty语言或Scala。它可以(也将)用于改进Scala编译器,但这些思想可以应用于任何语言的任何编译器。

dotc:新Scala编译器的基础

总的来说,dotc不仅仅是编译器设计中新思想的试验台,它还是(这是它在成为Dotty的编译器之后的第二个主要目的)为完全重新设计老化的New Scala编译器(Scala编译器的当前第二次迭代,在用Java编写的原始版本之后的版本)的基础。
dotc的设计允许许多现代编译器所期望的特性,而传统的批处理编译器设计不能很好地满足这些特性。现代编译器的工作不仅仅是将一种语言转换成另一种语言(例如,从Scala到JVML),它应该

  • 报告(人类可读、清楚可理解)错误
  • 建议(甚至执行)对这些错误的可能修复
  • 报告相关和有用的警告
  • 针对这些警告建议(甚至执行)可能的改进
  • 执行重构
  • 提供词汇、句法和语义突出显示
  • 协助代码完成
  • 并在编写代码的同时,使用不完整的代码即时执行所有这些操作

NSC的表示编译器和工具箱可以做很多这方面的工作,但dotc在设计时就考虑到了这些需求。

Testy:一种语义树的序列化格式

多蒂项目的第三个贡献是“美味”。Testy是一种中间编译器表示的序列化格式,它具有向前和向后兼容性,紧凑、易于解析,并包含重新构建原始程序所需的所有信息,同时省略了不必要的细节。
Tacy允许保存编译器的内部表示形式,然后将其加载到不同的编译器中并继续编译。
你为什么要这么做?它允许您在源代码和二进制代码(例如.class.jar文件)之间使用中间分发格式。将Scala代码作为.jar分发会丢失大量有关Scala代码的信息。如果您想将这段代码与其他一些Scala代码链接起来,您可能会遇到问题,特别是Scala 3,它将一些类型安全从编译阶段转移到链接阶段。
将其作为源代码OTOH分发需要用户拥有完整的Scala开发环境才能使用库。
对于那些还记得这一点的人来说,这些目标与20世纪80年代的目标有些相似。

nc1teljy

nc1teljy3#

有人能给我解释一下DOTTY到底是什么吗?
正如dotty github page提到的:

Dotty is a research compiler that will become Scala 3

另外,请阅读马丁·奥德斯基的博文Towards Scala 3,其中提到了Scala 2Scala 3
值得强调的是,Scala2和Scala3本质上是同一种语言。编译器是新的,但Scala程序员已经知道的关于Scala 2的几乎所有东西也适用于Scala 3,大多数普通的Scala 2代码也可以在Scala 3上运行,只需稍作修改。
所以why dotty?
Scala 3将是朝着在打字环境中实现OOP和FP融合的全部潜力迈出的一大步
你可以看到它们正在以不同的方式发展:

有关更多信息,请阅读reddit主题Towards Scala 3

bqujaahr

bqujaahr4#

按照官方说法,Dotty是一个research compiler that will become Scala 3--也就是说,它是一个新的Scala编译器,实现了Scala 3。Scala 3基本上与Scala 2的语言相同,但目标是fix warts and improve support for some programming scenarios。Dotty支持的一组功能正在发展中,语言添加最终将由SIP委员会审查。
在其他更改中,Scala 3的类型系统基于一个新的基础,称为点演算;使用这个基础会影响您的程序中可以使用的类型,并增加了这样的信心:如果一个程序通过了Dotty的类型检查器,该程序将不会有type错误。

vngu2lb8

vngu2lb85#

“Dotty”是一种编程语言的名称,类似于Java、Ruby或...Scala是编程语言的名称。Dotty编译器称为dotc。Dotty语言看起来像是Scala语言的分支,使用不同类型的演算(DOT)重新实现。由于使用DOT的经验,Dotty去掉了一些不适合输入的Scala特性,并添加了其他使类型系统更加完整和健壮的特性。Dotty语言和工具集很快就会变成Scala3。

jckbn6z7

jckbn6z76#

Dotty是Scala 3.0中添加的所有东西的综合名称,在过去的四年里一直是Scala社区讨论的主题。随着所有的承诺和进展,发布的时间已经非常近了。我们预计将在今年年底发布。

Dotty会有什么变化?

如果你会问“Scala 3.0是一门新语言”,Martin Ordersky在“A tour of Dotty”中回答“是或不是”,他有理由这样做。如果你问我,我会说是的!它有很多新功能。
1.如果您是初学者,并且只从Scala 3开始,您会发现新功能是一个新概念,不是旧Scala的一部分。
1.如果您处于Scala的中级级别,并且已经熟悉该语言的结构,您将看到一些被移除且不再受支持的功能。
1.如果您是ScalaMaven和FP爱好者,还有一系列的更改,比如类型级派生、匹配类型、隐式函数类型和元编程等等。
1.马丁·奥尔德斯基在最新一期的ScalaDays中分享了这些变化。

突破性变化!

已删除功能的详尽列表如下所示:
1.DelayedInit
1.Macros
1.Existential Types
1.Type Projection
1.Do-While
1.Procedure Syntax
1.Package Objects
1.Early Initializers
1.Class Shadowing
1.Limit 22
1.XML literals
1.Symbol Literals
1.Auto-Application
1.Weak Conformance
1.Nonlocal Returns
1.[this] Qualifier

Dotty的IDE支持。

在Dotty的官网上,只提到官方IDE support for Dotty是Visual Studio Code。我不知道为什么我最喜欢的IDE(IJ)还没有得到正式支持,但有一个解决方法。在“Dotty support on Intellij”上的最新博客中介绍了解决方法。
希望你看了多蒂一眼。

相关问题