我正在阅读有关 Scala 3 的信息,并发现了 dotty 。我试图了解它是什么。在某处我读到“这是新的编译器”,在某处我读到“它是Scala 3的一部分”,在某处我读到“ Dotty是新的Scala 3”。
有人可以向我解释到底是什么东西吗?用外行和技术术语来说?
PS:我已经阅读了StackOverflow上dotty的标签信息,但并不太了解。
答案 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 types,intersection-type等。
DOTTY是新的编程语言吗?
不。 Dotty是计划成为Scala 3.0的语言和编译器的项目名称,这意味着DOTTY是Scala编程语言的下一个版本,带有新的编译器(也称为Dotty)。
我希望这会使您对dotty初学者有所了解。
答案 1 :(得分:6)
有人可以向我解释到底是什么吗?
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
答案 2 :(得分:3)
Dotty项目包含三个想法:
dotc
编译器所有这些都贡献了很多东西:
DOT演算(从属对象类型)是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中编译的任何代码自动转换到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
的设计是从头开始考虑这些要求的。
Dotty项目的第三项贡献是 TASTY 。 TASTY是一种中间编译器表示形式的序列化格式,具有向前和向后兼容性,紧凑,易于解析,并包含重构原始程序所需的所有信息,同时省去了不必要的细节。
TASTY允许保存编译器的内部表示,然后将其加载到其他编译器中并继续编译。
您为什么要这样做?它使您可以在源代码和二进制代码(例如.class
或.jar
文件)之间使用中间分发格式。以.jar
的形式分发Scala代码会丢失很多有关Scala代码的信息。然后,如果您想将此代码与其他Scala代码链接,则可能会遇到问题,尤其是Scala 3,它们会将类型安全性从编译阶段移至链接阶段。尤其是。 / p>
将其作为源代码OTOH分发,要求用户需要具有完整的Scala开发环境才能使用该库。
对于那些记得它的人,目标有些类似于ANDF在1980年代尝试做的事情。
答案 3 :(得分:1)
Dotty是Scala 3.0中添加的所有内容的总称,在过去四年中一直是Scala社区中讨论的话题。有了所有的承诺和进展,发布时间就到了。我们可以预计在今年年底发布。
如果您要问“ Scala 3.0是一种新语言”,马丁·Ordersky 在“ {{ 3}}”他有理由。如果你问我,我会说是的!它具有很多新功能。
first_value
”中共享了这些更改。以下是“已删除功能”的详尽列表:
在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。