【问题标题】:Calling the Java compiler from a Common Lisp application, on Java source created by the Lisp application在由 Lisp 应用程序创建的 Java 源代码上,从 Common Lisp 应用程序调用 Java 编译器
【发布时间】:2020-01-24 11:22:06
【问题描述】:

我用 Common Lisp 编写了一个应用程序,它生成 Java 源代码并将其写入 *.java 文件。

我想通过调用 Java 编译器来完成 Lisp 代码,最后运行编译后的 Java 代码。

全部来自 Lisp 应用程序。

建议,请。提前致谢。

【问题讨论】:

标签: java lisp common-lisp


【解决方案1】:

您可能希望将 Java 编译器作为外部进程运行。所有现代 Common Lisp 实现都使用 ASDF,其中包括其 IUOP 库(用于实现和操作系统可移植性的实用程序)。

所以,直接试试吧:

(uiop:run-program (list "javac" "--option" "myfile.java") :output t)

:output t 使其打印到标准输出。

在 lisp 中,一个错误会弹出交互式调试器。如果你想很好地捕捉和打印错误:

(handler-case 
          (uiop:run-program (list "javac" "--stuff") :output t)
        (error (c) (format t "~a" c)))

要异步运行它,请使用launch-program

阅读更多:https://lispcookbook.github.io/cl-cookbook/os.html#running-external-programs

【讨论】:

    【解决方案2】:

    没有语言定义的方法可以从 CL 调用外部程序。然而,许多实现都提供了一种方法来执行此操作,并且有一个名为 external-program 的兼容性库,它为许多实现提供了此功能的通用包装器。

    这个库本身可以通过Quicklisp获得。

    【讨论】:

    • 还有uiop:run-programuiop:launch-program,它们是ASDF 的一部分,因此已经存在几乎无处不在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    相关资源
    最近更新 更多