【发布时间】:2019-03-10 22:11:45
【问题描述】:
我想让我的应用程序被“脚本化”。脚本语言应该是类型化的和类似 C 的。它应该具有在 C 和 Java 中都可以找到的常用控制语句、原始类型、数组和运算符。脚本应该能够定义函数,并调用预定义的 API 函数,例如我选择提供的 sin() ...。如果脚本通过了语法检查,那么它将被应用程序翻译成 Java,然后即时编译,但也应该可以将其翻译成 C/C++,并进行本地编译。 Java/C 的语法检查和翻译应该在 JVM 中运行。我不需要解释器,因为它总是会被翻译成 Java/C。只是一个语法检查器和翻译器。
那里有这样的语言吗?如果不是,考虑到我不熟悉编译器/解释器编程,在 JVM 中执行此操作的最简单方法是什么? (如果我是,我就不需要问这个问题了......)
如果有“Scala”解决方案,那也很好,因为我实际上是在将我的 Java 代码迁移到 Scala。
[编辑] 我想要 C/C++ 翻译的唯一原因是性能。我期望对数组进行很多“位操作”,而 Java 并不真正适合,特别是由于在每个数组索引操作时都会进行范围检查。我还期望有很多对象,这会在 GC 周期中间接消耗。
[EDIT#2] 好的,我明白我必须得到具体的。我正在考虑对 Minecraft 克隆进行编程,作为练习,让我的注意力从“商业计算”中解脱出来。我说的是引擎,而不是游戏玩法。而且我对服务器端比对 3D 更感兴趣,因为我是一个“服务器人”。我们正在谈论使用飞行重量模式来表示数百万个对象(块/体素),并每秒多次访问它们。这不是 JVM 的用途。请看这篇文章以了解我的意思:Why we chose CPP over Java
我不想用 C/C++ 编写所有程序,但我怀疑这是获得良好性能的唯一方法。我的意思的另一个例子是VoltDB,它可以说是目前最快的 SQL 数据库。他们用 Java 和 C/C++ 编写它,使用 Java 进行 I/O 和网络,使用 C 进行繁重的内存操作和有点摸索。用户编写的存储过程是用 Java 编写的,但我认为不需要。我认为应该可以在客户端和测试构建中编译为 Java,并在服务器上编译为 C,可以配置完整的开发环境。
【问题讨论】:
-
我猜答案是否定的。为什么?因为如果你需要做任何有趣的事情,那么你就需要开始分配和释放内存,而 C 和 Java 的分歧如此之大,以至于整个想法变得有点无用。如果您需要一门脚本语言,为什么不跳出更高的级别并选择 Python 或 Ruby?它们在“C”世界和“Java”世界都有实现......
-
cdegroot,它可能不漂亮,但理论证明你可以将任何两个图灵完备的编程模型编译成彼此。换句话说:是的,你可以,但你真的、真的想要吗?
-
我第二个@cdegroot,集成真正的脚本语言可能是更好的解决方案。 Ruby 和 Python 已命名,但我也推荐 Lua,因为它非常小。
-
当您极其严格地限制可能的操作时,我认为可能存在同时是有效的 C 和 Java 代码的代码片段。例如
int i = sin(x);可以是 C 或 Java。因此,如果您将自己限制在这样的表达式中,您可能会想出一组不同的页眉和页脚,用它们包围代码,以使其成为有效的 Java 类或 C 程序。但是……这对我来说听起来不是好的设计。 -
您能否详细说明您实际需要的编程语言结构?也许是一个小而现实的代码示例。你需要条件、循环、函数、嵌套函数、类、虚拟方法、运算符重载、模块吗?当您的需求足够小时,创建一个可以将自身转换为 Java 或 C 的 Scala DSL 实际上可能是有意义的。
标签: java c scala code-translation