1 ポイント 投稿者 GN⁺ 2024-09-27 | 1件のコメント | WhatsAppで共有
  • Tcl/Tk 9.0 は Tcl と Tk の最新メジャーリリースで、新機能と Tcl/Tk 8 と比べた一部の非互換性をあわせて提供する
  • 最新リリース表記は Tcl/Tk 9.0.4 で、日付は 2026年6月26日
  • Tcl は 2GB を超えるデータ値を扱う 64-bit capacity を提供し、文字列は利用可能なメモリ範囲内で任意の長さを持つことができ、リストと辞書は非常に多くの要素を持てる
  • テキスト処理は Unicode コードポイント全範囲、utf-16utf-32ucs-2 系列と CESU-8 などの新しいエンコーディング、I/O エンコーディングを制御する encoding profilessource のデフォルト -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_ChannelTypeVersion 5 未満のサポート終了、Tcl_ObjType 構造体のバージョン管理導入、CONST* マクロと複数の API 関数の削除が適用された
  • Tk 9.0.0 は Tcl 8.6 をサポートせず、Tk 9.0.0 を使うには先に Tcl 9.0.0 が必要
  • Tk は OS の通知・出力・トレイ機能にアクセスするための tk sysnotifytk printtk systray を提供する
  • Tk イメージは部分的な SVG サポート、photo image metadata の読み書き、alpha channel へのアクセスを提供する
  • Tk の内蔵ウィジェットとテーマは scaling-aware に変わり、利用可能な環境では二本指ジェスチャーのサポートが改善され、tk windowingsystem の “aqua” は macOS 10.10 以降が必要
  • Tcl 9 移行資料として Migrating C extensions to Tcl 9Migrating scripts to Tcl 9 が提供されている

1件のコメント

 
GN⁺ 2024-09-27
Hacker News の意見
  • 27年ぶりの初のメジャーリリースです。内部構造が64ビットなのでデータを非常に大きくでき、最新の絵文字を含む完全なUnicode、Zipファイルシステムなど新機能も多数あります
    古い残骸も一部削除されたため、いくつかのプログラムは更新が必要になるかもしれませんが、それでも互換性は高いほうです。上記ページから、含まれた機能/除外された機能を詳しく記したリリースノートにリンクされています

    • Zipファイルシステムの変更は本当にうれしいです。以前はスタンドアロンアプリケーションを作る際に、コミュニティが特定のツールやノウハウで使っていた複数の手法を、標準方式の基本ツール群に取り込んでくれたようなもので、素晴らしい変更です
    • Homeディレクトリへ行く便利な短縮表記だった**チルダ ~**を、なぜ削除したのか気になります
  • 言語純粋主義者や1990年代式のオブジェクト指向純粋主義者はTclを本当に嫌いますが、このエコシステムには独特の設計哲学があります
    すべてが文字列またはコマンドで、オブジェクト指向拡張はやや後付け感がありますが、tkinterのようにPythonからTclを使うのではなく純粋なTcl/TkでGUIを作ってみたり、SQLiteインターフェースを使ってみたり、小さなC拡張を書いたりライブラリをラップしてみたりすると、多くの部分がただうまく動きます

    • antirezが書いたTclの記事 [1] で興味深い視点を見ました。記憶が正しければ、RedisはテストスクリプトにTclを使っています
      https://folk.computer のドキュメントからリンクをたどって読んだのですが、このプロジェクトもTclをスクリプト言語として使っています。そういう用途なら、Tclを特に嫌う理由はないのかもしれません
      [1] http://antirez.com/articoli/tclmisunderstood.html
    • Tclのおかげで私たちのスタートアップが可能になり、そのとき得た経験と学びがOutSystemsの出発点になりました
      その一つは、完全なWebサーバーには二度とJITコンパイラのない動的言語を使いたくない、ということでした。言語自体は素晴らしいのですが、性能問題のためにTclライブラリを定期的にCで書き直すのはあまり良いものではありませんでした
    • 「すべてが文字列またはコマンド」という言い方は誇張ではありません。本当にすべてがコマンドなので、ここにあるコメントの書き方は「いったいなぜこうなるのか」と思うレベルです: https://wiki.tcl-lang.org/page/comment
      コメントを書く前に;でコマンドを終わらせる必要があり、中かっこの対応が崩れていてはいけないので、壊れたコードをコメントアウトしようとしてはいけませんし、コメント内にバックスラッシュも入れられません。ただし、これも機能だと説明されていて、wishを実行するときに次のように書くためです
      #!/bin/sh
      # the next line restarts using wish \
      exec wish8.0 "$0" "$@"
      バックスラッシュはシェルでは無視されますが、wishではパースされます
    • CitusのTPCベンチマーク作業でTclをかなり扱いました
      https://github.com/TPC-Council/HammerDB/blob/master/src/post...
      Tclはシェルスクリプト言語としては悪くないほうです
  • Tclの中央イベント処理エンジンが、利用可能な場合はepollまたはkqueueの上に構築され、そうでないプラットフォームにはselectベースの実装が残るという点は、ものすごい変化です
    Tclの並行性が古くて性能が低いと見なされていた大きな理由は、epollkqueueが少なくとも10年は利用可能だったにもかかわらず、selectに依存していたからです。Tclは始めやすく、メタプログラミングも簡単なので、好きな言語の一つです

    • Tclが性能が低いと見なされる主な理由は、基本演算がCPythonよりおよそ2倍遅いためです。CPythonも速いほうではありません: https://news.ycombinator.com/item?id=41637953
      もう一つの理由は、私たちが速い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/

    • 1990年代半ばにTclとSQLを学んだ懐かしのスタックです。当時はOpenACSではなくArsDigita Community Systemそのものをいじっていて、ArsDigitaが実在していた時代でした
      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

    • あり得る。JavaScript が定着した主な理由の一つは、大きな 歴史的負債がなく、設計者が必要な方向へ持っていけたからだと思う
      数人以上が使う言語は、どれほど良くても何らかの負債を抱える。だからその別宇宙では、ブラウザのスクリプト言語エコシステムがはるかに断片化していたかもしれない
    • Web 向け Tcl の安全なサブセットに関する取り組みは、今でも信頼できないスクリプトを管理しやすい サンドボックスで実行するのに活用できる
      望めば、コマンドを十分に取り除いて、言語をチューリング完全でなくすることもできる
    • 面白いことに、Tcl のブラウザプラグインは少なくとも 1996 年から存在していた
      https://sunsite.icm.edu.pl/pub/programming/tcl/plugin/
      それより前に、同級生たちが計算機室に来て「見て、Mosaic 用の TK プラグインまである!」と言っていたのも覚えている。「マウス付きの gopher みたいだね!」という時代ではなかったが、それほど時間が経っていたわけでもなかった
      ただし Tcl プラグインを使うには自分で何かをする必要があり、JavaScript はいったん入ってくると標準で提供された
    • そんなことがあったとしても、世界が TCL に留まり続けたとは思えない。JavaScript は人々が我慢できる程度には十分に良かったが、TCL は明らかにそうではない
      おそらく TCL と何か別のものが共存し、その後 TCL は廃止予定になっていた可能性の方が高い
    • 「もしかすると正しいことが起きたのかもしれない」という言葉には全面的に同意する
      set x [ expr $y + $z ] のようなコードがあちこちにあるのは見たくなかった。コマンド言語としてはそこまで悪くないけれど
  • Tcl が本当に好きだと言っても大げさではない。1990 年代後半に XiRCON IRC スクリプトを書くときに少し使った程度だったが、人間のための Lisp と呼べるほど、単純で学びやすく柔軟な、優雅な言語だった
    もっと人気があればよかったし、今も生きて動いているのを見るとうれしい

    • Tcl に触れたのは IRC ボットのスクリプトを書いた程度だけれど、その経験には良い記憶しかない
    • 90 年代に IRC クライアント用の TCL スクリプトを書いていて、本当に良かった。その用途にはこの言語は素晴らしかった
      ただし当時のもう一つの主力言語が x86 アセンブリだったので、感心する基準が低かったのかもしれない
    • 「人間のための Lisp」と言うには upvar がある
  • 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 サポートさえあれば、今でも使っていたと思う

    • テーマエンジンはすでに 15 年ほど前に入っている。デフォルトテーマはかなり古く見えるが、他のテーマも多い: https://wiki.tcl-lang.org/page/List+of+ttk+Themes
      ただしコアテーマのスクリーンショットは 8.5/8.6 基準で、特にデフォルトテーマは Tk 9 で少し変わった。落とし穴は、テーマエンジンが独自の新しいウィジェットを使うため、アプリケーションがテーマ適用を受けるには新しい API を使う必要がある点だ。1995 年や 2005 年のコードなら、今でも 1995 年式の GUI が出てくる
    • Python を学んでいたときに Tkinter を使っていた記憶がある。他の GUI もあるが、モダンな GUI として動作する例を見つけるのはもっと面倒だ
      ドキュメントがあまりにも長い間 Tk(inter) 中心だったので、多くの人がデフォルトのように選んでいるのだと思う。Python の GUI サポートは良くなったが、おそらく機械学習/AI での利用人気が影響しているのだろう。Tcl は人気が低いので、モダンな GUI の使い方のドキュメントを探すには、より入念に確認する必要がある
  • 最近 Tcl に触ったのは MacPorts の portfile 作業くらいだけです
    今どき別の用途で使っている人がいるなら、なぜ使っているのか気になります。言語を嫌いではありませんが、好きになることもありませんでした

    • Tcl は C プログラマーのための Lispに近いと思います。Lisp から得られるメタプログラミング能力を、C のように見え、C と相性がよく、一般的なシェル言語よりはるかに直感的で、クロスプラットフォーム GUI まで備えた言語として提供しています
      熟練した Tcl プログラマーは魔法のようなことができます。2005年から2015年まで、ほぼ全面的に Tcl/Tk でプログラミングしていて、本当に気に入っていました。その後はアプリを書くより軽いスクリプトで主に使っていますが、OS レベルの自動化スクリプトを書く必要があるときは、今でも第一候補です
    • 標準的な用途としては、F5 のネットワーク機器と A10 機器における BigIP iRules[0]、Argonne National Labs のスーパーコンピューターのオーケストレーション[1]、Tealeaf[2]、Python Tkinter[3] などがあります
      毎日使う理由は、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...
    • Tcl は EDA 業界のスクリプト言語です。コンピューターチップを設計しているなら、TCL を使っているということです。Cadence と Synopsys は30年以上にわたって TCL を標準としてきました
      利点は、EDA ツールを run_my_task -option_a -option_B のようなシェルスクリプトのコマンドのように操作できることです。チップを設計しないなら使う理由はなく、言語自体はひどいものです。EDA 業界が TCL を早く捨てれば捨てるほどよいでしょう
    • SQLite の作者 Richard Hipp は、SQLite は Tcl で書かれていると言っています。データベースエンジン自体はもちろん C で書かれていますが、はるかに大きな テストスイートの大半は Tcl で書かれています
      そして SQLite を今のように信頼できるエンジンにしているのは、そのテストスイートです。テストスイートは継続的に保守され、エンジンは全体または一部が書き直されてきました
    • Freewrap のために何度か Tcl を使いました。ごく少ないコードで GUI 付きの Windows アプリを作り、実行ファイルとして簡単に配布できました
      オンライン販売アプリケーション向けのバックアップアプリ、大手小売チェーンのバグのある 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 セクションは注目に値します