## Tcl9.0.3/Tk9.0.3 Documentation > Tcl C API > CrtInterp

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

  NAME
    Tcl_CreateInterp, Tcl_DeleteInterp, Tcl_InterpActive, Tcl_InterpDeleted — 命令解釈実行機能の生成と削除 create and delete Tcl command interpreters
  SYNOPSIS
    #include <tcl.h>
    Tcl_Interp *
    Tcl_CreateInterp()
    Tcl_DeleteInterp(interp)
    int
    Tcl_InterpDeleted(interp)
    int
    Tcl_InterpActive(interp)
  引数 ARGUMENTS
    Tcl_Interp *interp (入力in)
  説明 DESCRIPTION
  解釈実行機能と記憶装置の管理 INTERPRETERS AND MEMORY MANAGEMENT
    引数として渡された解釈実行機能Interpreters Passed As Arguments
    解釈実行機能の生成と削除Interpreter Creation And Deletion
    データ構造から解釈実行機能を取戻す Retrieving An Interpreter From A Data Structure
  SEE ALSO
  KEYWORDS

### NAME

Tcl_CreateInterp, Tcl_DeleteInterp, Tcl_InterpActive, Tcl_InterpDeleted — 命令解釈実行機能の生成と削除 create and delete Tcl command interpreters

### SYNOPSIS

#include <tcl.h>
Tcl_Interp *
Tcl_CreateInterp()
Tcl_DeleteInterp(interp)
int
Tcl_InterpDeleted(interp)
int
Tcl_InterpActive(interp)

### 引数 ARGUMENTS

Tcl_Interp *interp (入力in)
  破壊されるべき解釈実行機能の字句結果｡ Token for interpreter to be destroyed or queried.

### 説明 DESCRIPTION

Tcl_CreateInterp は新しい解釈実行機能構造を生成しそれに関する字句を返す｡その字句は､ Tcl_CreateCommand や Tcl_Eval や Tcl_DeleteInterp の様な､大多数の他の Tcl 手続函数への呼出し内で要求される｡ Tcl_CreateInterp によって返される字句は､元の Tcl_CreateInterp 呼出しとして同じ時分割片から呼ばれた Tcl 機能譜に渡されるだけかもしれない｡時分割多重の為に Tcl's 機能譜に同じ字句を渡すことは安全ではない｡新しい解釈実行機能は Tcl 命令及び､ tcl_platform や env の様な変数と共に初期化される｡更なる命令の束縛には Tcl_CreateCommand を､追加的変数の作成には Tcl_SetVar をそれぞれ呼出されたい｡ Tcl_CreateInterp creates a new interpreter structure and returns a token for it. The token is required in calls to most other Tcl procedures, such as Tcl_CreateCommand, Tcl_Eval, and Tcl_DeleteInterp. The token returned by Tcl_CreateInterp may only be passed to Tcl routines called from the same thread as the original Tcl_CreateInterp call. It is not safe for multiple threads to pass the same token to Tcl's routines. The new interpreter is initialized with the built-in Tcl commands and with standard variables like tcl_platform and env. To bind in additional commands, call Tcl_CreateCommand, and to create additional variables, call Tcl_SetVar.

Tcl_DeleteInterpR は解釈実行機能に削除の印を附る; その解釈実行機能は､ Tcl_Preserve への呼出しによって合致したものについての Tcl_Preserve 呼出しが全てされた時､最終的に削除される｡その瞬間､それに結合した全ての原資は､変数も､手続函数も､応用譜固有の命令の束縛も､削除される｡ Tcl_DeleteInterp が返った後は､解釈実行機能上の Tcl_Eval を使うどの様な試みも失敗し TCL_ERROR を返す｡ Tcl_DeleteInterp への呼出しの後は､解釈実行機能の結果､や待ち行列の調査､変数の設定､手続函数の定義､消去､取り返し､実行時棚評価の検査､は安全である｡詳細については､下の INTERPRETERS AND MEMORY MANAGEMENT の節を参照されたい｡ Tcl_DeleteInterp marks an interpreter as deleted; the interpreter will eventually be deleted when all calls to Tcl_Preserve for it have been matched by calls to Tcl_Release. At that time, all of the resources associated with it, including variables, procedures, and application-specific command bindings, will be deleted. After Tcl_DeleteInterp returns any attempt to use Tcl_Eval on the interpreter will fail and return TCL_ERROR. After the call to Tcl_DeleteInterp it is safe to examine the interpreter's result, query or set the values of variables, define, undefine or retrieve procedures, and examine the runtime evaluation stack. See below, in the section INTERPRETERS AND MEMORY MANAGEMENT for details.

Tcl_InterpDeleted は､もし interp を引数として Tcl_DeleteInterp が呼ばれると､非零を返す; それは､Tcl_Release への呼出しに合致するものへの Tcl_Preserve への最後の呼出しの時に､この解釈実行機能は最終的に削除される｡もし非零が返されると､この解釈実行機能内の更なる Tcl_Eval への呼び出しは TCL_ERROR を返す｡ Tcl_InterpDeleted returns nonzero if Tcl_DeleteInterp was called with interp as its argument; this indicates that the interpreter will eventually be deleted, when the last call to Tcl_Preserve for it is matched by a call to Tcl_Release. If nonzero is returned, further calls to Tcl_Eval in this interpreter will return TCL_ERROR.

Tcl_InterpDeleted は､削除されることに対して記憶域のみの回収が責務の時と､解釈実行機能全体が削除される時と､を区別する削除回収に便利である｡前者の場合､回収は削除されたデータを再生成するかも知れないが､それはもし､解釈実行機能が削除された場合無限繰り返しに陥るかもしれない｡ Tcl_InterpDeleted is useful in deletion callbacks to distinguish between when only the memory the callback is responsible for is being deleted and when the whole interpreter is being deleted. In the former case the callback may recreate the data being deleted, but this would lead to an infinite loop if the interpreter were being deleted.

Tcl_InterpActive は解釈実行機能内に実行が進行中の記述譜があるか否かを定めるには便利である､それは使用済み記憶域再回収環境内に Tcl が埋込まれた時に有用な情報の断片であり､解釈実行機能が削除対象か否かを定めるには必須になる｡その函数はもし解釈実行機能が少なくともその内部に一つの活動的な実行を有している場合真値を返し､それ以外は偽値を返す｡ Tcl_InterpActive is useful for determining whether there is any execution of scripts ongoing in an interpreter, which is a useful piece of information when Tcl is embedded in a garbage-collected environment and it becomes necessary to determine whether the interpreter is a candidate for deletion. The function returns a true value if the interpreter has at least one active execution running inside it, and a false value otherwise.

### 解釈実行機能と記憶装置の管理 INTERPRETERS AND MEMORY MANAGEMENT

Tcl_DeleteInterp は､入子になった評価や種々の拡張の C 符号命令に使われ得る解釈実行機能上に､何時でも呼ばれ得る｡ Tcl 実装は､簡素な仕組みで､大多数の場合に､入子になった呼出し内で削除される心配なく､又解釈実行機能を保護する為に特別な命令符号が要求されることなく､使用者が解釈実行機能を使う為に呼出す事を許容する｡この仕組みにより､ Tcl_DeleteInterp が呼出された後でさえも､入子になった使用が確実に､安全に連続して使用可能になる｡ Tcl_DeleteInterp can be called at any time on an interpreter that may be used by nested evaluations and C code in various extensions. Tcl implements a simple mechanism that allows callers to use interpreters without worrying about the interpreter being deleted in a nested call, and without requiring special code to protect the interpreter, in most cases. This mechanism ensures that nested uses of an interpreter can safely continue using it even after Tcl_DeleteInterp is called.

その仕組みは Tcl_Preserve への呼び出しが Tcl_Release への呼出しに対応することに基いている｡もし Tcl_DeleteInterp が呼ばれると､ Tcl_Release による呼出しに合致された最後の Tcl_Preserve への呼出しの時のみ､解釈実行機能が解放される｡この函数の記述に就いては取扱説明書の Tcl_Preserve の項を参照されたい｡ 　　　 The mechanism relies on matching up calls to Tcl_Preserve with calls to Tcl_Release. If Tcl_DeleteInterp has been called, only when the last call to Tcl_Preserve is matched by a call to Tcl_Release, will the interpreter be freed. See the manual entry for Tcl_Preserve for a description of these functions.

解釈実行機能の使用者が Tcl_Preserve と Tcl_Release を呼ばねばならない時の規則は簡素である｡　　　　 The rules for when the user of an interpreter must call Tcl_Preserve and Tcl_Release are simple:

引数として渡された解釈実行機能Interpreters Passed As Arguments
  引数として解釈実行機能に渡された函数は何も特別な防御無しに解釈実行機能を安全に使うことができる｡従って､使用者は新しい Tcl 命令からなる拡張機能を書く時に､引数として受取った解釈実行機能を保護する為の特別な命令符号は必要ではない｡ 　　　　 Functions that are passed an interpreter as an argument can safely use the interpreter without any special protection. Thus, when you write an extension consisting of new Tcl commands, no special code is needed to protect interpreters received as arguments. This covers the majority of all uses.

解釈実行機能の生成と削除Interpreter Creation And Deletion
  Tcl_Eval や Tcl_VarEval や Tcl_GlobalEval や Tcl_SetVar や Tcl_GetVar への呼出しの中で､新しい解釈実行機能が生成され使われる時､ Tcl_Preserve と Tcl_Release の対が全ての解釈実行機能の使用に包み込まれるべきである｡憶えておくべきことは､一度 Tcl_Release が呼ばれると､解釈実行機能の使用は安全ではないことである｡解釈実行機能がもはや必要でなくなった時に適切な削除が確実にされるために､もし何か他の命令符号が既に Tcl_DeleteInterp を呼んだかを試験するために Tcl_InterpDeleted を呼ばれたい; 未だであれば､自身の命令符号の中で Tcl_Release を呼ぶ前に Tcl_DeleteInterp を呼ばれたい｡ When a new interpreter is created and used in a call to Tcl_Eval, Tcl_VarEval, Tcl_GlobalEval, Tcl_SetVar, or Tcl_GetVar, a pair of calls to Tcl_Preserve and Tcl_Release should be wrapped around all uses of the interpreter. Remember that it is unsafe to use the interpreter once Tcl_Release has been called. To ensure that the interpreter is properly deleted when it is no longer needed, call Tcl_InterpDeleted to test if some other code already called Tcl_DeleteInterp; if not, call Tcl_DeleteInterp before calling Tcl_Release in your own code.

データ構造から解釈実行機能を取戻す Retrieving An Interpreter From A Data Structure
  評価機能(Tcl_Eval や Tcl_VarEval や Tcl_GlobalEval や Tcl_EvalObjv 等 )又は変数利用機能 (Tcl_SetVar や Tcl_GetVar や Tcl_SetVar2Ex 等.)の内の一つを使う為に､解釈実行機能がデータ構造(譬えば､呼戻しの依頼者データ)から取戻された時､ cl_Preserve と Tcl_Release の対の呼出しは全ての解釈実行機能の使用に包み込まれることになる; ; 一度 Tcl_Release が呼ばれると､解釈実行機能の再使用は安全ではない｡もし解釈実行機能が回収データ構造の内部に保存される場合､解釈実行機能が削除される時に､解釈実行機能がデータ構造から取去られる(譬えば欄を NULL に設定することにより)様に､適切な削除一掃の仕組みがデータ構造を生成した命令符号により据付けられるべきである｡そうでない場合､使用者は解除され､且つ､その記憶域が既に再使用されている解釈実行機能を使用するかもしれない｡ 　　 When an interpreter is retrieved from a data structure (e.g. the client data of a callback) for use in one of the evaluation functions (Tcl_Eval, Tcl_VarEval, Tcl_GlobalEval, Tcl_EvalObjv, etc.) or variable access functions (Tcl_SetVar, Tcl_GetVar, Tcl_SetVar2Ex, etc.), a pair of calls to Tcl_Preserve and Tcl_Release should be wrapped around all uses of the interpreter; it is unsafe to reuse the interpreter once Tcl_Release has been called. If an interpreter is stored inside a callback data structure, an appropriate deletion cleanup mechanism should be set up by the code that creates the data structure so that the interpreter is removed from the data structure (e.g. by setting the field to NULL) when the interpreter is deleted. Otherwise, you may be using an interpreter that has been freed and whose memory may already have been reused.

Tcl と Tk 内の全ての解釈実行機能の使用は既に保護されている｡拡張機能の作者は､上に述べた様に､その命令譜が使われているどの解釈実行機能も適切に保護する事を確実にするべきである｡ 　　　 All uses of interpreters in Tcl and Tk have already been protected. Extension writers should ensure that their code also properly protects any additional interpreters used, as described above.

註意すべきは保護の仕組みは通常の記憶域再回収系では巧く働かない｡この様な管理環境下では､ Tcl_InterpActive は､何時から解釈実行機能が非活動的なために削除の候補であるかを決定する為に使用すべきである｡ Note that the protection mechanisms do not work well with conventional garbage collection systems. When in such a managed environment, Tcl_InterpActive should be used to determine when an interpreter is a candidate for deletion due to inactivity.

### SEE ALSO

Tcl_Preserve, Tcl_Release

### KEYWORDS

command, create, delete, interpreter
Copyright © 1989-1993 The Regents of the University of California.
Copyright © 1994-1996 Sun Microsystems, Inc.