我用Common Lisp编写了一个应用程序,它生成Java源代码并将其写入*.java文件。
我想通过调用 Java 编译器来完成 Lisp 代码,最后运行编译后的 Java 代码。
所有这些都来自 Lisp 应用程序。
您可能希望将 Java 编译器作为外部进程运行。所有现代的Common Lisp实现都与ASDF合作,其中包括其UIOP库(Utilities for Implementation- and OS- Portability(。
所以,直接试试这个:
(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
没有语言定义的方法可以从 CL 调用外部程序。 然而,许多实现提供了一种方法来做到这一点,并且有一个称为外部程序的兼容性库,它为许多实现提供了此功能的通用包装器。
这个库本身可以通过Quicklisp获得。