问题标签 [jvm-languages]
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 - 编译 Scala 脚本。Scala 脚本如何工作?
时髦的
Groovy 带有一个名为groovyc
. 对于每个脚本,groovyc
生成一个扩展类groovy.lang.Script
,其中包含一个 main 方法,以便 Java 可以执行它。已编译类的名称与正在编译的脚本的名称相匹配。
例如,使用此HelloWorld.groovy
脚本:
这变成了这样的代码:
斯卡拉
Scala 带有一个名为scalac
.
例如,使用相同的HelloWorld.scala
脚本:
该代码对 无效scalac
,因为编译器需要类或对象定义,但可以在 Scala REPL 解释器中使用。怎么可能?它在执行之前是否包含在一个类中?
clojure - Frege 是否执行尾调用优化?
尾调用是否在 Frege 中进行了优化。我知道 Java 和编译成 JVM 字节码的语言(如 Clojure 和 Scala)都没有 TCO。弗雷格呢?
java - 如何处理 jasmin 中命名为关键字的字段
我正在为 java 的一个子集编写一个编译器,我几乎完成了。我遇到的一件事是处理命名为 jasmin-keywords 的类、字段和方法。
例如:
这会像这样编译成茉莉花:
问题是 .class 和 .field 指令,如果名称是关键字,它们会导致编译错误。我尝试在它们周围加上单引号和双引号;使用单引号将 jasmin 组装成类文件,但随后会出现验证错误(看起来它实际上包含名称中的引号,这是次优的)。使用双引号根本无法编译。
对此有什么解决方案,还是在茉莉花中不可能做到这一点?
java-me - 用于 J2ME 平台的 JVM 语言
我目前正在为 J2ME 环境(CLDC 1.1 配置和 IMP-NG 配置文件)编写一个嵌入式应用程序。被基于 JVM 的语言(Groovy、Scala、Clojure 等等)的所有这些新特性宠坏了,我正在考虑将其中一种用于我的代码。
但是,大多数提到的语言都需要相当不错的 JVM 环境。大多数所谓的“动态”语言都要求 VM 具有反射功能。许多人要求注释支持。以上功能在 J2ME 下均不可用。
根据我的发现,Xtend看起来是一个可行的选择,因为它的编译器会输出纯 Java,而不是字节码,并且不需要任何库来满足运行时的需要。当然,生成的 Java 代码也必须满足一些要求,但 Xtend 网页在这方面看起来很有希望:
Xtend 只是上课,没有别的
Java 中的接口定义已经非常简洁明了。它们具有不错的默认可见性,并且在其他领域也几乎没有什么可以改进的。鉴于能够处理这些文件的所有知识和强大的工具,没有理由以不同的方式定义它们。这同样适用于枚举和注释类型。
这就是 Xtend 只能做类并依赖于 Java 中定义的接口、注释和枚举的原因。Xtend 并不是要取代 Java,而是要使其现代化。
我是对的吗,可以为 J2ME 平台编译 Xtend 生成的代码,还是有些结构在那里不起作用?
或者,您能否推荐任何其他可以在 J2ME 上运行的“丰富”Java 修改语言?
更新:知道作为另一个源代码产生结果的“编译器”称为transcompiler,还可以找到Mirah ,这是一种不需要运行时库和特定 Java 功能的工具。
java - Google Go for Java 平台?
JVM 提供了出色的性能——这是一方面。另一方面,Golang 听起来像是一种新的范式并且非常高效。如果我们能够将两个世界中最好的东西结合起来——JVM 性能和 golang 生产力——我们可以获得很多好处。有谁知道任何在java中提供golang实现的项目?
optimization - 具有快速初始化的 JVM 脚本语言
我有一个简单的 java 应用程序,它获取 jmx 连接 url、对象名称和属性名称作为输入和输出属性值。此应用程序每分钟运行数百次,并具有严格的运行时间限制。最近出现了许多极端情况(将毫秒转换为秒、折叠列表等),重新编译和重新分发此应用程序变得乏味。所以我决定切换到一些支持 JMX 的脚本语言。
我尝试过 groovy、jython 和 clojure,发现它们的初始化时间很长(groovy/clojure/jython 大约为 0.9/1.2/3.5)。
有没有更快的初始化速度,或者有没有办法减少这些语言的初始化时间而不从java加载它们?
java - 为什么向 Java 接口添加新方法会破坏依赖旧版本的客户端?
在 Java 中,当您向接口添加新方法时,您会破坏所有客户端。当您有一个抽象类时,您可以添加一个新方法并在其中提供一个默认实现。所有客户将继续工作。
我想知道为什么界面是这样设计的?
所有旧方法仍然存在,因此似乎没有向后兼容性问题。(当然需要有某些例外,但我认为能够在不破坏客户端的情况下向 java 接口添加新方法可能是一个非常好的主意......)
我会很感激你的意见。
class - 在 Scala 中,如何获取“对象”(不是类的实例)的 *name*?
在 Scala 中,我可以像这样声明一个对象:
我将如何"Thingy"
在 Scala 中获得(对象的名称)?
我听说 Lift(Scala 的 Web 框架)能够做到这一点。
groovy - groovy++怎么了?
我只是偶然发现了 groovy++,发现它很有趣。
不幸的是,它似乎没有进一步发展?
- 根据 github,最后一次提交是一年多前。
- 邮件列表完全处于非活动状态,最后一条消息是在 4 月返回的。
- 最近没有关于它的消息。
该项目是否已搬迁并现在有另一个名称?它是否因为对 groovy 的改进而过时了?还是刚刚停产?
感谢您的任何见解!
java - 从 List[(Char, Char)] 到 Object 的奇怪类型转换
我count
在 Scala 2.9.2 中有一个递归函数,看起来像这样
在输入Seq(('(', '('))
时,函数会抛出以下内容MatchError
:
我通过使用 Scala 控制台中的代码对此进行了调查。
似乎匹配('a', 'b')::rest
(第二行)没有返回正确类型的对象,因为Seq[(Char, Char)]
突然java.lang.Object
变成了 Scala 不知道如何匹配的类型。
什么解释了这种行为?