Dotty到底是什么?
What exactly is Dotty?
我正在阅读 Scala 3 并发现 dotty。我试图理解它是什么。我在某处阅读 "It is new compiler",在某处阅读 "It is part of Scala 3",在某处阅读 "Dotty is new Scala 3"。
有人可以用外行和技术术语向我解释一下 dotty 到底是什么吗??
PS: 我已经在 Whosebug 上阅读了 dotty 的标签信息,但并没有真正理解它。
Can somebody please explain to me what exactly dotty is?
正如 dotty github page 提到的:
Dotty is a research compiler that will become Scala 3
此外,请阅读 Martin Odersky 的博客 post Towards Scala 3,其中提到 Scala 2 与 Scala 3:
It’s worth emphasizing that Scala 2 and Scala 3 are fundamentally the
same language. The compiler is new, but nearly everything Scala
programmers already know about Scala 2 applies to Scala 3 as well, and
most ordinary Scala 2 code will also work on Scala 3 with only minor
changes.
Scala 3 will be a big step towards realizing the full potential of the
fusion of OOP and fp in a typed setting
您可以看到它们的开发方式不同:
有关更多信息,请阅读 reddit 线程 Towards Scala 3
让我用Scala 3的基础来解释一下:
Dependent Object Types (DOT) 是 Scala 的新基础,即 Scala 3。 DOT 是一个路径相关类型的核心演算,它将 Scala 语言及其类型系统提升到一个新的水平。
根据马丁·奥德斯基 this blog 的说法:
"What do you get if you boil Scala on a slow flame and wait until all
incidental features evaporate and only the most concentrated essence
remains? After doing this for 8 years we believe we have the answer:
it’s DOT, the calculus of dependent object types, that underlies 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 中还有其他新功能,例如union types, intersection-type 等等
Is DOTTY is new programming language?
没有。 Dotty 是计划成为 Scala 3.0 的语言和编译器的项目名称,这意味着,DOTTY 是 Scala 编程语言的下一版本,具有新的编译器(也称为 Dotty)。
我希望这能让您对 dotty 有所了解。
正式地,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 错误。
Dotty 项目包含三个想法:
- Dotty 编程语言
dotc
编译器
- TASTY 序列化格式
所有这些都贡献了很多东西:
Dotty:一种基于 DOT 微积分的语言
DOT 微积分(依赖对象类型)是由 Martin Odersky 的小组开发的一种新微积分。它专门设计用于很好地模拟类似 Scala 的语言。它取代了旧的 ν Object Calculus(即希腊字母 ν,发音类似于“新”),它也被设计用于模拟 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 的编译器之后)一个完整的重新编译的基础老化的设计 New Scala Compiler(在 Java 中编写的原始 Scala 编译器之后的当前第二个迭代)。
dotc
的设计允许许多当今现代编译器所期望的功能,而传统的批处理编译器设计并不能很好地满足这些功能。现代编译器的工作不仅仅是将一种语言转换为另一种语言(例如 Scala 到 JVML),它应该
- 报告(人类可读、清晰易懂的)错误
- 建议(甚至执行)这些错误的可能修复方法
- 报告相关和有用的警告
- 建议(甚至执行)对这些警告的可能改进
- 执行重构
- 提供词汇、句法和语义突出显示
- 辅助代码完成
- 并用不完整的代码完成所有这些,同时编写代码,瞬间
NSC 的演示编译器和工具箱可以做很多这样的事情,但 dotc
是根据这些要求从头开始设计的。
TASTY:语义树的序列化格式
Dotty 项目的第三个贡献是 TASTY。 TASTY 是一种中间编译器表示的序列化格式,具有向前和向后兼容的特点,结构紧凑,易于解析,包含重构原始程序所需的所有信息,同时保留不必要的细节。
TASTY 允许保存编译器的内部表示,然后将其加载到不同的编译器并继续编译。
你为什么要这样做?它允许您拥有介于源代码和二进制代码之间的中间分发格式(例如 .class
或 .jar
文件)。将 Scala 代码分发为 .jar
s 会丢失大量有关 Scala 代码的信息。如果你想 link 这段代码与其他一些 Scala 代码,你可能 运行 会遇到问题, 尤其是 Scala 3,它从编译阶段到 link 阶段。
将其作为源代码分发,OTOH,要求用户需要拥有完整的 Scala 开发环境才能使用该库。
对于那些记得它的人来说,目标与 ANDF 在 1980 年代尝试做的有点相似。
Dotty 是 Scala 3.0 中添加的所有内容的综合名称,在过去四年中一直是 Scala 社区讨论的话题。随着所有的承诺和进展,发布的时间已经很近了。预计年底前发布。
Dotty 会有什么变化?
如果你问“Scala 3.0 是一种新语言吗”,Martin Ordersky 说“是还是没有” in “A tour of Dotty” 他有理由。如果你问我,我会说是的!!它有很多新功能。
- 如果您是初学者,并且只从 Scala 3 开始,您会发现新功能是一个新概念,不属于旧 Scala。
- 如果您处于 scala 的中级水平并且已经熟悉该语言的结构,您将看到一些已删除且不再受支持的功能。
- 如果您是 Scala 专家和 FP 爱好者,这里还有一个更改列表供您使用,例如类型级派生、匹配类型、隐式函数类型、元编程等等。
- Martin Ordersky 在上一期 ScalaDays 的“A tour of Dotty”中分享了这些更改。
重大更改!
下面给出了已删除功能的详尽列表:
- DelayedInit
- Macros
- Existential Types
- Type Projection
- Do-While
- Procedure Syntax
- Package Objects
- Early Initializers
- Class Shadowing
- Limit 22
- XML literals
- Symbol Literals
- Auto-Application
- Weak Conformance
- Nonlocal Returns
- [this] Qualifier
IDE 支持 Dotty。
在Dotty的官网上,只提到了官方IDE support for Dotty is Visual Studio. I do not know the reason why my favorite IDE (IJ) is not yet supported officially but there is a workaround. The workaround is described in the latest blog on “Dotty support on Intellij”。
我希望你能瞥见 Dotty。
“Dotty”是编程语言的名称,就像 Java、Ruby 或 ... Scala 是编程语言的名称一样。 Dotty 编译器被称为 dotc
。 Dotty 语言看起来像是 Scala 语言的一个分支,使用不同类型的微积分 (DOT) 重新实现。由于使用 DOT 的经验,Dotty 放弃了一些 type-sound 没有的 Scala 功能,并添加了其他功能,使类型系统更加完整和健壮。 Dotty 语言和工具集即将成为 Scala 3。
我正在阅读 Scala 3 并发现 dotty。我试图理解它是什么。我在某处阅读 "It is new compiler",在某处阅读 "It is part of Scala 3",在某处阅读 "Dotty is new Scala 3"。
有人可以用外行和技术术语向我解释一下 dotty 到底是什么吗??
PS: 我已经在 Whosebug 上阅读了 dotty 的标签信息,但并没有真正理解它。
Can somebody please explain to me what exactly dotty is?
正如 dotty github page 提到的:
Dotty is a research compiler that will become Scala 3
此外,请阅读 Martin Odersky 的博客 post Towards Scala 3,其中提到 Scala 2 与 Scala 3:
It’s worth emphasizing that Scala 2 and Scala 3 are fundamentally the same language. The compiler is new, but nearly everything Scala programmers already know about Scala 2 applies to Scala 3 as well, and most ordinary Scala 2 code will also work on Scala 3 with only minor changes.
Scala 3 will be a big step towards realizing the full potential of the fusion of OOP and fp in a typed setting
您可以看到它们的开发方式不同:
有关更多信息,请阅读 reddit 线程 Towards Scala 3
让我用Scala 3的基础来解释一下:
Dependent Object Types (DOT) 是 Scala 的新基础,即 Scala 3。 DOT 是一个路径相关类型的核心演算,它将 Scala 语言及其类型系统提升到一个新的水平。
根据马丁·奥德斯基 this blog 的说法:
"What do you get if you boil Scala on a slow flame and wait until all incidental features evaporate and only the most concentrated essence remains? After doing this for 8 years we believe we have the answer: it’s DOT, the calculus of dependent object types, that underlies 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 中还有其他新功能,例如union types, intersection-type 等等
Is DOTTY is new programming language?
没有。 Dotty 是计划成为 Scala 3.0 的语言和编译器的项目名称,这意味着,DOTTY 是 Scala 编程语言的下一版本,具有新的编译器(也称为 Dotty)。
我希望这能让您对 dotty 有所了解。
正式地,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 错误。
Dotty 项目包含三个想法:
- Dotty 编程语言
dotc
编译器- TASTY 序列化格式
所有这些都贡献了很多东西:
Dotty:一种基于 DOT 微积分的语言
DOT 微积分(依赖对象类型)是由 Martin Odersky 的小组开发的一种新微积分。它专门设计用于很好地模拟类似 Scala 的语言。它取代了旧的 ν Object Calculus(即希腊字母 ν,发音类似于“新”),它也被设计用于模拟 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 的编译器之后)一个完整的重新编译的基础老化的设计 New Scala Compiler(在 Java 中编写的原始 Scala 编译器之后的当前第二个迭代)。
dotc
的设计允许许多当今现代编译器所期望的功能,而传统的批处理编译器设计并不能很好地满足这些功能。现代编译器的工作不仅仅是将一种语言转换为另一种语言(例如 Scala 到 JVML),它应该
- 报告(人类可读、清晰易懂的)错误
- 建议(甚至执行)这些错误的可能修复方法
- 报告相关和有用的警告
- 建议(甚至执行)对这些警告的可能改进
- 执行重构
- 提供词汇、句法和语义突出显示
- 辅助代码完成
- 并用不完整的代码完成所有这些,同时编写代码,瞬间
NSC 的演示编译器和工具箱可以做很多这样的事情,但 dotc
是根据这些要求从头开始设计的。
TASTY:语义树的序列化格式
Dotty 项目的第三个贡献是 TASTY。 TASTY 是一种中间编译器表示的序列化格式,具有向前和向后兼容的特点,结构紧凑,易于解析,包含重构原始程序所需的所有信息,同时保留不必要的细节。
TASTY 允许保存编译器的内部表示,然后将其加载到不同的编译器并继续编译。
你为什么要这样做?它允许您拥有介于源代码和二进制代码之间的中间分发格式(例如 .class
或 .jar
文件)。将 Scala 代码分发为 .jar
s 会丢失大量有关 Scala 代码的信息。如果你想 link 这段代码与其他一些 Scala 代码,你可能 运行 会遇到问题, 尤其是 Scala 3,它从编译阶段到 link 阶段。
将其作为源代码分发,OTOH,要求用户需要拥有完整的 Scala 开发环境才能使用该库。
对于那些记得它的人来说,目标与 ANDF 在 1980 年代尝试做的有点相似。
Dotty 是 Scala 3.0 中添加的所有内容的综合名称,在过去四年中一直是 Scala 社区讨论的话题。随着所有的承诺和进展,发布的时间已经很近了。预计年底前发布。
Dotty 会有什么变化?
如果你问“Scala 3.0 是一种新语言吗”,Martin Ordersky 说“是还是没有” in “A tour of Dotty” 他有理由。如果你问我,我会说是的!!它有很多新功能。
- 如果您是初学者,并且只从 Scala 3 开始,您会发现新功能是一个新概念,不属于旧 Scala。
- 如果您处于 scala 的中级水平并且已经熟悉该语言的结构,您将看到一些已删除且不再受支持的功能。
- 如果您是 Scala 专家和 FP 爱好者,这里还有一个更改列表供您使用,例如类型级派生、匹配类型、隐式函数类型、元编程等等。
- Martin Ordersky 在上一期 ScalaDays 的“A tour of Dotty”中分享了这些更改。
重大更改!
下面给出了已删除功能的详尽列表:
- DelayedInit
- Macros
- Existential Types
- Type Projection
- Do-While
- Procedure Syntax
- Package Objects
- Early Initializers
- Class Shadowing
- Limit 22
- XML literals
- Symbol Literals
- Auto-Application
- Weak Conformance
- Nonlocal Returns
- [this] Qualifier
IDE 支持 Dotty。
在Dotty的官网上,只提到了官方IDE support for Dotty is Visual Studio. I do not know the reason why my favorite IDE (IJ) is not yet supported officially but there is a workaround. The workaround is described in the latest blog on “Dotty support on Intellij”。
我希望你能瞥见 Dotty。
“Dotty”是编程语言的名称,就像 Java、Ruby 或 ... Scala 是编程语言的名称一样。 Dotty 编译器被称为 dotc
。 Dotty 语言看起来像是 Scala 语言的一个分支,使用不同类型的微积分 (DOT) 重新实现。由于使用 DOT 的经验,Dotty 放弃了一些 type-sound 没有的 Scala 功能,并添加了其他功能,使类型系统更加完整和健壮。 Dotty 语言和工具集即将成为 Scala 3。