38

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

有人可以向我解释一下 dotty 到底是什么吗?用外行和技术术语?

PS:我已经在 StackOverflow 上阅读了的标签信息,但并没有真正理解。

4

6 回答 6

42

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

依赖对象类型 (DOT)是 Scala的新基础,它将成为Scala 3。DOT 是路径相关类型的核心演算,可将 Scala 语言及其类型系统提升到新的水平。

根据Martin Odersky 的博客

“如果你用慢火煮 Scala,然后等到所有附带的特征都蒸发掉,只剩下最浓缩的精华,你会得到什么?这样做了 8 年,我们相信我们有了答案:它是 DOT,依赖对象类型的演算,这是 Scala 的基础。”

因此,在 Scala 3 中,DOT - Dependent Object Type已作为 Scala 的基础实现,而DOTTY是使用DOT开发 Scala 3 的项目。此外,Scala 3 使用新的编译器,也称为Dotty,它支持 DOT,并且比当前版本的 Scala 编译器更强大。从技术上讲,对于 Scala 2 及以下版本,scalac是编译器,但对于 Scala 3,dotc是编译器。

因此,Scala 2(下)和 Scala 3 中的语言规范是相同的,但编译器是新的,对 DOT 进行了脱糖。此外,以 DOT 为基础,Scala 3 中还有额外的新特性,例如联合类型交叉类型等。

DOTTY 是新的编程语言吗?

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

我希望这能让你初学者了解 dotty。

于 2018-07-26T07:06:55.613 回答
13

Dotty 项目包含三个想法:

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

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

Dotty:基于 DOT 演算的语言

DOT Calculus (Dependent Object Types) 是由 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 中编译时没有警告和弃用的任何代码都可以自动转换为 Scala 3。 IOW:从 Scala 2.13 到 Scala 3 的转换过程是纯机械的,不需要人工干预。

dotc: 新编译器设计的测试平台

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

dotc: 新 Scala 编译器的基础

dotc不仅是一般编译器设计中新颖想法的测试平台,它也是(这是它的第二个主要目的,在成为 Dotty 的编译器之后)完全重新设计老化的新 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 年代试图做的事情。

于 2018-07-27T11:06:53.630 回答
8

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

正如dotty github 页面所提到的:

Dotty is a research compiler that will become Scala 3

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

值得强调的是,Scala 2 和 Scala 3 本质上是同一种语言。编译器是新的,但几乎所有 Scala 程序员已经知道的关于 Scala 2 的所有内容也适用于 Scala 3,并且大多数普通的 Scala 2 代码也可以在 Scala 3 上运行,只需稍作改动。

为什么是多蒂?

Scala 3 将是朝着在类型设置中实现 OOP 和 fp 融合的全部潜力迈出的一大步

您可以看到它们的开发方式不同:

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

于 2018-07-26T05:09:35.670 回答
3

官方称,Dotty 是将成为 Scala 3 的研究编译器——也就是说,它是实现 Scala 3 的新 Scala 编译器。Scala 3 与 Scala 2 基本上是相同的语言,但旨在修复缺陷并改进对某些编程场景的支持. Dotty 支持的功能集正在发展,语言添加最终将由 SIP 委员会审查。

除其他变化外,Scala 3 的类型系统基于一个新的基础,称为 DOT 演算;使用这个基础会影响您可以在程序中使用的类型,并增加如果程序通过 Dotty 的类型检查器,该程序将不会出现类型错误的信心。

于 2018-07-26T11:36:51.737 回答
2

Dotty 是 Scala 3.0 中添加的所有内容的综合名称,在过去四年中一直是 Scala 社区讨论的话题。随着所有的承诺和进展,发布的时间非常接近。我们可以期待在年底前发布。

Dotty 会有哪些变化?

如果您要问“<strong>Scala 3.0 是一种新语言吗”,Martin Ordersky在“<a href="https://www.youtube.com/watch?v=_Rnrx2lo9cw " rel="nofollow noreferrer">A tour of Dotty" 他是有原因的。如果你问我,我会说是的!!它有很多新功能。

  1. 如果您是初学者,并且仅从 Scala 3 开始,您会发现新功能是一个新概念,而不是旧 Scala 的一部分。
  2. 如果您处于 scala 的中级水平并且已经熟悉该语言的结构,您将看到一些已被删除且不再受支持的功能。
  3. 如果您是 Scala 专家和 FP 爱好者,那么您还可以看到一系列更改,例如类型级派生、匹配类型、隐式函数类型、元编程等等。
  4. 这些更改在上一期 ScalaDays 中 Martin Ordersky 的“<a href="https://www.youtube.com/watch?v=_Rnrx2lo9cw" rel="nofollow noreferrer">A tour of Dotty”中分享。

突破性变化!

下面给出了已删除功能的详尽列表:

  1. 延迟初始化
  2. 存在类型
  3. 类型投影
  4. Do-While
  5. 过程语法
  6. 封装对象
  7. 早期初始化器
  8. 类阴影
  9. 限制 22
  10. XML 文字
  11. 符号文字
  12. 自动申请
  13. 弱一致性
  14. 非本地退货
  15. [这里] 预选赛

Dotty 的 IDE 支持。

在 Dotty 的官网上,只提到了对 Dotty 的官方 IDE 支持是 Visual Studio。我不知道为什么我最喜欢的 IDE (IJ) 尚未得到官方支持,但有一个解决方法。解决方法在最新博客“​​<a href="https://blog.jetbrains.com/scala/2020/03/17/scala-3-support-in-intellij-scala-plugin/" rel= “nofollow noreferrer">Intellij 上的 Dotty 支持”。

我希望你能看到 Dotty。

于 2020-06-10T05:45:16.927 回答
2

“Dotty”是一种编程语言的名称,就像 Java、Ruby 或 ... Scala 是编程语言的名称一样。Dotty 编译器称为dotc. Dotty 语言看起来像 Scala 语言的一个分支,使用不同的类型微积分 (DOT) 重新实现。由于使用 DOT 的经验,Dotty 删除了一些非类型健全的 Scala 特性,并添加了其他特性,使类型系统更加完整和健壮。Dotty 语言和工具集将很快成为 Scala 3。

于 2020-09-28T00:51:08.250 回答