运行 来自 REPL 之外的 Rascal 程序
Running a Rascal program from outside the REPL
我真的很希望能够从 REPL 外部 运行 一些 Rascal 的程序(例如,作为脚本的一部分,或从另一个程序调用)。我使用 Rascal 的目的是在一个更大的框架中进行中间阶段,所以我想知道从另一个程序集成执行 Rascal 代码的最佳方法是什么。
现在最好的方法是将您的代码与 Rascal shell 可执行 jar 打包在一起。调用 Rascal 代码有一个方便的方法 class JavaToRascal。有时需要一些思考才能使用 IRascalSearchPathContributor
s 将您自己的模块添加到 Rascal 搜索路径,但是如果您包含一个具有正确属性的 RASCAL.MF 文件,它应该会自动进行。
如果您正在考虑 Eclipse 插件,那么最好的方法是让您的插件依赖于 rascal-eclipse 插件并使用 ProjectEvaluatorFactory
访问解释器。
警告:由于我们正在转向编译系统,您为这种集成编写的代码将会改变。这就是我们尚未记录 API 从 Java 调用 Rascal 的原因。
当我在思考同样的问题时,这是我想出的(也许微不足道的)答案:
java -jar /path/to/rascal-shell-stable.jar path/to/myProgram.rsc
你要知道Rascal是从当前目录计算模块名称的(不知道它是否支持类似Java的CLASS_PATH),所以在上面的例子中myProgram.rsc 应该有一个 module path::to::myProgram
的模块声明。计算和声明的模块名称必须匹配。
我真的很希望能够从 REPL 外部 运行 一些 Rascal 的程序(例如,作为脚本的一部分,或从另一个程序调用)。我使用 Rascal 的目的是在一个更大的框架中进行中间阶段,所以我想知道从另一个程序集成执行 Rascal 代码的最佳方法是什么。
现在最好的方法是将您的代码与 Rascal shell 可执行 jar 打包在一起。调用 Rascal 代码有一个方便的方法 class JavaToRascal。有时需要一些思考才能使用 IRascalSearchPathContributor
s 将您自己的模块添加到 Rascal 搜索路径,但是如果您包含一个具有正确属性的 RASCAL.MF 文件,它应该会自动进行。
如果您正在考虑 Eclipse 插件,那么最好的方法是让您的插件依赖于 rascal-eclipse 插件并使用 ProjectEvaluatorFactory
访问解释器。
警告:由于我们正在转向编译系统,您为这种集成编写的代码将会改变。这就是我们尚未记录 API 从 Java 调用 Rascal 的原因。
当我在思考同样的问题时,这是我想出的(也许微不足道的)答案:
java -jar /path/to/rascal-shell-stable.jar path/to/myProgram.rsc
你要知道Rascal是从当前目录计算模块名称的(不知道它是否支持类似Java的CLASS_PATH),所以在上面的例子中myProgram.rsc 应该有一个 module path::to::myProgram
的模块声明。计算和声明的模块名称必须匹配。