Dotty究竟是什么?

Suk*_*aar 20 scala dotty

我正在阅读Scala 3并发现了dotty.我试图了解它是什么.我在某处读到"这是新的编译器",在某处我读到"它是Scala 3的一部分",在某处我读到"Dotty是新的Scala 3".

有人可以向我解释一下究竟是什么?在外行和技术方面?

PS:我已经在StackOverflow上读过了的标签信息但是并没有真正理解它.

Ra *_* Ka 25

让我解释一下Scala 3的基础:

从属对象类型(DOT)是用于Scala的一个新的基础这是要斯卡拉3.DOT是路径依赖类型核心计算,它将Scala语言及其类型系统提升到新的水平.

根据Martin Odersky撰写的这篇博客:

"如果你在缓慢的火焰中煮沸Scala并等到所有偶然特征蒸发并且只剩下最浓缩的精华,你会得到什么?这样做8年之后我们相信我们有答案:它是DOT,依赖对象类型的微积分这是斯卡拉的基础."

因此,在Scala 3中,DOT - 依赖对象类型已经被实现为Scala的基础,DOTTY是用于使用DOT开发Scala 3的项目.此外,Scala 3适用于新编译器,也称为支持DOT的Dotty,它比当前版本的Scala编译器更强大.从技术上讲,对于Scala 2及更低版本,scalac是编译器,但对于Scala 3,它dotc是一个编译器.

因此,Scala 2(下面)和Scala 3中的语言规范是相同的,但是编译器是新的,它不需要DOT.此外,以DOT为基础,Scala 3还有其他新功能,例如联合类型,交叉类型等.

DOTTY是新的编程语言吗?

斑点狗是一种语言和编译器,即将成为斯卡拉3.0项目名称,这意味着,疯疯癫癫的是Scala编程语言下一个版本,一个新的编译器(也叫斑点狗).

我希望这会让你初学者洞察傻瓜.

  • dottyc不存在,编译器工具称为dotc。而且语言规范必须针对Scala 3进行发展。 (3认同)
  • 这充满了错误。Dotty 只是即将(马上)成为下一代 Scala(Scala 3.0 及更高版本)的语言的代号。没有名为 dotty 的编译器。Dotty 编译器目前称为 dotc,但在不久的将来将更名为 scalac。而且Dotty并不“支持”DOT……DOT是一种类型演算,用于证明Dotty的类型系统是健全的。 (3认同)

pra*_*upd 6

有人可以向我解释一下究竟是什么?

正如dotty github页面提到:

Dotty is a research compiler that will become Scala 3
Run Code Online (Sandbox Code Playgroud)

另外,阅读Martin Odersky的博客文章Towards Scala 3,其中提到了Scala 2 vs Scala 3:

值得强调的是,Scala 2和Scala 3基本上是同一种语言.编译器是新的,但几乎所有Scala程序员已经了解Scala 2的内容也适用于Scala 3,大多数普通的Scala 2代码也可以在Scala 3上运行,只需进行少量更改.

那么,为什么多点的?

Scala 3将是朝着实现OOP和fp在打字环境中融合的全部潜力迈出的一大步

你可以看到他们的发展方式不同:

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

  • dottyc不存在,编译器工具称为dotc。 (3认同)

Jör*_*tag 6

Dotty项目包含三个想法:

  • Dotty编程语言
  • dotc编译器
  • TASTY序列化格式

所有这些都带来了很多事情:

Dotty:一种基于DOT微积分的语言

DOT微积分(相关对象类型)是由马丁·奥德斯基的研究小组开发出一种新的结石。它专门设计用来很好地建模类似Scala的语言。它替代了同样用于建模Scala 的较旧的ν对象演算(即希腊字母ν,发音为“ new”),但其中包含的特征后来被从Scala中删除。DOT更简单。

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

Dotty:Scala进一步发展的测试平台

斑点狗的目的不仅是要DOT演算的一个超集,但为类似足以斯卡拉该功能试用和测试斑点狗以后可以移植到Scala的。

特别地,Dotty现在已成为Scala 3的基础,这是对Scala的重大重新设计(例如,对于Scala 3,Scala将成为第一种从该语言中删除泛型的主流语言,这与Java,C?,VB.NET或C ++等其他语言也在做什么)。但是,即使Scala 3是对Scala的重大重新设计,也可以将任何在没有警告且没有弃用的情况下在Scala 2.13中编译的代码都可以自动转换为Scala3。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这些设计都是从头开始考虑这些要求的。

TASTY:语义树的序列化格式

Dotty项目的第三项贡献是TASTY。TASTY是一种中间编译器表示形式的序列化格式,具有向前和向后兼容性,紧凑,易于解析,并包含重构原始程序所需的所有信息,同时省去了不必要的细节。

TASTY允许保存编译器的内部表示,然后将其加载到其他编译器中并继续进行编译。

你为什么想做这个?它使您可以在源代码和二进制代码(例如.class.jar文件)之间使用中间分发格式。将scala代码分发为.jars会丢失许多有关Scala代码的信息。然后,如果您想将此代码与其他Scala代码链接,则可能会遇到问题,尤其是 Scala 3,它将一些类型安全性从编译阶段移至链接阶段。

将其作为源代码OTOH分发时,要求用户需要具有完整的Scala开发环境才能使用该库。

对于那些记得它的人,目标有些类似于ANDF在1980年代尝试做的。

  • “通过 Scala 3,Scala 将成为第一个从该语言中删除泛型的主流语言,这与 Java、C♯、VB.NET 或 C++ 等其他语言所做的恰恰相反”——多么奇怪的说法...泛型并没有从语言中删除。您可能指的是:https://contributors.scala-lang.org/t/proposal-to-remove-existential-types-from-the-language/2785/8“从 Scala 2.13 到Scala 3 是纯粹机械的,不需要人工干预”——对于很多代码,但肯定不是全部。 (2认同)
  • @user“如果它们的编码方式与 Scala 2 中的相同,我认为人们不能说 Scala 3 会真正删除泛型”——所以你同意我的说法,“即使类型构造函数语法是更基本的语法糖,不会从语言中删除泛型”。甚至 Jörg 也表示“现有的类型构造函数语法将被保留”。 (2认同)
  • 顺便说一句,Nim 语言有一个“typedesc”类型,允许将类型参数传递给函数——它们在功能上等同于“[T]”语法(这也是允许的)。 (2认同)
  • 顺便说一句,Martin Odersky 在 2019 年[此处](https://contributors.scala-lang.org/t/scala-3-type-parameters-and-type-members/3472/3) 写道,他们删除了类型参数作为类型成员编码并再次使其成为一流功能,因此您可能需要更新对此的答案。 (2认同)
  • @用户哈哈!多么讽刺。当然,从来没有从语言中删除泛型的情况......正如我上面指出的,具有类型参数的类*是*泛型类。 (2认同)