重要ではないネイティブ拡張では、インタープリタデータごとに動的に割り当てられる構造体が必要です。Tcl拡張:拡張のライフサイクルClientData
現在、Tcl_SetAssocDataを使用していますが、このメモリが漏れないように、拡張子の名前に と対応するキーと適切な削除ルーチン が対応しています。
しかし、Tcl_PkgProvideExでは、このような 情報も記録できます。この情報は Tcl_PkgRequireExによって取得できます。エクステンションのデータ構造体 をそのパッケージに関連付けることは、 "grab-bag"よりも自然なようです。 AssocData; Pkg * Exルーチンは、 自動的に呼び出された削除ルーチンを提供しません。だから、私は がAssocDataアプローチにとどまる必要があると思う。
Pkg * Exルーチンはどのような状況で使用されていましたか?
さらに、Tclライブラリでは、 ExitHandlersとThreadExitHandlersをインストールすることができます。 マニュアルを参照してください。バッファーをディスクなどにフラッシュします。
ExitHandlersを使用する必要がある他の状況はありますか?
Tclがexitを呼び出すと、Tcl_PackageUnloadProcsが呼び出されますか?
「非常に長寿命」とは、何ヶ月から何年も連続して動作するプログラムを意味します。 Tclは、これが大きなセールスポイントであるエキゾチックな産業用制御システムのような場所で使用される傾向があります。 OTOH、それはまた、この種のものを実際に使用する唯一のコードが厳密に商業的(そして非常に専門的すぎる)であることを意味します... –