一般 Emacs/Common Lisp 是如果调用第三方库的?
例如我要转换一个图片,我不想直接用第三方库,例如平时用的 convert 进程,。
那我是通过直接调用一个新的进程 [shell-command(Emacs) or run-program(CL)],
还是说这样每次启用一个新的进程速度会比较慢,应该这些程序都有对应的持续运行的进程,直接通过 socket 来传输数据,效率更快?
一般 Emacs/Common Lisp 是如果调用第三方库的?
例如我要转换一个图片,我不想直接用第三方库,例如平时用的 convert 进程,。
那我是通过直接调用一个新的进程 [shell-command(Emacs) or run-program(CL)],
还是说这样每次启用一个新的进程速度会比较慢,应该这些程序都有对应的持续运行的进程,直接通过 socket 来传输数据,效率更快?
这个 process 的效果是不是跟 shell-command 差不多(如果不需要考虑父子进程关系)?
是,不过可以异步启动进程。
另外CL的命令调用要看implementation各自的实现,Emacs的call-process
和make-process
更类似于你提到的run-program
经常一些较高级涉及操作系统的程序(如酷炫的动画制作)大都要用到 .dylib 之类代码库之类的
是不是都是新建一个子进程哦? (这个问题其实在 nodejs 上也一样,用 child_process ?)
例如一个反面的实例: 要查询数据库,我们是当然是用 socket 去查询,但是也可以新建个子进程 如 psql 查询再读取 :output , 这样要慢得多
但是一般的工具类进程都不需要持续运行,都是新建子进程??
看情况,如果是要频繁用一个功能,当然是IPC比起一个程序然后蒐集output好,不过最理想是FFI call
如果偶尔用一次,那随意了
这不就一个编译器吗,有什么调用第三方进程的必要吗