我正在阅读有关Scala 3并发现dotty的信息。我试图了解它是什么。在某处我读到“它是新的编译器”,在某处我读到“它是 Scala 3 的一部分”,在某处我读到“Dotty 是新的 Scala 3”。
有人可以向我解释一下 dotty 到底是什么吗?用外行和技术术语?
PS:我已经在 StackOverflow 上阅读了dotty的标签信息,但并没有真正理解。
让我解释一下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。
Dotty 项目包含三个想法:
dotc
编译器所有这些都贡献了很多东西:
DOT Calculus (Dependent Object Types) 是由 Martin Odersky 的小组开发的一种新的微积分。它专门设计用于很好地建模类似 Scala 的语言。它取代了旧的ν Object Calculus(这是希腊字母 ν,发音类似于“new”),它也是为 Scala 建模而设计的,但包含后来从 Scala 中删除的功能。DOT 要简单得多。
Dotty 是一种类型系统和语义深深植根于 DOT 演算的语言,因此,DOT 演算的性质和证明也适用于 Dotty。
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
一开始就考虑到了这些要求。
Dotty 项目的第三个贡献是TASTY。TASTY 是一种用于中间编译器表示的序列化格式,具有向前和向后兼容的特点,结构紧凑、易于解析,并且包含重构原始程序所需的所有信息,同时省略了不必要的细节。
TASTY 允许保存编译器的内部表示,然后将其加载到不同的编译器并继续编译。
你为什么想做这个?.class
它允许您在源代码和二进制代码(例如或.jar
文件)之间拥有一种中间分发格式。将Scala 代码分发为.jar
s 会丢失大量有关 Scala 代码的信息。如果您想将此代码与其他一些 Scala 代码链接,您可能会遇到问题,尤其是Scala 3,它将一些类型安全性从编译阶段转移到链接阶段。
将其作为源代码 OTOH 分发,要求用户需要拥有完整的 Scala 开发环境才能使用该库。
对于那些记得它的人来说,这些目标有点类似于 ANDF 在 1980 年代试图做的事情。
有人可以向我解释一下 dotty 到底是什么吗?
正如dotty github 页面所提到的:
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 上运行,只需稍作改动。
Scala 3 将是朝着在类型设置中实现 OOP 和 fp 融合的全部潜力迈出的一大步
您可以看到它们的开发方式不同:
有关更多信息,请阅读 reddit 线程Towards Scala 3
官方称,Dotty 是将成为 Scala 3 的研究编译器——也就是说,它是实现 Scala 3 的新 Scala 编译器。Scala 3 与 Scala 2 基本上是相同的语言,但旨在修复缺陷并改进对某些编程场景的支持. Dotty 支持的功能集正在发展,语言添加最终将由 SIP 委员会审查。
除其他变化外,Scala 3 的类型系统基于一个新的基础,称为 DOT 演算;使用这个基础会影响您可以在程序中使用的类型,并增加如果程序通过 Dotty 的类型检查器,该程序将不会出现类型错误的信心。
Dotty 是 Scala 3.0 中添加的所有内容的综合名称,在过去四年中一直是 Scala 社区讨论的话题。随着所有的承诺和进展,发布的时间非常接近。我们可以期待在年底前发布。
如果您要问“<strong>Scala 3.0 是一种新语言吗”,Martin Ordersky在“<a href="https://www.youtube.com/watch?v=_Rnrx2lo9cw " rel="nofollow noreferrer">A tour of Dotty" 他是有原因的。如果你问我,我会说是的!!它有很多新功能。
下面给出了已删除功能的详尽列表:
在 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。
“Dotty”是一种编程语言的名称,就像 Java、Ruby 或 ... Scala 是编程语言的名称一样。Dotty 编译器称为dotc
. Dotty 语言看起来像 Scala 语言的一个分支,使用不同的类型微积分 (DOT) 重新实现。由于使用 DOT 的经验,Dotty 删除了一些非类型健全的 Scala 特性,并添加了其他特性,使类型系统更加完整和健壮。Dotty 语言和工具集将很快成为 Scala 3。