KMRCLを眺める(212) MAKE-PROCESS — #:g1

Posted 2010-10-12 14:24:00 GMT

console.lispも眺め終えたので、今回からKMRCLのprocesses.lispを眺めます。
processes.lisp処理系依存のマルチスレッド/プロセス系関数のラッパーを集めたもののようです。
ということで、今回は、make-processです。
定義は、

(defun make-process (name func)
  #+allegro (mp:process-run-function name func)
  #+cmu (mp:make-process func :name name)
  #+lispworks (mp:process-run-function name nil func)
  #+sb-thread (sb-thread:make-thread func :name name)
  #+openmcl (ccl:process-run-function name func)
  #-(or allegro cmu lispworks sb-thread openmcl) (funcall func)
  )
となっていますが、命名はどうやらCMUCLに合せた様子。
PROCESS-RUN-FUNCTIONという名前も多いようですが、CLでは処理系依存なものでも大体同じ名前とインターフェイスで提供されていることが多い気がします。
過去に同様の機能をLispマシン等が提供していた場合は、それを踏襲することも多いようです。
動作は、
(kl::make-process "hello" 
                  (lambda (&aux (*standard-output* #.*standard-output*))
                    (print "hello!")))
;→ "hello!" 
;⇒ #<SB-THREAD:THREAD "hello" FINISHED values: "hello!" {1011C39CC1}>
というところ。

comments powered by Disqus