Sagittariusには(util concurrent)があるのだが、今までこのスタイルのライブラリを追加してなかった。理由としては
- 実装自体はトリビアルであること
- ライブラリにするにはアイデアの練りが足りないこと
(import (rnrs) (util concurrent)) (define actor (make-shared-queue-channel-actor (lambda (input-receiver output-sender) (let loop () (let ((in (input-receiver))) ;; do whatever with the input (output-sender (result)) ;; if output should be sent (loop)))))) (actor-send-message! actor 'message) ;; send a message to the actor (actor-receive-message! actor)わざわざチャンネルに使われているキュー名が入っているのは以下の理由から
- shared-priority-queueバージョンのアクターもある
- 入力と出力にどんなキューが使われるのか分からないので、make-actorみたいなのにはできない
これをアクターと呼んでいいのかは正直よくわからないが、広義ではアクターモデルだろうということで。