Dotty到底是什么?

时间:2018-07-26 04:08:57

标签: scala dotty

我正在阅读有关 Scala 3 的信息,并发现了 dotty 。我试图了解它是什么。在某处我读到“这是新的编译器”,在某处我读到“它是Scala 3的一部分”,在某处我读到“ Dotty是新的Scala 3”。

有人可以向我解释到底是什么东西吗?用外行和技术术语来说?

PS:我已经阅读了StackOverflow上的标签信息,但并不太了解。

6 个答案:

答案 0 :(得分:17)

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

Dependent Object Types (DOT)是Scala的新基础,它将成为 Scala 3 。 DOT是针对路径相关类型的 核心演算 ,它将Scala语言及其类型系统提升到了一个新的水平。

根据Martin Odersky的this blog

  

“如果在慢火上煮Scala并等到所有   附带特征消失,只有最集中的本质   遗迹?经过8年的努力,我们相信我们的答案是:   Scala是DOT(依赖对象类型的演算)的基础。”

因此,在Scala 3中,已实现 DOT-依赖对象类型作为Scala的基础,并且 DOTTY 是使用开发Scala 3的项目。 > DOT 。另外,Scala 3可在支持DOT的新编译器(也称为 Dotty )上工作,并且比当前版本的Scala编译器更强大。从技术上讲,对于Scala 2和更低版本,scalac是编译器,而对于Scala 3,dotc是编译器。

因此,语言规范在Scala 2(以下)和Scala 3中相同,但是编译器是新的,对DOT进行了糖化。此外,以DOT为基础,Scala 3中还有其他新功能,例如union typesintersection-type等。

  

DOTTY是新的编程语言吗?

不。 Dotty是计划成为Scala 3.0的语言和编译器的项目名称,这意味着DOTTY是Scala编程语言的下一个版本,带有新的编译器(也称为Dotty)。

我希望这会使您对dotty初学者有所了解。

答案 1 :(得分:6)

  

有人可以向我解释到底是什么吗?

dotty github page提到:

Dotty is a research compiler that will become Scala 3

还请阅读Martin Odersky的博客文章Towards Scala 3,其中提到 Scala 2 Scala 3

  

值得强调的是,Scala 2和Scala 3从根本上说是   相同的语言。编译器是新的,但几乎所有Scala   程序员已经知道Scala 2也适用于Scala 3,并且   大多数普通的Scala 2代码也可以在Scala 3上运行,只有很小的一部分   变化。

所以why dotty?

  

Scala 3将是朝着充分发挥其潜力的方向迈出的一大步   在类型设置中将OOP和fp融合

您会看到它们的开发方式有所不同:

有关更多信息,请参阅reddit线程Towards Scala 3

答案 2 :(得分:3)

Dotty项目包含三个想法:

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

所有这些都贡献了很多东西:

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

DOT演算(从属对象类型)是Martin Odersky小组开发的一种新演算。它专门设计用来很好地建模类似Scala的语言。它代替了旧的νObject Calculus (希腊字母ν,发音为“ new”),该模型也旨在对Scala进行建模,但包含后来从Scala中删除的功能。 DOT更简单。

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

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

Dotty不仅被设计为DOT演算的超集,而且还 与Scala足够相似,可以在Dotty中试用和测试的功能可以稍后移植到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的编译器之后,这是它的第二个主要目的)是完全重新设计MSDN的基础。老化的 New Scala编译器(Scala编译器的当前第二次迭代,它是用Java编写的原始Scala的迭代)。

dotc的设计提供了当今现代编译器所期望的许多功能,而传统批处理编译器设计无法很好地满足这些功能。现代编译器的工作不仅仅是将一种语言变成另一种语言(例如,从Scala到JVML),它还应该

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

NSC的演示文稿编译器和工具箱可以完成很多工作,但是dotc的设计是从头开始考虑这些要求的。

TASTY:语义树的序列化格式

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

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

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

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

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

答案 3 :(得分:1)

Dotty是Scala 3.0中添加的所有内容的总称,在过去四年中一直是Scala社区中讨论的话题。有了所有的承诺和进展,发布时间就到了。我们可以预计在今年年底发布。

Dotty会发生什么变化?

如果您要问“ Scala 3.0是一种新语言”,马丁·Ordersky 在“ {{ 3}}”他有理由。如果你问我,我会说是的!它具有很多新功能。

  1. 如果您是初学者,并且仅从Scala 3开始,您会发现新功能是不属于旧Scala的新概念。
  2. 如果您是scala的中级人员,并且已经熟悉该语言的构造,那么您将看到一些已删除且不再受支持的功能。
  3. 如果您是Scala专家和FP发烧友,那么这里还会为您提供一系列更改,例如类型级别派生,匹配类型,隐式函数类型,元编程等。
  4. 在上一期的ScalaDays中,马丁·Ordersky在“ first_value”中共享了这些更改。

惊人的改变!

以下是“已删除功能”的详尽列表:

  1. A tour of Dotty
  2. A tour of Dotty
  3. DelayedInit
  4. Macros
  5. Existential Types
  6. Type Projection
  7. Do-While
  8. Procedure Syntax
  9. Package Objects
  10. Early Initializers
  11. Class Shadowing
  12. Limit 22
  13. XML literals
  14. Symbol Literals
  15. Auto-Application
  16. Weak Conformance

IDE对Dotty的支持。

在Dotty的官方网站上,它仅提及官方Nonlocal Returns是Visual Studio。我不知道为什么我的最爱IDE(IJ)尚未得到正式支持但有一种解决方法。最新的博客“ [this] Qualifier”中介绍了解决方法。

希望您能一窥Dotty。

答案 4 :(得分:0)

正式来说,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的类型系统基于一个称为DOT演算的新基础。使用此基础会影响您可以在程序中使用的类型,并增加信心,如果程序通过Dotty的类型检查器,则该程序将不会出现 type 错误。

答案 5 :(得分:0)

“ Dotty”是一种编程语言的名称,与Java,Ruby或... Scala一样,都是编程语言的名称。 Dotty编译器称为dotc。 Dotty语言看起来像Scala语言的分支,使用不同类型的演算(DOT)重新实现。由于具有DOT的经验,Dotty放弃了一些不是Type-Sound的Scala功能,并添加了其他使Type系统更加完整和健壮的功能。 Dotty语言和工具集将很快成为Scala 3。