问题标签 [dotty]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2233 浏览

scala - 我可以在 IntelliJ 中用德语(或根本)用 Dotty 编码吗?

怀疑这篇文章的至少一部分可能是愚人节的玩笑,我开始在我的 Linux 笔记本电脑上安装 Dotty,我很高兴也很惊讶地发现它似乎是完全正确的——我能够得到给定的斐波那契函数REPL 的德语工作正常。

现在我想在 IntelliJ IDE 中用德语用 Dotty/Scala 编写代码,但到目前为止还没有实现这一点,或者就此而言,Dotty 编译失败并出现 SBT 错误的英语语言“Hello World”,见下文(对象的 IntelliJ 代码窗口中没有错误)。

通过 IntelliJ 新项目对话框打开一个新的 Dotty 项目会在我的 .ivy2 目录中放置一个新的 Dotty 实例,这与我在 REPL 中使用的不同。我找到了Felix Mulder的 Dotty 插件,但我不确定如何使用源代码插件。项目建立后:

  1. 我在 src > main 中创建的任何新 Scala 文件中都无法识别德语关键字。
  2. 在 build.sbt 中,一些运算符和关键字无法识别
  3. 在 build.sbt 每个条目都会给出错误 Expression Def.Setting[SomeType] must conform to DslEntry in SBT file
  4. 我收到此错误日志警告(两次):

    Binary version (0.1.1-20170410-0bd7821-NIGHTLY) for dependency ch.epfl.lamp#scala-library;0.1.1-20170410-0bd7821-NIGHTLY in default#skala_2.11;0.1-SNAPSHOT differs from Scala binary version in project (2.11).

我认为这可能是我的环境变量中的skaladotty路径的结果。PATH

搜索第 3 点中的错误消息将我带到这里:我可以切换到一个我知道很容易很好的非捆绑 SBT,但硬件仍然无法编译,而是给出一个相当长的 SBT 错误。

不幸的是,我不太了解 build.sbt 中条目的语法,无法根据 murmelssonic 的建议更改它们。如果我只需要学习,那么好吧,我相信我可以。

我相信我已经阅读了建议 build.sbt 错误可以忽略的帖子,因为它们实际上不会导致编译错误,但我无法确认这一点,因为我还不能编译任何东西。即使这是真的,我也想消除这些,最好不要掩盖合法的警告和错误。

我的问题可能更简单地表达为“如何为 IntelliJ 安装 Dotty 插件?”,但我不确定这是否是这一系列症状的完整解决方案。

系统信息:

  • 操作系统库本图 16.10
  • Java 1.8_121
  • IntelliJ 2017.1
  • 多蒂 v0.1.1-20170410
  • SBT 0.13.13 和 0.13.15(每次尝试)通过 IntellliJ 对话
  • SBT 0.1-SNAPSHOT(来自sbt versionsbt 目录中的命令行,用于更改 IntelliJ 设置)。
0 投票
2 回答
164 浏览

scala - 优化案例类用作符号

我正在使用一个将标识符作为字符串传递的Java API。对我来说使用类型符号似乎更好一些,所以我写了这个:

这允许以自然的方式对字符串和动作进行“序列化”和“反序列化”,例如,我可以在 上进行模式匹配Action(Pause),但由于隐式转换,我也可以传递Pause()给期望字符串的 Java 库。

有没有更好的方法来做到这一点,尤其是在性能方面?这种方法有什么问题可能会回来咬我吗?

我在 Dotty 中阅读了一些关于 Phantom 类型的信息,想知道它们是否可以用来提高处理符号的性能(或者新的 Enums 可能是更好的选择)。

0 投票
0 回答
753 浏览

scala - Scala 与 Dotty 一起玩

我一直在研究如何让现有项目使用 Dotty 编译器。

对于此后的小型项目来说,这很简单。

https://github.com/lampepfl/dotty-example-project

这会将 scala 版本设置为 0.2.x。这意味着 SBT 无法找到所有依赖库。但是,这可以通过使用来解决withDottyCompat。这告诉 sbt 去获取 2.11 版本。例如

到目前为止一切都很好。我被卡住的地方是告诉 sbt 玩 sbt 插件的所有依赖项的 2.11 版本。特别玩!例如

我不知道如何拦截这个并要求 sbt 下载 2.11 版本的播放依赖项。

有人管理过这个吗?

0 投票
2 回答
924 浏览

scala - Scala 3 不会是图灵完备的吗?

我参加了 Martin Odersky 关于 Scala 未来的主题演讲:

https://skillsmatter.com/skillscasts/8866-from-dot-to-dotty

在 1:01:00,对观众问题的回答似乎是说未来的 Scala 不会是图灵完备的。

我理解正确吗?Scala 3 将不再是图灵完备的吗?如果是这样,这对像我这样每天在工作中使用 Scala 解决实际问题的人有什么实际影响?换句话说,工业 Scala 程序员失去了什么,他们通过移除图灵完备性获得了什么?

0 投票
0 回答
39 浏览

scala - 从外部工具使用 Scala 语法树

我想开发一个使用 scala 语法树的工具(如标题所示)。更具体地说,如果我可以在每个编译阶段之后使用这些树,那就太好了。

我的研究使我找到了 Dotty 的 TASTY 交换格式,这似乎正是我所寻找的。也许是的。但是,我无法在网上找到足够的文档来弄清楚如何提取和使用它。

我还查看了 dotc 编译器标志,但找不到明显的方法。我注意到选项:“-print-tasty”,但我无法验证预期的输出,或者我错过了什么?

当然,我总是可以在每个阶段之后使用 scala 打印机(即 -Yshow-trees 等)打印 AST。这是我唯一的选择吗?如果是,那很好。

理想情况下,如果您愿意的话,如果我能以更“机器友好”的格式使用 AST,那就太好了。TASTY 似乎是我理论上想要的,即 AST 的序列化,但我不确定如何在每个阶段之后提取它。

如果我的问题太琐碎或已经解决,我深表歉意。任何反馈将不胜感激!谢谢 !

PS:如果 AST 以 JSON 格式编码会怎样?像这样的 scala 工具是否有意义(即,将 Scala AST 转换为 JSON 并返回的工具)?

0 投票
2 回答
664 浏览

scala - IntelliJ 中的 Scala 编译错误:找不到输出目录

IntelliJ IDEA(最新社区版本)无法编译 dotty 编译器并出现以下错误:

显然代码没有任何问题,而且 Dotty 似乎使用 sbt 编译得很好,因为该run命令有效。sbt 项目是否需要做一些特别的事情才能使 IDEA 使用 sbt 进行编译?这会导致这个错误吗?否则,这个错误是什么意思?

重现

  1. 从以前的安装中删除任何设置后,使用新安装的 IntelliJ IDEA。

  2. 下载存储库git clone --recursive https://github.com/lampepfl/dotty

  3. 确保sbt已安装最新版本。sbt managedSources从项目的根目录运行。

  4. 使用Oracle JDK 1.8Import project from external model的类型设置导入 IntelliJ 。sbt否则保持默认值。

  5. 右键单击项目资源管理器中的项目并选择Load/Unload Modules.... 卸载除dottydotty-compiler和之外dotty-library的所有模块dotty-interfaces( http://dotty.epfl.ch/docs/contributing/intellij-idea.html中列出的模块)

  6. 在项目资源管理器中,单击compiler。从Build菜单中单击Build Module 'dotty-compiler'

什么不能解决它

它不能解决任何事情File=> Invalidate Caches/Restart

它没有修复任何东西来保持所有模块的加载。

0 投票
1 回答
47 浏览

scala - 你如何在dotty中使用通配符?

这是一个允许迭代案例类字段的示例,并可能演示_了 Scala 中通配符 ( ) 的多种用法之一,但在 Dotty 中不编译:

似乎它们的使用可能仍然悬而未决,但目前有没有办法做到这一点(例如大约 dotty 0.6)?

0 投票
3 回答
326 浏览

scala - Lambda 的 Scala 隐式转换

我试图从链接中了解隐式函数类型 - http://www.scala-lang.org/blog/2016/12/07/implicit-function-types.html以下是示例代码作为示例。在下面的代码中,我们首先创建一个类 Transaction。

接下来我定义了两个方法 f1 和 f2 如下所示

然后定义一个方法来调用函数

下面的 lambda 用于调用代码

我的问题是,如果我更改val trans: Transaction = new Transactionimplicit val thisTransaction = new Transaction并更改op(trans)op它不起作用。

我无法理解为什么即使 Transaction 类型的 thisTransaction 存在于它没有被使用的范围内?

0 投票
1 回答
539 浏览

scala - Dotty 提供什么来替换类型投影?

我一直在阅读 Dotty,因为它看起来即将成为 scala 3,并注意到类型投影被认为是“不健全的”并从语言中删除......

这看起来很糟糕,因为我已经看到了几个真正有用的用例。例如:

如何在 Dotty 中做这样的事情?添加第二个类型参数到Manager? 但是,除了它使创建和操作 的实例变得非常乏味之外Manager,它也不太有效,因为没有办法强制这两种类型之间的关系(Manager[FooContainer, Bar]不应该是合法的)。

然后,还有其他用途,如 lambda 类型和部分应用类型,它们对于创建有偏函子等很有用……或者这些(部分应用类型)是否成为 Dotty 中的“一等公民”?

编辑

为了回答评论中的问题,这里有一个他可以使用的有点做作的例子。假设,我Managers实际上是 Akka Actors

0 投票
1 回答
890 浏览

scala - 如何在 Scala 中完全避免运行时反射?

请注意,这是一个社区帖子,应根据需要添加示例。如果您无法直接编辑答案以添加示例(问题示例或解决方案),请在评论中发布带有指向要点(或类似内容)的链接或添加单独的答案,以便稍后集成。

Scala 3 有可能根本不包括在内scala.reflect.runtime(Dotty 目前不包括,并且计划这样做也不确定)。虽然适用于 Scala 2 和 Dotty 的答案可能更适合用于过渡目的和立即提高性能,但也欢迎特定于 Dotty 的解决方案。

参考

https://www.cakesolutions.net/teamblogs/ways-to-pattern-match-generic-types-in-scala