読者です 読者をやめる 読者になる 読者になる

ほんとのこと知りたいだけなのに。

夏休みはもうおわり。

可搬スレッド投入関数。

データ登録の平行度合いを上げるためにスレッドマネージャを作ることにしたんじゃけど、最近は SBCL(Linux) と Clozure CL(Windows) の両方を使う事が多いけぇ どちらでも動くようにしょうと思ったんよ。

とりあえずスレッドを投入する可搬オペレータを下のように書いたんじゃけどダメじゃったみたい。
存在せんパッケージを指定しとると defmacro の時にエラーになるんよ。

マクロじゃったら実行するまで評価されんのかと思うたんじゃが莫迦な勘違いじゃったみたい。

(defmacro enter-thread (&key name process)  
  `(cond ((string= (lisp-implementation-type) "Clozure Common Lisp")
	  (ccl:process-run-function ,name ,process))
	 ((string= (lisp-implementation-type) "SBCL")
	  (sb-thread:make-thread  ,process :name ,name))))

で「実践Common Lisp」の "パスネーム可搬ライブラリ" を見たら #+ を使えばエエということがわかったんで無事解決したんよ。

(defun enter-thread (&key name process)
  #+sbcl (sb-thread:make-thread  process :name name)
  #+ccl  (ccl:process-run-function name process))


いやぁ、ホンマよかったけぇ。