(rontolisp) docs
← 関数

rontolisp:make-thread

(rontolisp:make-thread function &optional bindings)

引数なしの function を実行する新しい(仮想)スレッドを生成し、不透明なスレッド ハンドルを即座に返します。ハンドルは rontolisp:join-threadrontolisp:thread-alive-prontolisp:destroy-thread に渡し、 rontolisp:threadp で判定します。mutex のハンドルと同様に 実体はバックエンドごとに異なるため、表示や順序付けは移植可能ではありません。

bindings(symbol . value) ペアの alist で、各ペアは function の実行前に 新しいスレッド内でスレッドスコープの動的束縛として確立されます。生成された スレッドは生成元の動的束縛を一切引き継ぎません。ここに項目がなければ、すべての スペシャル変数はグローバル値を読みます。*standard-output* をこの方法で束縛すると 新しいスレッドの print ファミリが指定したストリームに向かいます — bordeaux-threads/bt2 ライブラリ(および Clack のハンドラ)が使う形です。

スレッドはインタプリタと JVM バックエンドで実体があります。両方の WASM バックエンドは 構造上シングルスレッドであり、この関数はコンパイルされません。そこでは bordeaux-threads/bt2 シムの make-thread が呼び出し時に明確なエラーを通知します。

制限

  • WASM: 利用不可(上記参照)— そこでは Clack アプリを :use-thread nil で実行します。
  • 束縛の値はそのまま使われます。upstream の bordeaux-threads と異なり、新しい スレッド内でのフォーム評価はありません(bt2:make-thread シムは :initial-bindingsquote フォームと自己評価値を受け付け、それ以外は エラーを通知します)。
  • これらのプリミティブは関数値を持ちません: #'rontolisp:make-thread はエラーです。