Tcl(プログラミング言語)

Tcl
Tclロゴ
パラダイムマルチパラダイムイベント駆動型関数型命令型オブジェクト指向
設計ジョン・アスターハウト
開発者TCLコアチーム[ 1 ]
初登場1988年 (1988年
安定版リリース
9.0.3 [ 2 ] ウィキデータで編集する / 2025年11月13日 (2025年11月13日
型付けの規律動的型付け、すべてが文字列
実装言語C、Tcl
ライセンスBSDスタイル[ 3 ]
ファイル名拡張子.tcl、.tbc [ 4 ]
ウェブサイトwww .tcl-lang .org www .tcl .tk
主要な実装
ActiveTclアンドロウィッシュ
方言
ジムイーグル
影響を受けた
AWKLisp
影響を受けた
PHP[ 5 ] PowerShell[ 6 ] Tea、TH1 [ 7 ]

Tcl(発音は「ティクル」または「TCL」。[ 8 ]元々はTool Command Language)は、高水準汎用インタープリタ型の動的プログラミング言語です。非常にシンプルでありながら強力であることを目指して設計されました。[ 9 ] Tclは、変数の割り当てやプロシージャの定義といったプログラミング構造さえも、すべてをコマンドの型に当てはめます。[ 10 ] Tclは、オブジェクト指向、命令型、関数手続き型など、複数のプログラミングパラダイムをサポートしています。

TclはCアプリケーション[ 11 ]に組み込むことが一般的で、ラピッドプロトタイピング、スクリプトアプリケーション、GUI、テストなどに利用されています。 [ 12 ] Tclインタプリタは多くのオペレーティングシステムで利用可能であり、Tclコードを様々なシステムで実行できます。Tclは非常にコンパクトな言語であるため、組み込みシステムプラットフォームでは、完全な形式だけでなく、いくつかの小型バージョンも使用されています。[ 13 ]

Tcl とTk拡張機能の一般的な組み合わせはTcl/Tk (「tickle teak」または「tickle TK」と発音)と呼ばれ、Tcl でネイティブにグラフィカル ユーザー インターフェイス(GUI) を構築できます。Tcl/Tk は、標準のPythonインストールにTkinterの形で含まれています。

歴史

Tclプログラミング言語は、1988年春、ジョン・アウスターハウトがカリフォルニア大学バークレー校で働いていたときに作成されました。[ 14 ] [ 15 ]作者によると、もともとTclは「フラストレーションから生まれた」もので、[ 11 ]プログラマーが電子設計自動化(EDA)ソフトウェア、より具体的には当時ジョンが専門としていたVLSI設計ツールMagicを拡張するために独自の言語を考案したことがきっかけでした。 [ 16 ]その後、Tclは独自に受け入れられました。アウスターハウトは1997年にTcl/TkでACMソフトウェアシステム賞を受賞しました。 [ 17 ]

この名前は元々「Tool Command Language」に由来していますが、慣例的にはTCLではなくTclと表記されます。[ 18 ]

日付イベント
1990年1月TCLがバークレー以外で発表(Winter USENIX)。
1990年6月発表予定(Summer USENIX)
1991年1月Tk (Winter USENIX) の最初の発表。
1993年6月最初のTcl/Tkカンファレンス(バークレー)。[table]ジオメトリマネージャ([grid]の前身)、[incr Tcl]、TclDP、Groupkitが発表されました
1997年8月Tcl 8.0ではバイトコードコンパイラと名前空間が導入されました。[ 19 ]
1999年4月Tcl 8.1では、完全なUnicodeサポート[ 20 ]高度な正規表現[ 21 ]が導入されました
1999年8月Tcl 8.2でTcl拡張アーキテクチャ(TEA)が導入されました[ 22 ]
2000年8月Tclコアチームが結成され、Tclはよりコミュニティ指向の開発モデルに移行しました。[ 1 ]
2002年9月第9回Tcl/Tkカンファレンス(バンクーバー)。StarKitパッケージングシステムの発表。Tcl 8.4.0リリース。[ 23 ]
2007年12月Tcl 8.5では、新しいデータ型、新しい拡張リポジトリ、bignums [ 24 ]lambdas [ 25 ][ 26 ]が追加されました
2012年12月Tcl 8.6では組み込みの動的オブジェクトシステム、TclOO、およびスタックレス評価が追加されました。[ 27 ]
2024年9月Tcl 9.0では、64ビット機能、Unicodeコードポイントの全範囲のサポート、epollkqueueの使用が追加されました[ 28 ]

Tclカンファレンスとワークショップは米国ヨーロッパの両方で開催されています。[ 29 ] FlightAware [ 30 ]を含むいくつかの企業は、Tclを製品の一部として使用しています。

機能

Eclipse IDEで編集中のTclファイル

Tclの機能には以下が含まれます

  • 言語構造を含むすべての操作はコマンドです。これらは接頭辞記法で記述されます
  • コマンドは通常、可変数の引数(可変長引数)を受け入れます。
  • すべてを動的に再定義およびオーバーライドできます。実際にはキーワードがないため、制御構造さえも追加または変更できますが、これは推奨されません。
  • ソースコードを含むすべてのデータ型は文字列として操作できます。内部的には変数は整数や倍精度浮動小数点型などの型を持ちますが、変換は完全に自動で行われます。
  • 変数は宣言されるのではなく、代入されます。定義されていない変数を使用するとエラーが発生します。
  • 完全に動的なクラスベースのオブジェクトシステムであるTclOOには、メタクラス、フィルター、ミックスインなどの高度な機能が含まれています。[ 31 ]
  • ソケットファイルへのイベント駆動型インターフェース。時間ベースおよびユーザー定義のイベントも可能です。
  • 変数の可視性は、デフォルトではレキシカル (静的)スコープに制限されていますが、プロシージャが囲む関数のスコープと対話できるようになりますuplevelupvar
  • Tcl 自体によって定義されたすべてのコマンドは、誤った使用法に対してエラー メッセージを生成します。
  • CC++Java、Python、Tclによる拡張性。
  • バイトコードを使用した解釈型言語
  • 完全なUnicode (最初は 3.1、定期的に更新) をサポート。最初のリリースは 1999 年です。
  • 正規表現[ 21 ]
  • クロスプラットフォーム: Windows APIUnixLinuxMacintoshなど。
  • ウィンドウ ( GUI ) インターフェースTkとの密接なクロスプラットフォーム統合。
  • 複数の配布メカニズムが存在します:
    • 完全開発版(Windows用、例:ActiveState Tcl[1]を参照)
    • Tclkits(完全なスクリプト ランタイムを含む単一の実行可能ファイル。サイズは約 4 MB です)、Starkits(自己完結型でインストール不要、かつ移植性の高い方法でアプリケーションを配信するためのラッピング メカニズム)、およびStarpacks(Starkit と Tclkit を組み合わせて Starpack を作成します。これは単一のプラットフォーム固有の実行可能ファイルで、簡単に展開できます)
    • Jim Interpreter は、小さなフットプリントの Tcl 実装です。
    • BSDライセンスの下で自由に配布可能なソースコード[ 32 ]

Safe-Tcl

Safe-TclはTclのサブセットであり、Tclスクリプトがホストマシンやアプリケーションに害を及ぼすことがないように機能が制限されています。[ 33 ]ファイルシステムへのアクセスは制限されており、任意のシステムコマンドの実行は防止されています。信頼できないインタープリタが信頼できないスクリプト内のコードを実行する、デュアルインタープリタモデルを使用しています。これは、Nathaniel BorensteinMarshall Roseによって、アクティブなメッセージを電子メールに含めるために設計されました。Safe-Tclは、application/safe-tclmultipart/enabled-mailがサポートされている場合、電子メールに含めることができます。Safe-Tclの機能は、その後、標準のTcl/Tkリリースの一部として組み込まれました。[ 34 ] [ 35 ]

構文と基本的な意味論

Tclの構文と意味論は、Dodekalogueとして知られる12のルール[ 36 ]によってカバーされています。 [ 37 ]

Tclスクリプトは、一連のコマンド呼び出しから構成されます。コマンド呼び出しは、空白で区切られ、改行またはセミコロンで終了する単語のリストです。最初の単語はコマンド名で、言語に組み込まれている場合、利用可能なライブラリにある場合、またはスクリプト自体で定義されている場合があります。後続の単語はコマンドの引数として機能します。

コマンド名 引数1 引数2 ... 引数N 

次の例では、puts (「put string」の略) コマンドを使用して、ホスト コンソールにテキスト文字列を表示します。

「Hello, World!」と入力します

これにより、文字列「Hello, World!」が改行文字とともに 標準出力デバイスに送信されます。

変数や他のコマンドの結果を文字列に置き換えることができます。次の例では、set コマンドexprコマンドを使用して計算の結果を変数に格納し (Tcl は=代入演算子として使用しないことに注意してください)、次にputs を使用して結果を説明テキストとともに出力します。

# expr はテキスト文字列を式として評価します。set sum [ expr 1 + 2 + 3 + 4 + 5 ]は「数値 1 から 5 までの合計は $sum です。」と入力します。

文字はコメント#を表します。コメントはインタープリタがコマンド名を期待する場所であればどこにでも記述できます。

# 中括弧付きで、変数の置換は expr set x 1 set sum [expr { $x + 2 + 3 + 4 + 5 }] によって実行されます。# パラメータを expr に渡す前に $x は置換されません。# expr は式を評価する際に $x に 1 を代入します。puts " 1..5 の数値の合計は $sum です。" ; # 合計は 15 です。
# 中括弧がない場合、定義箇所で変数の置換が行われます(レキシカルスコープ)set x 2 set op * set y 3 set res [expr $x$op$y ]; # $x、$op、$yが置換され、式は次のように評価されます 6 puts "$x $op $y is $res." ; # $x、$op、$y、$resが置換され、文字列として評価されます

これらの例からわかるように、この言語にはコマンドという基本的な構成要素が1つあります。引用符のメカニズムと置換規則によって、各コマンドの引数がどのように処理されるかが決まります。

コマンドや引数を解析する前に、特別な置換が行われます。行末の文字(つまり改行の直前)がバックスラッシュの場合、バックスラッシュと改行の組み合わせ(および改行直後のスペースやタブ)は1つのスペースに置き換えられます。これによりソースコード内の長い行を次の行に折り返して読みやすくすることができます。

通常の引数処理を続けると、二重引用符( )で始まる単語は"次の二重引用符まで拡張されます。したがって、このような単語には空白文字やセミコロンを含めることができますが、これらの文字は特別な意味を持つものとして解釈されません(つまり、通常のテキスト文字として扱われます)。開き中括弧({)で始まる単語は、次の閉じ中括弧(})まで拡張されます。中括弧内では、前述のバックスラッシュと改行の除去を除き、すべての置換形式は抑制されます。どちらの構造にも囲まれていない単語は、裸の単語と呼ばれます。

裸の単語と二重引用符で囲まれた単語では、次の 3 種類の置換が発生する可能性があります。

  • コマンド置換は、対応する角括弧の内容を、その中に含まれるスクリプトの評価結果に置き換えます。例えば、は、[expr 1+2+3]含まれる式(この場合は6)の評価結果に置き換えられます。
  • 変数置換は、先頭にドル記号が付いた変数名を、その変数の内容(または値)に置き換えます。例えば、$fooは「foo」という変数の内容に置き換えられます。変数名を中括弧で囲むことで、後続のテキストと区別することができます(例:${foo}ing)。
  • バックスラッシュ置換は、バックスラッシュの後に文字が続く部分を別の文字に置き換えます。例えば、\nは改行文字に置き換えられます。

置換は、各単語を一回スキャンして左から右へと行われます。置換されたテキストは、さらなる置換の可能性を調べるために再度スキャンされることはありません。ただし、1つの単語には任意の数の置換が出現する可能性があります。

Tcl 8.5 以降では、任意の単語の前に を付けることが可能になりました{*}。これにより、コマンド呼び出しを構築する目的で、単語が構成サブワードに分割されます ( Lispの quasiquote 機能 ,@のシーケンスに似ています)。

これらの規則の結果として、任意のコマンドの結果を他の任意のコマンドの引数として使用できます。Unixコマンドシェルとは異なり、Tclは明示的に指示されない限り文字列を再解析しません。そのため、対話型の使用は煩雑になりますが、スクリプトでの使用はより予測可能になります(例えば、ファイル名にスペースが含まれていても問題はありません)。

単一の等号 ( =) は、言語において特別な役割を全く持ちません。二重の等号 ( ) は、コマンドや の最初の引数==などの式のコンテキストで等価性を判断するために使用されます。(どちらのコマンドも標準ライブラリの一部であり、ライブラリ内で特別な位置を占めるわけではなく、必要に応じて置き換えることができます。) exprif

Tcl コマンドの大部分、特に標準ライブラリは可変長引数であり、proc(スクリプト コマンド プロシージャのコンストラクター) を使用すると、指定されていない引数の既定値とキャッチオール引数を定義して、コードで任意の数の引数を処理できるようになります。

Tclは静的型付けではありません。各変数には、整数、浮動小数点数、文字列、リスト、コマンド名、辞書、その他あらゆる値を格納することができます。値は必要に応じて(構文上の制約に従って)他の型に再解釈されます。ただし、値は不変であり、値を変更するように見える操作は、実際には新しい値を返すだけです。

基本コマンド

プログラムの実行とデータ操作に関する最も重要なコマンドは次のとおりです

  • set変数に新しい値を書き込みます(存在しない場合は変数を作成します)。引数を1つだけ指定した場合は、指定された変数の値を返します(この場合、その変数は存在している必要があります)。
  • proc新しいコマンドを定義します。このコマンドを実行すると、コマンドのセットとして記述された特定の Tcl スクリプトが実行されます。これをreturn使用して、呼び出し元に制御をすぐに返すことができます。

通常の実行制御コマンドは次のとおりです。

  • if条件(第一引数)が満たされた場合、指定されたスクリプト本体(第二引数)を実行します。その後に、elseif代替条件と本体、またはelse補完ブロックなど、追加の引数を続けることができます。
  • while条件(最初の引数)が満たされている限り、指定されたスクリプト本体の実行を繰り返します。
  • foreach制御変数にリスト要素が 1 つずつ割り当てられる、指定された本体を実行します。
  • for制御変数、条件( のようにwhile)、および追加の「次の反復」ステートメント(本体の実行後に実行されるコマンド)を初期化するためのショートカット
  • switch条件付きコードの評価を簡素化します。引数を複数のケースと比較し、一致するケースに関連付けられたコードを実行します。文字列比較、正規表現、およびグロブ形式の比較をサポートしています。

上記のループ コマンドは、次のコマンドによってさらに制御できます。

  • break本体の実行を中断し、ループコマンドから戻ります
  • continue本体の実行を中断しますが、制御はループコマンドに戻されます。whileこれは再びループすることを意味します。つまり、forと はforeach、次の反復処理を開始します。
  • returnプロシージャの境界に達するまで、プロシージャ内のどの深さであっても現在の本体の実行を中断し、指定された値を呼び出し元に返します。

高度なコマンド

  • expr引数を別の式インタープリタに渡し、評価された値を返します。同じインタープリタが「条件付き」式ifやループコマンドにも使用されることに注意してください
  • listすべての引数を含むリストを作成します。引数が指定されていない場合は空の文字列が返されます。このlindexコマンドは結果に対して使用して、元の引数を再抽出することができます。
  • array配列変数を操作します。
  • dict辞書(8.5 以降)を操作します。辞書は偶数個の要素を持つリストであり、2 つの要素ごとにキーと値のペアとして解釈されます。
  • regexp正規表現を文字列と照合します。
  • regsub正規表現パターン マッチングに基づいて置換を実行します。
  • uplevelスタック上の現在の最も内側のスコープ以外のスコープでコマンド スクリプトを実行できるようにするコマンドです。
  • upvar別のスタック フレーム内の変数へのリンクを作成します。
  • namespaceコマンドと変数の個別のコンテキストを作成、アクセス、破棄できます。
  • apply匿名関数を適用します (8.5 以降)。
  • coroutine、、yieldおよびコルーチンyieldtoから値を作成して生成します(8.6 以降)。
  • tryエラーと例外をトラップして処理できます (8.6 以降)。
  • catch例外的なリターンを獲得できます。
  • zlibZlib ライブラリの圧縮およびチェックサム機能へのアクセスを提供します (8.6 以降)。

アップレベル

uplevelコマンドスクリプトをスタック上の現在の最も内側のスコープ以外のスコープで実行することを可能にします。コマンドスクリプト自体がアップレベルコマンドを使用するプロシージャを呼び出す可能性があるため、これはコールスタックをコールツリーに変換するという実質的な効果があります。 [ 38 ]

これは元々、Tclプロシージャが組み込みコマンド(forif 、 whileなど)を再実装し、ローカル変数を操作できるようにするために実装されました。例えば、次のTclスクリプトはforコマンドを再実装したものです(例外処理は省略されています)。

proc for { initCmd testExpr advanceCmd bodyScript } { uplevel 1 $initCmd set testCmd [ list expr $testExpr ] while {[uplevel 1 $testCmd ]} { uplevel 1 $bodyScript uplevel 1 $advanceCmd } }

ウプヴァール

upvar現在のプロシージャ内の1つ以上のローカル変数が、外側のプロシージャ呼び出し内の変数またはグローバル変数を参照するように調整します。upvarコマンドは、名前によるプロシージャ呼び出しの実装を簡素化し、Tclプロシージャとして新しい制御構造を構築することも容易にします。[ 39 ]

組み込みincrコマンドのように動作する decr コマンドですが、変数に値を追加するのではなく減算します。

proc decr { varName {デクリメント1 }} { upvar 1 $varName var incr var [expr { -$decrement }] }

末尾呼び出し

Tclでは再帰がサポートされており、コマンドによって簡素化されています。このコマンドは現在のスタックフレームを次の呼び出しに再利用するため、スタックオーバーフローの問題 tailcallを回避できます

これはコラッツ列を計算する例です。

proc collat​​z { n } { puts $n if { $n > 1 } { if { $n % 2 == 0 } { tailcall collat​​z [expr { $n >> 1 }] } else { tailcall collat​​z [expr { $n * 3 + 1 }] } } }

コマンドtailcallは呼び出し元に限定されず、他の機能を呼び出すためにも使用できます。

オブジェクト指向

Tcl 8.6は2012年に組み込みの動的オブジェクトシステムであるTclOOを追加しました。[ 31 ]これには次のような機能が含まれています

  • クラスベースのオブジェクトシステム。ほとんどのプログラマーがオブジェクト指向に期待するのはこれです。
  • オブジェクトごとのカスタマイズとクラスの動的な再定義を可能にします。
  • メタクラス
  • フィルター
  • ミックスイン
  • メソッドを独自の方法で実装するためのシステム。これにより、メソッドの実装方法に大きく異なる方法を望むパッケージ作成者は、かなり簡単にそれを実行できます
oo :: class create fruit { method eat {} { puts "yummy!" } } oo :: class create banana { superclass fruit コンストラクター{} { my variable peeled set peeled 0 } method peel {} { my variable peeled set peeled 1 puts "skin now off" } method edible ? {} { my variable peeled return $peeled } method eat {} { if { ! [ my edible ? ]} { my peel } next } } set b [ banana new ] $b eat  prints "skin now off" and "yummy!" fruit destroy $b eat  error "unknown command"

Tclは2012年までオブジェクト指向(OO)構文を備えていなかったため[ 31 ] 、オブジェクト指向プログラミングを可能にする様々な拡張パッケージが登場しました。これらは既存のTclソースコードに広く利用されています。一般的な拡張パッケージには以下のものがあります。

TclOOは、強力なオブジェクト指向システムを構築するために追加されただけでなく、拡張パッケージがTclOOを基盤としてオブジェクト指向抽象化を構築できるようにするためにも追加されました。TclOOのリリース後、incr TclはTclOOを基盤として利用するように更新されました。[ 27 ]

ウェブアプリケーション開発

Tclウェブサーバーは、HTTPプロトコルサーバーの純粋なTcl実装です。標準のTclインタープリタ上でスクリプトとして実行されます

Apache Rivetは、 Apache HTTP Server用のオープンソースプログラミングシステムであり、開発者が動的なWebアプリケーションを作成するためのスクリプト言語としてTclを使用することができます。Rivetは、PHPASPJSPに似ています。Rivetは、主にDamon Courtney、David Welton、Massimo Manghi、Harald Oehlmann、Karl Lehenbauerによって開発されました。Rivetは、データベースインタラクション(Oracle、PostgreSQL、MySQL、SQLiteなど)や、GD Graphics Libraryなどの一般的なアプリケーションへのインターフェースなど、無数の機能を提供する、公開されている数千ものTclパッケージを使用できます。

他の言語とのインターフェース

TclはC言語とネイティブにインターフェースします。[ 40 ]これは、Tclが元々C言語で書かれたコマンドの構文的なフロントエンドを提供するためのフレームワークとして書かれたためであり、C言語のすべてのコマンド(またはなど、キーワードとなる可能性のあるものも含む)はこのように実装されています。各コマンド実装関数には、コマンドの(既に置換された)引数を表す値の配列が渡され、関数はそれらの値を必要に応じて自由に解釈します。 ifwhile

デジタルロジック シミュレータには、多くの場合、 VerilogVHDL、 SystemVerilogハードウェア言語をシミュレートするための Tcl スクリプト インターフェイスが含まれています。

任意の C 関数と Tcl ランタイムを接続するために必要なコードを自動的に生成するツール (例: SWIGFfidl ) が存在し、 Critcl はその逆を行い、任意の C コードを Tcl スクリプト内に埋め込み、実行時にDLLにコンパイルできるようにします。

拡張パッケージ

Tcl言語では、GUI、ターミナルベースのアプリケーション自動化、データベースアクセスなどの追加機能を提供する拡張パッケージが常にサポートされています。一般的に使用される拡張機能には、以下のものがあります

Tk
最も人気のあるTcl拡張機能はTkツールキットで、さまざまなオペレーティングシステム用のグラフィカルユーザーインターフェースライブラリを提供します。各GUIは1つ以上のフレームで構成されます。各フレームにはレイアウトマネージャーがあります
期待
非常に人気のあるTcl拡張機能の一つに、Expect拡張機能があります。ExpectとTclの初期の密接な関係は、Unixテストなどの幅広い用途でTclが普及した大きな要因です。Expectは、telnet、ssh、シリアルセッションを自動化し、多くの反復タスク(以前は対話型のみだったアプリケーションのスクリプト作成など)を実行するために、非常に効果的に利用されていました(そして現在もそうです)。Expectを実行する唯一の方法はTclだったため、Tclはこれらの業界で非常に人気を博しました。
Tile/Ttk
Tile/Ttk [ 41 ]は、Tkのほとんどのウィジェットを、オペレーティングシステムAPI呼び出しを通じて真にプラットフォームネイティブなバリアントに置き換えることができるスタイルとテーマのウィジェットコレクションです。この方法でカバーされているテーマは、Windows XP、Windows Classic、Qt ( X11 KDE環境ライブラリにフックするもの)、Aqua (Mac OS X)です。これらの呼び出しなしで、画像ピックスマップで補足されたウィジェット定義を使用してテーマを構築することもできます。この方法で作成されたテーマには、Classic Tk、Step、Alt/Revitalized、Plastik、Keramikなどがあります。Tcl 8.4ではこのパッケージはTileとして知られていますが、Tcl 8.5ではTkのコアディストリビューションに(Ttkとして)組み込まれています
Tix
Tix(Tkインターフェース拡張)は、Tcl/TkおよびPythonアプリケーションの機能を拡張するユーザーインターフェースコンポーネントのセットです。Tixプロジェクトグループのボランティアによって保守され、BSDスタイルのライセンスの下でリリースされているオープンソースソフトウェアパッケージです。[ 42 ]
Itcl/IncrTcl
ItclはTclのオブジェクトシステムであり、通常は[incr Tcl]という名前が付けられます(これはTclでのインクリメント方法であり、C++の名前に似ています)。
Tcllib
Tcllibは、コンパイル手順なしで使用できるTcl用のスクリプトパッケージのセットです
Tklib
TklibはTk用のユーティリティモジュールのコレクションであり、Tcllibの補助ツールです
tDOM
tDOMは、 Expatパーサーに基づいたXML解析用のTcl拡張機能です
TclTLS
TclTLSはTclのOpenSSL拡張です。
TclUDP
TclUDP [ 43 ]拡張機能は、Tclでユーザーデータグラムプロトコル(UDP)ソケットをサポートするためのシンプルなライブラリを提供します。
TWAPI
TWAPI(Tcl Windows API)は、Windows APIへのバインディングを提供するTclの拡張機能です
データベース
Tcl 8.6の一部であるTcl Database Connectivity(TDBC)は、Tclスクリプト用の共通データベースアクセスインターフェースです。現在、MySQLODBCPostgreSQLSQLiteデータベースにアクセスするためのドライバをサポートしています。今後、さらに多くのドライバがサポートされる予定です。データベースへのアクセスは、データベース固有の拡張機能を通じてもサポートされており、多くの拡張機能が利用可能です。[ 44 ]

こちらもご覧ください

参考文献

  1. ^ a b「Tcl/Tk コア開発」 Tcl Developer Xchange 2016年11月1日閲覧
  2. ^ "[TCLCORE] Tk 9.0.3 リリース" . 2025年11月13日. 2025年11月13日閲覧
  3. ^ 「Tcl/Tkライセンス条項」 Tcl Developer Xchange . 2016年11月2日閲覧
  4. ^ 「Tcl Dev Kit – コンパイラ」 . ActiveState Docs . 2016年10月20日時点のオリジナルよりアーカイブ2016年11月2日閲覧。
  5. ^ Lerdorf, Rasmus (2007-04-26). 「PHP on Hormones – Rasmus LerdorfによるPHPの歴史に関するプレゼンテーション(カリフォルニア州サンタクララのMySQLカンファレンスにて)」 The Conversations Network . 2009年12月11日閲覧
  6. ^ 「PowerShell と WPF: WTF」。Windows PowerShell ブログ。Microsoft。2008年12月25日時点のオリジナルよりアーカイブ2019年4月3日閲覧。
  7. ^ 「TH1 スクリプト」。Fossil。
  8. ^ Kenny, Kevin (2005年7月4日). 「Re: TCL認証」 .ニュースグループcomp.lang.tcl .
  9. ^ 「言語」 . Tcl Developer Xchange . 2016年11月2日閲覧
  10. ^ Tclの基礎 TclとTkの実践プログラミングの第1章、 ISBN 0-13-038560-3
  11. ^ a b TclとTkツールキットの内側のフラップより、ISBN 0-201-63337-X
  12. ^ 「Tcl/Tkの用途」 Tcl Developer Xchange 。 2016年11月2閲覧
  13. ^ 「Cisco IOS Scripting with TCL Configuration Guide」 . Cisco Support . 2016年11月2日閲覧。
  14. ^ John Ousterhout. 「Tclの歴史」個人ページスタンフォード大学2011年8月9日閲覧
  15. ^ 「Tclの歴史」 Tcl Developer Xchange . 2016年11月2日閲覧
  16. ^ "EDA" . wiki.tcl-lang.org . 2022年4月27日閲覧
  17. ^ 「John K Ousterhout – Award Winner」 ACM Awards . 2016年11月4日閲覧。
  18. ^ Tcler の Wiki よりTcl vs. TCL
  19. ^ 「Tcl/Tk 8.0リリースアナウンスメント」 Tcl Developer Xchange . 2014年7月1日閲覧
  20. ^ 「Tcl/Tk 8.1 リリースアナウンスメント」 Tcl Developer Xchange . 2014年7月1日閲覧
  21. ^ a b「Tcl 8.1の新しい正規表現機能」。Tcl Developer Xchange 。 2016年11月2日閲覧
  22. ^ 「Tcl/Tk 8.2 リリースアナウンスメント」 Tcl Developer Xchange 1999年8月18日2014年7月1日閲覧
  23. ^ 「Tcl/Tk 8.4 リリースアナウンスメント」 Tcl Developer Xchange 2013年6月1日2014年7月1日閲覧
  24. ^ 「TIP #237: Tclの任意精度整数」 Tcl Developer Xchange . 2016年11月1日閲覧
  25. ^ 「TIP #194: Applyによる値としてのプロシージャ」 Tcl Developer Xchange 2016年11月1日閲覧
  26. ^ 「Tcl/Tk 8.5 リリースアナウンスメント」 Tcl Developer Xchange 2013年9月18日2014年7月1日閲覧
  27. ^ a b「Tcl/Tk 8.6 リリースアナウンスメント」 Tcl Developer Xchange 2013年9月20日2014年7月1日閲覧
  28. ^ 「Tcl/Tk 9.0 リリースアナウンスメント」 . Tcl Developer Xchange . 2024年9月26日. 2024年9月26日閲覧
  29. ^ 「Tcl/Tkカンファレンス」 Tcl Developer Xchange . 2016年11月1日閲覧
  30. ^ "FlightAware" . GitHub . 2024年10月2日閲覧
  31. ^ a b c「TIP #257: Tclのオブジェクト指向」Tcl Developer Xchange . 2016年11月1日閲覧
  32. ^ 「Tcl/Tkソースのダウンロード」Tcl Developer Xchange . 2016年11月1日閲覧
  33. ^ 「Safe Tcl」 . Tcl Developer Xchange . 2016年11月1日閲覧
  34. ^ Brown, Lawrie (1996年9月18~20日). 「モバイルコードセキュリティ」 . Bossomaier, Terry; Chubb, Lucy (編). Proceedings, 2nd Joint Conference, AUUG '96 and Asia-Pacific WWW '96 . Melbourne, Australia. p. 50. 2011年3月22日閲覧.
  35. ^ウェルチ, ブレント B.; ジョーンズ, ケン; ホッブス, ジェフリー (2003). Tcl と Tk による実践プログラミング. 第 1 巻 (第 4 版). プレンティス・ホール PTR. p. 291. ISBN 0-13-038560-3.
  36. ^ 「Tclマニュアルページ – Tcl組み込みコマンド」Tcl Developer Xchange2014年6月14閲覧
  37. ^ 『ドデカローグ』 . Tclear の Wiki 2014 年 6 月 14 日に取得(ルールの短縮版「オクタローグ」も含まれています。)
  38. ^ 「uplevelマニュアルページ – 組み込みコマンド」 Tcl Developer Xchange . 2016年6月14日閲覧
  39. ^ 「upvarマニュアルページ – 組み込みコマンド」 Tcl Developer Xchange . 2016年6月14日閲覧
  40. ^ "Tcl C API" . tcl.tk. 2016年11月2日閲覧
  41. ^ 「Tile: Tkの改良テーマエンジン」 SourceForge . 2016年8月7日閲覧
  42. ^ 「Tixライセンス」 . SourceForge . 2012年8月7日閲覧
  43. ^ "TclUDP" . Tcl'ers Wiki . 2012年8月7日閲覧
  44. ^ "TDBC" . Tcl'ers Wiki . 2012年8月7日閲覧

さらに詳しい情報