Tcl 9.0 リリース
(tcl-lang.org)- Tcl/Tk 9.0 は Tcl と Tk の最新メジャーリリースで、新機能と Tcl/Tk 8 と比べた一部の非互換性をあわせて提供する
- 最新リリース表記は Tcl/Tk 9.0.4 で、日付は 2026年6月26日
- Tcl は 2GB を超えるデータ値を扱う 64-bit capacity を提供し、文字列は利用可能なメモリ範囲内で任意の長さを持つことができ、リストと辞書は非常に多くの要素を持てる
- テキスト処理は Unicode コードポイント全範囲、
utf-16・utf-32・ucs-2系列とCESU-8などの新しいエンコーディング、I/O エンコーディングを制御するencodingprofiles、sourceのデフォルト-encoding utf-8を提供する - Tcl は
zipfsにより zip ファイルをファイルシステムのようにマウントでき、実行ファイルやライブラリに付加したファイルシステムアーカイブによる starkit 方式のアプリケーション配布をサポートする - Unix イベント処理エンジンは利用可能な場合 epoll または kqueue ベースで構成され、これらのシステムコールがないプラットフォームには
selectベース実装が残されている - Tcl 9.0 の主な非互換性として、限定されていない変数名はグローバルではなく現在の namespace で解決されること、I/O malencoding のデフォルト応答がエラー(
-profile strict)に変更されたこと、パスの~がホームディレクトリとして解釈されないこと、$::tcl_precisionが double の文字列生成制御にもう使われないことがある - ビルドとプラットフォームの変更として
--disable-threadsビルドオプションが削除され、常に thread-enabled となり、Windows では Windows 7 または Windows Server 2008 R2 以降が必要となる - Tcl C 拡張では Tcl 8.6 以下向けにビルドしたバイナリ は Tcl 9.0 では動作せず、Tcl 9.0 の ABI 互換性は目標ではなかったが、多くの場合は削除された API 関数を使っていなければ Tcl 9.0 向けに再ビルドできる
- C 公開インターフェースでは多くの引数が
intからTcl_Sizeに拡張され、Tcl_ChannelTypeVersion5 未満のサポート終了、Tcl_ObjType構造体のバージョン管理導入、CONST*マクロと複数の API 関数の削除が適用された - Tk 9.0.0 は Tcl 8.6 をサポートせず、Tk 9.0.0 を使うには先に Tcl 9.0.0 が必要
- Tk は OS の通知・出力・トレイ機能にアクセスするための
tk sysnotify、tk print、tk systrayを提供する - Tk イメージは部分的な SVG サポート、photo image
metadataの読み書き、alpha channel へのアクセスを提供する - Tk の内蔵ウィジェットとテーマは scaling-aware に変わり、利用可能な環境では二本指ジェスチャーのサポートが改善され、
tk windowingsystemの “aqua” は macOS 10.10 以降が必要 - Tcl 9 移行資料として Migrating C extensions to Tcl 9 と Migrating scripts to Tcl 9 が提供されている
1件のコメント
Hacker News の意見
27年ぶりの初のメジャーリリースです。内部構造が64ビットなのでデータを非常に大きくでき、最新の絵文字を含む完全なUnicode、Zipファイルシステムなど新機能も多数あります
古い残骸も一部削除されたため、いくつかのプログラムは更新が必要になるかもしれませんが、それでも互換性は高いほうです。上記ページから、含まれた機能/除外された機能を詳しく記したリリースノートにリンクされています
~**を、なぜ削除したのか気になります言語純粋主義者や1990年代式のオブジェクト指向純粋主義者はTclを本当に嫌いますが、このエコシステムには独特の設計哲学があります
すべてが文字列またはコマンドで、オブジェクト指向拡張はやや後付け感がありますが、tkinterのようにPythonからTclを使うのではなく純粋なTcl/TkでGUIを作ってみたり、SQLiteインターフェースを使ってみたり、小さなC拡張を書いたりライブラリをラップしてみたりすると、多くの部分がただうまく動きます
https://folk.computer のドキュメントからリンクをたどって読んだのですが、このプロジェクトもTclをスクリプト言語として使っています。そういう用途なら、Tclを特に嫌う理由はないのかもしれません
[1] http://antirez.com/articoli/tclmisunderstood.html
その一つは、完全なWebサーバーには二度とJITコンパイラのない動的言語を使いたくない、ということでした。言語自体は素晴らしいのですが、性能問題のためにTclライブラリを定期的にCで書き直すのはあまり良いものではありませんでした
コメントを書く前に
;でコマンドを終わらせる必要があり、中かっこの対応が崩れていてはいけないので、壊れたコードをコメントアウトしようとしてはいけませんし、コメント内にバックスラッシュも入れられません。ただし、これも機能だと説明されていて、wishを実行するときに次のように書くためです#!/bin/sh# the next line restarts using wish \exec wish8.0 "$0" "$@"バックスラッシュはシェルでは無視されますが、
wishではパースされますhttps://github.com/TPC-Council/HammerDB/blob/master/src/post...
Tclはシェルスクリプト言語としては悪くないほうです
Tclの中央イベント処理エンジンが、利用可能な場合は
epollまたはkqueueの上に構築され、そうでないプラットフォームにはselectベースの実装が残るという点は、ものすごい変化ですTclの並行性が古くて性能が低いと見なされていた大きな理由は、
epollとkqueueが少なくとも10年は利用可能だったにもかかわらず、selectに依存していたからです。Tclは始めやすく、メタプログラミングも簡単なので、好きな言語の一つですもう一つの理由は、私たちが速いTclをどう書くべきかよく分かっていないことで、そのスレッドで私は意図せずそれを示してしまいました
NaviServer [0]をおすすめしたいです。以前の名前はAOLServer [1]で、実戦で長く検証されてきた防弾級のWebサーバーです
かつてAOLを動かすのに使われていたものなら、それ以上言う必要はありません。OpenACS [2]が主要プロジェクトで、1997年から存在しており、特にTclと一緒に使うと非常に強力です。現在もメンテナンスされていて、今ではTcl 9もサポートしています
JavaScript、Tcl、NaviServerの組み合わせに、DNS Server、LDAP、Mailのような独自モジュールまで加えると強力な道具になります。TclとWeb開発に入門したいなら、両方を一緒に使ってみると面白いものを簡単に作れるのでおすすめです
[0] https://wiki.tcl-lang.org/page/NaviServer
https://github.com/naviserver-project/naviserver
[1] https://news.ycombinator.com/item?id=35648805
https://www.linuxjournal.com/article/6164
[2] https://openacs.org/about/history
https://openacs.org/
Pasadena, CAだったかGlendaleだったかにあったオフィスで、ArsDigitaが後援し、自ら教えていた無料授業も受けた記憶があります。ものすごく深かったり長かったりしたわけではありませんが、入門用としては良かったです
Tcl に初めて触れる人にとっては、JavaScript の代わりに Tcl がブラウザ言語になった別の宇宙もあり得た
「興味深い脚注: Netscape の創業は、私が 1994 年に Berkeley を離れ、業界でどこへ進むか決めようとしていた時期と重なっていた。Jim Clarke と Marc Andreessen は、私が Netscape の創業者として参加する可能性を探っていたが、私は結局断った。彼らと話していた当時は、まだ Web 関連の仕事をするとも決めていなかった。これは私のキャリアにおける最大の『もしも』の一つだ。私が Netscape に行っていたなら、Tcl が JavaScript の代わりにブラウザ言語になっていた可能性はかなりあり、世界は違っていただろう! ただ振り返ってみると、Tcl が実際に JavaScript より Web に適した言語だったかは確信がないので、もしかすると正しいことが起きたのかもしれない。」
出典: https://pldb.io/blog/JohnOusterhout.html
数人以上が使う言語は、どれほど良くても何らかの負債を抱える。だからその別宇宙では、ブラウザのスクリプト言語エコシステムがはるかに断片化していたかもしれない
望めば、コマンドを十分に取り除いて、言語をチューリング完全でなくすることもできる
https://sunsite.icm.edu.pl/pub/programming/tcl/plugin/
それより前に、同級生たちが計算機室に来て「見て、Mosaic 用の TK プラグインまである!」と言っていたのも覚えている。「マウス付きの gopher みたいだね!」という時代ではなかったが、それほど時間が経っていたわけでもなかった
ただし Tcl プラグインを使うには自分で何かをする必要があり、JavaScript はいったん入ってくると標準で提供された
おそらく TCL と何か別のものが共存し、その後 TCL は廃止予定になっていた可能性の方が高い
set x [ expr $y + $z ]のようなコードがあちこちにあるのは見たくなかった。コマンド言語としてはそこまで悪くないけれどTcl が本当に好きだと言っても大げさではない。1990 年代後半に XiRCON IRC スクリプトを書くときに少し使った程度だったが、人間のための Lisp と呼べるほど、単純で学びやすく柔軟な、優雅な言語だった
もっと人気があればよかったし、今も生きて動いているのを見るとうれしい
ただし当時のもう一つの主力言語が x86 アセンブリだったので、感心する基準が低かったのかもしれない
Tcl と Tk の作者は John Ousterhout 教授で、彼のソフトウェア設計の本は第 2 版まで出ている
A Philosophy of Software Design:
https://web.stanford.edu/~ouster/cgi-bin/book.php
今は 11 章「Design it Twice」まで来ているので、おそらく最後まで読んだら上から下まで全面的に書き直すことになりそうだ。現状は変数だけを最小限の Python コアに置き、残りは OpenSCAD にあるモデルだが、新しい実装では可能なものはすべて Python に置き、OpenPythonSCAD https://pythonscad.org/ 経由で使う予定だ
言語は本当に好きだが、最近はあまり使っていない。Linux でもまだ 1995 年式の GUIを作り出すのか気になる
他のプラットフォームではずっと前から可能だった程度の、そこそこ妥当な Linux GUI サポートさえあれば、今でも使っていたと思う
ただしコアテーマのスクリーンショットは 8.5/8.6 基準で、特にデフォルトテーマは Tk 9 で少し変わった。落とし穴は、テーマエンジンが独自の新しいウィジェットを使うため、アプリケーションがテーマ適用を受けるには新しい API を使う必要がある点だ。1995 年や 2005 年のコードなら、今でも 1995 年式の GUI が出てくる
ドキュメントがあまりにも長い間 Tk(inter) 中心だったので、多くの人がデフォルトのように選んでいるのだと思う。Python の GUI サポートは良くなったが、おそらく機械学習/AI での利用人気が影響しているのだろう。Tcl は人気が低いので、モダンな GUI の使い方のドキュメントを探すには、より入念に確認する必要がある
最近 Tcl に触ったのは MacPorts の portfile 作業くらいだけです
今どき別の用途で使っている人がいるなら、なぜ使っているのか気になります。言語を嫌いではありませんが、好きになることもありませんでした
熟練した Tcl プログラマーは魔法のようなことができます。2005年から2015年まで、ほぼ全面的に Tcl/Tk でプログラミングしていて、本当に気に入っていました。その後はアプリを書くより軽いスクリプトで主に使っていますが、OS レベルの自動化スクリプトを書く必要があるときは、今でも第一候補です
毎日使う理由は、Lisp 的な側面と単純なスクリプト言語らしさのバランスがよく、C インターフェースが優れているからです。REPL も悪くなく、C で拡張を書いて 100% 第一級の Tcl のように積み上げられます。これはかなりの部分、もしかすると完全に、Tcl が非常に単純な言語[4]であり、同図像性(homoiconicity)[5]を持っているためです。開発して使うのが楽しい言語です
[0] https://community.f5.com/kb/technicalarticles/irules-concept...
[1] https://www.mcs.anl.gov/~wozniak/papers/Swift_Tcl_2015.pdf
[2] https://www.acoustic.com/pdf/Acoustic-Experience-Analytics-%...
[3] https://docs.python.org/3/library/tkinter.html
[4] https://www.tcl-lang.org/man/tcl/TclCmd/Tcl.htm
[5] https://stackoverflow.com/questions/6492704/what-exactly-doe...
利点は、EDA ツールを
run_my_task -option_a -option_Bのようなシェルスクリプトのコマンドのように操作できることです。チップを設計しないなら使う理由はなく、言語自体はひどいものです。EDA 業界が TCL を早く捨てれば捨てるほどよいでしょうそして SQLite を今のように信頼できるエンジンにしているのは、そのテストスイートです。テストスイートは継続的に保守され、エンジンは全体または一部が書き直されてきました
オンライン販売アプリケーション向けのバックアップアプリ、大手小売チェーンのバグのある POS ファイルを修正するアプリ、Forms/Reports をサーバーにコピーしてコンパイルを実行し、新しいファイルを git に押し込む小さなアプリ、メディア部門が複数の PDF を1つにまとめやすくする
gsラッパーを作りました。どれもコードは1〜2ページ程度でしたPython 3.13 より重要です
Bravo !!!!
Scilab と Python が Tcl/Tk 9.0 を同梱して配布するのを待っています。Next Scripting の最新リリースは 9.0 対応の準備ができているようです。公式ページの Undroidwish と Binary Releases セクションは注目に値します