问题标签 [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.
scala - 我可以在 IntelliJ 中用德语(或根本)用 Dotty 编码吗?
怀疑这篇文章的至少一部分可能是愚人节的玩笑,我开始在我的 Linux 笔记本电脑上安装 Dotty,我很高兴也很惊讶地发现它似乎是完全正确的——我能够得到给定的斐波那契函数REPL 的德语工作正常。
现在我想在 IntelliJ IDE 中用德语用 Dotty/Scala 编写代码,但到目前为止还没有实现这一点,或者就此而言,Dotty 编译失败并出现 SBT 错误的英语语言“Hello World”,见下文(对象的 IntelliJ 代码窗口中没有错误)。
通过 IntelliJ 新项目对话框打开一个新的 Dotty 项目会在我的 .ivy2 目录中放置一个新的 Dotty 实例,这与我在 REPL 中使用的不同。我找到了Felix Mulder的 Dotty 插件,但我不确定如何使用源代码插件。项目建立后:
- 我在 src > main 中创建的任何新 Scala 文件中都无法识别德语关键字。
- 在 build.sbt 中,一些运算符和关键字无法识别
- 在 build.sbt 每个条目都会给出错误
Expression Def.Setting[SomeType] must conform to DslEntry in SBT file
我收到此错误日志警告(两次):
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).
我认为这可能是我的环境变量中的skala
和dotty
路径的结果。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 version
sbt 目录中的命令行,用于更改 IntelliJ 设置)。
scala - 优化案例类用作符号
我正在使用一个将标识符作为字符串传递的Java API。对我来说使用类型符号似乎更好一些,所以我写了这个:
这允许以自然的方式对字符串和动作进行“序列化”和“反序列化”,例如,我可以在 上进行模式匹配Action(Pause)
,但由于隐式转换,我也可以传递Pause()
给期望字符串的 Java 库。
有没有更好的方法来做到这一点,尤其是在性能方面?这种方法有什么问题可能会回来咬我吗?
我在 Dotty 中阅读了一些关于 Phantom 类型的信息,想知道它们是否可以用来提高处理符号的性能(或者新的 Enums 可能是更好的选择)。
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 版本的播放依赖项。
有人管理过这个吗?
scala - Scala 3 不会是图灵完备的吗?
我参加了 Martin Odersky 关于 Scala 未来的主题演讲:
https://skillsmatter.com/skillscasts/8866-from-dot-to-dotty
在 1:01:00,对观众问题的回答似乎是说未来的 Scala 不会是图灵完备的。
我理解正确吗?Scala 3 将不再是图灵完备的吗?如果是这样,这对像我这样每天在工作中使用 Scala 解决实际问题的人有什么实际影响?换句话说,工业 Scala 程序员失去了什么,他们通过移除图灵完备性获得了什么?
scala - 从外部工具使用 Scala 语法树
我想开发一个使用 scala 语法树的工具(如标题所示)。更具体地说,如果我可以在每个编译阶段之后使用这些树,那就太好了。
我的研究使我找到了 Dotty 的 TASTY 交换格式,这似乎正是我所寻找的。也许是的。但是,我无法在网上找到足够的文档来弄清楚如何提取和使用它。
我还查看了 dotc 编译器标志,但找不到明显的方法。我注意到选项:“-print-tasty”,但我无法验证预期的输出,或者我错过了什么?
当然,我总是可以在每个阶段之后使用 scala 打印机(即 -Yshow-trees 等)打印 AST。这是我唯一的选择吗?如果是,那很好。
理想情况下,如果您愿意的话,如果我能以更“机器友好”的格式使用 AST,那就太好了。TASTY 似乎是我理论上想要的,即 AST 的序列化,但我不确定如何在每个阶段之后提取它。
如果我的问题太琐碎或已经解决,我深表歉意。任何反馈将不胜感激!谢谢 !
PS:如果 AST 以 JSON 格式编码会怎样?像这样的 scala 工具是否有意义(即,将 Scala AST 转换为 JSON 并返回的工具)?
scala - IntelliJ 中的 Scala 编译错误:找不到输出目录
IntelliJ IDEA(最新社区版本)无法编译 dotty 编译器并出现以下错误:
显然代码没有任何问题,而且 Dotty 似乎使用 sbt 编译得很好,因为该run
命令有效。sbt 项目是否需要做一些特别的事情才能使 IDEA 使用 sbt 进行编译?这会导致这个错误吗?否则,这个错误是什么意思?
重现
从以前的安装中删除任何设置后,使用新安装的 IntelliJ IDEA。
下载存储库
git clone --recursive https://github.com/lampepfl/dotty
确保
sbt
已安装最新版本。sbt managedSources
从项目的根目录运行。使用Oracle JDK 1.8
Import project from external model
的类型设置导入 IntelliJ 。sbt
否则保持默认值。右键单击项目资源管理器中的项目并选择
Load/Unload Modules...
. 卸载除dotty
、dotty-compiler
和之外dotty-library
的所有模块dotty-interfaces
。( http://dotty.epfl.ch/docs/contributing/intellij-idea.html中列出的模块)在项目资源管理器中,单击
compiler
。从Build
菜单中单击Build Module 'dotty-compiler'
。
什么不能解决它
它不能解决任何事情File
=> Invalidate Caches/Restart
。
它没有修复任何东西来保持所有模块的加载。
scala - 你如何在dotty中使用通配符?
这是一个允许迭代案例类字段的示例,并可能演示_
了 Scala 中通配符 ( ) 的多种用法之一,但在 Dotty 中不编译:
似乎它们的使用可能仍然悬而未决,但目前有没有办法做到这一点(例如大约 dotty 0.6)?
scala - Lambda 的 Scala 隐式转换
我试图从链接中了解隐式函数类型 - http://www.scala-lang.org/blog/2016/12/07/implicit-function-types.html以下是示例代码作为示例。在下面的代码中,我们首先创建一个类 Transaction。
接下来我定义了两个方法 f1 和 f2 如下所示
然后定义一个方法来调用函数
下面的 lambda 用于调用代码
我的问题是,如果我更改val trans: Transaction = new Transaction
为implicit val thisTransaction = new Transaction
并更改op(trans)
为op
它不起作用。
我无法理解为什么即使 Transaction 类型的 thisTransaction 存在于它没有被使用的范围内?
scala - Dotty 提供什么来替换类型投影?
我一直在阅读 Dotty,因为它看起来即将成为 scala 3,并注意到类型投影被认为是“不健全的”并从语言中删除......
这看起来很糟糕,因为我已经看到了几个真正有用的用例。例如:
如何在 Dotty 中做这样的事情?添加第二个类型参数到Manager
? 但是,除了它使创建和操作 的实例变得非常乏味之外Manager
,它也不太有效,因为没有办法强制这两种类型之间的关系(Manager[FooContainer, Bar]
不应该是合法的)。
然后,还有其他用途,如 lambda 类型和部分应用类型,它们对于创建有偏函子等很有用……或者这些(部分应用类型)是否成为 Dotty 中的“一等公民”?
编辑
为了回答评论中的问题,这里有一个他可以使用的有点做作的例子。假设,我Managers
实际上是 Akka Actors
:
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