我正在开发一个 Rust CLI(使用 Clap)来与我的 Rascal DSL 一起使用,问题是这样的。如何在 Rust CLI 代码中调用 Rascal 函数(定义我的 DSL 的函数)?我之前在 Python 中实现了这个 CLI(使用 Click),并使用 JPype 实现了 Rascal 和 Python 之间的互操作,但性能非常糟糕。我希望通过用 Rust 重写 CLI 来提高性能,但我不确定如何实现 Rascal 和 Rust 之间的互操作。如果有人能帮助我,我会很高兴。
我认为获得快速结果和合理性能的最佳方法是使用 rascal 在标准库的
util::Webserver
中内置的 Web 应用服务器。
lang::json::IO
可以快速方便地在 json 值和 Rascal 值之间进行映射。这基本上也是 LSP 服务的工作方式。我们计划稍后将网络套接字添加到
util::Webserver
。
另一种更具创意的路线是使用语言参数 LSP 服务器;使用 rascal-lsp 库,您可以启动 LSP 服务器并在其中加载 Rascal 服务实现。要使用的主要模块是
util::LanguageServer
。如果您的功能属于协议范围内,那么您可以在 VScode 中开发和测试它,并将其连接到基于 Rust 或 C 的 LSP 客户端。
我会选择第一个,因为你很快就会启动并运行它。