作者:荆州房产网 | 来源:互联网 | 2022-12-09 15:38
我正在阅读Scala 3并发现了dotty.我试图了解它是什么.我在某处读到"这是新的编译器",在某处我读到"它是Scala 3的一部分",在某处我读到"Dotty是新的Scala 3".
有人可以向我解释一下究竟是什么?在外行和技术方面?
PS:我已经在StackOverflow上读过了dotty的标签信息但是并没有真正理解它.
1> Ra Ka..:
让我解释一下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进行发展。
2> prayagupd..:
有人可以向我解释一下究竟是什么?
正如dotty github页面提到:
Dotty is a research compiler that will become Scala 3
另外,阅读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在打字环境中融合的全部潜力迈出的一大步
你可以看到他们的发展方式不同:
scalac:https://github.com/scala/scala
dotc:https://github.com/lampepfl/dotty
有关更多信息,请阅读reddit主题向Scala 3
dottyc不存在,编译器工具称为dotc。
3> Jörg W Mitta..:
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代码分发为.jar
s会丢失许多有关Scala代码的信息。然后,如果您想将此代码与其他Scala代码链接,则可能会遇到问题,尤其是 Scala 3,它将一些类型安全性从编译阶段移至链接阶段。
将其作为源代码OTOH分发时,要求用户需要具有完整的Scala开发环境才能使用该库。
对于那些记得它的人,目标有些类似于ANDF在1980年代尝试做的。