1 Punkte von GN⁺ 2024-09-27 | 1 Kommentare | Auf WhatsApp teilen
  • Tcl/Tk 9.0 ist das neueste große Release von Tcl und Tk und bringt neue Funktionen sowie einige Inkompatibilitäten gegenüber Tcl/Tk 8 mit sich
  • Die aktuelle Release-Bezeichnung ist Tcl/Tk 9.0.4, datiert auf den 26. Juni 2026
  • Tcl bietet 64-bit capacity für den Umgang mit Datenwerten über 2 GB; Strings können innerhalb des verfügbaren Speichers beliebige Länge haben, und Listen sowie Dictionaries können sehr viele Elemente enthalten
  • Die Textverarbeitung unterstützt den gesamten Bereich der Unicode-Codepoints, neue Encodings wie utf-16-, utf-32-, ucs-2-Familien und CESU-8, encoding profiles zur Steuerung von I/O-Encodings sowie standardmäßig -encoding utf-8 für source
  • Mit zipfs kann Tcl ZIP-Dateien wie ein Dateisystem mounten und unterstützt die Bereitstellung von Anwendungen im starkit-Stil mit Dateisystem-Archiven, die an ausführbare Dateien oder Bibliotheken angehängt sind
  • Die Unix-Engine zur Ereignisverarbeitung wird, wenn verfügbar, auf Basis von epoll oder kqueue aufgebaut; auf Plattformen ohne diese Systemaufrufe bleibt eine select-basierte Implementierung bestehen
  • Zu den wichtigsten Inkompatibilitäten in Tcl 9.0 zählen: Nicht qualifizierte Variablennamen werden nicht mehr global, sondern im aktuellen Namespace aufgelöst; die Standardreaktion auf I/O-Malencoding wurde auf Fehler (-profile strict) geändert; ~ in Pfaden wird nicht als Home-Verzeichnis interpretiert; $::tcl_precision wird nicht mehr zur Steuerung der String-Erzeugung von Doubles verwendet
  • Bei Build- und Plattformänderungen wurde die Build-Option --disable-threads entfernt, sodass Threads immer aktiviert sind; unter Windows wird mindestens Windows 7 oder Windows Server 2008 R2 benötigt
  • Für Tcl-C-Erweiterungen gilt: Binärdateien, die für Tcl 8.6 oder älter gebaut wurden, funktionieren nicht unter Tcl 9.0; ABI-Kompatibilität war für Tcl 9.0 kein Ziel, und in den meisten Fällen ist ein Rebuild für Tcl 9.0 möglich, sofern keine entfernten API-Funktionen verwendet werden
  • In der öffentlichen C-Schnittstelle wurden viele Argumente von int auf Tcl_Size erweitert; die Unterstützung für Tcl_ChannelTypeVersion kleiner 5 wurde beendet; Versionierung für die Tcl_ObjType-Struktur wurde eingeführt; CONST*-Makros und mehrere API-Funktionen wurden entfernt
  • Tk 9.0.0 unterstützt Tcl 8.6 nicht, und für die Nutzung von Tk 9.0.0 ist zunächst Tcl 9.0.0 erforderlich
  • Tk bietet tk sysnotify, tk print und tk systray für den Zugriff auf OS-Benachrichtigungen, Ausgabe- und Tray-Funktionen
  • Tk-Bilder bieten teilweise SVG-Unterstützung, Lese- und Schreibzugriff auf photo image metadata sowie Zugriff auf den Alpha-Kanal
  • Die eingebauten Widgets und Themes von Tk sind nun scaling-aware; die Unterstützung für Zwei-Finger-Gesten wurde, wo verfügbar, verbessert; und „aqua“ von tk windowingsystem erfordert macOS 10.10 oder neuer
  • Als Migrationsmaterial für Tcl 9 stehen Migrating C extensions to Tcl 9 und Migrating scripts to Tcl 9 zur Verfügung

1 Kommentare

 
GN⁺ 2024-09-27
Meinungen auf Hacker News
  • Es ist das erste Major-Release seit 27 Jahren. Da die interne Struktur 64-Bit ist, können Daten sehr groß werden, und es gibt viele neue Funktionen wie vollständiges Unicode einschließlich aktueller Emojis und ein Zip-Dateisystem.
    Ein Teil des alten Ballasts wurde ebenfalls entfernt, sodass einige Programme möglicherweise aktualisiert werden müssen, aber die Kompatibilität ist weiterhin recht hoch. Die oben genannte Seite verlinkt auf Release Notes, die die aufgenommenen und ausgeschlossenen Funktionen im Detail beschreiben.

    • Die Änderung am Zip-Dateisystem ist wirklich erfreulich. Früher nutzte die Community beim Erstellen eigenständiger Anwendungen verschiedene Techniken mit bestimmten Tools und Know-how; diese wurden nun gewissermaßen als standardisierter Satz grundlegender Werkzeuge aufgenommen – eine großartige Änderung.
    • Ich frage mich, warum die Tilde ~, die eine praktische Kurzschreibweise für das Home-Verzeichnis war, entfernt wurde.
  • Sprachpuristen und Objektorientierungs-Puristen im Stil der 1990er hassen Tcl wirklich, aber das Ökosystem hat eine besondere Designphilosophie.
    Alles ist entweder ein String oder ein Befehl, und die objektorientierten Erweiterungen wirken etwas aufgesetzt. Aber wenn man statt Tcl über Python wie bei tkinter einmal GUIs in reinem Tcl/Tk baut, die SQLite-Schnittstelle nutzt, kleine C-Erweiterungen schreibt oder Libraries wrappt, funktioniert vieles einfach gut.

    • In einem Tcl-Artikel von antirez [1] habe ich eine interessante Perspektive gesehen. Wenn ich mich richtig erinnere, verwendet Redis Tcl für Testskripte.
      Ich bin über einen Link in der Dokumentation von https://folk.computer darauf gestoßen; auch dieses Projekt nutzt Tcl als Skriptsprache. Für solche Zwecke gibt es vielleicht keinen besonderen Grund, Tcl nicht zu mögen.
      [1] http://antirez.com/articoli/tclmisunderstood.html
    • Dank Tcl wurde unser Startup möglich, und die dabei gewonnenen Erfahrungen und Erkenntnisse wurden zum Ausgangspunkt von OutSystems.
      Eine davon war, dass ich für einen vollständigen Webserver nie wieder eine dynamische Sprache ohne JIT-Compiler verwenden wollte. Die Sprache selbst ist hervorragend, aber wegen Performance-Problemen regelmäßig Tcl-Libraries in C neu zu schreiben, war nicht besonders schön.
    • Die Aussage „Alles ist ein String oder ein Befehl“ ist keine Übertreibung. Wirklich alles ist ein Befehl, sodass die Art, Kommentare zu schreiben, hier auf einem Niveau ist, bei dem man denkt: „Warum zur Hölle ist das so?“: https://wiki.tcl-lang.org/page/comment
      Vor einem Kommentar muss man den Befehl mit ; beenden, geschweifte Klammern dürfen nicht unausgewogen sein, man sollte also keinen fehlerhaften Code auskommentieren wollen, und Backslashes dürfen auch nicht in Kommentare. Allerdings wird auch das als Feature erklärt, weil man beim Ausführen von wish etwa Folgendes schreibt:
      #!/bin/sh
      # the next line restarts using wish \
      exec wish8.0 "$0" "$@"
      Der Backslash wird von der Shell ignoriert, aber von wish geparst.
    • Bei der Arbeit an TPC-Benchmarks für Citus habe ich viel mit Tcl zu tun gehabt.
      https://github.com/TPC-Council/HammerDB/blob/master/src/post...
      Als Shell-Skriptsprache ist Tcl recht brauchbar.
  • Dass die zentrale Event-Processing-Engine von Tcl, wenn verfügbar, auf epoll oder kqueue aufbaut und für andere Plattformen eine select-basierte Implementierung bleibt, ist eine enorme Änderung.
    Ein wichtiger Grund dafür, dass Tcls Nebenläufigkeit als veraltet und wenig performant galt, war die Abhängigkeit von select, obwohl epoll und kqueue seit mindestens zehn Jahren verfügbar waren. Tcl gehört zu meinen Lieblingssprachen, weil der Einstieg leicht ist und auch Metaprogrammierung einfach funktioniert.

    • Der Hauptgrund, warum Tcl als langsam gilt, ist, dass grundlegende Operationen ungefähr doppelt so langsam wie in CPython sind. CPython ist auch nicht gerade schnell: https://news.ycombinator.com/item?id=41637953
      Ein weiterer Grund ist, dass wir nicht genau wissen, wie man schnellen Tcl-Code schreibt, und in diesem Thread habe ich das unbeabsichtigt demonstriert.
  • Ich möchte NaviServer [0] empfehlen. Früher hieß er AOLServer [1], und er ist ein in der Praxis lange erprobter, kugelsicherer Webserver.
    Wenn etwas früher AOL betrieben hat, muss man dazu wohl nicht mehr viel sagen. OpenACS [2] ist ein wichtiges Projekt, existiert seit 1997 und ist besonders in Kombination mit Tcl sehr mächtig. Es wird noch gepflegt und unterstützt inzwischen auch Tcl 9.
    JavaScript, Tcl und NaviServer, dazu eigene Module wie DNS Server, LDAP und Mail, ergeben ein mächtiges Werkzeug. Wer in Tcl und Webentwicklung einsteigen möchte, dem empfehle ich, beides zusammen auszuprobieren; damit lassen sich leicht interessante Dinge bauen.
    [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/

    • Für mich ist das ein Nostalgie-Stack, mit dem ich Mitte der 1990er Tcl und SQL gelernt habe. Damals spielte ich nicht mit OpenACS, sondern mit dem ArsDigita Community System selbst, zu einer Zeit, als ArsDigita tatsächlich noch existierte.
      Ich erinnere mich auch daran, dass ich in ihrem Büro, ich glaube in Pasadena, CA, oder vielleicht Glendale, kostenlose Kurse besucht habe, die ArsDigita gesponsert und selbst unterrichtet hat. Sie waren nicht sehr tiefgehend oder lang, aber als Einstieg gut.
  • Für alle, die Tcl zum ersten Mal begegnen: Es gab auch ein alternatives Universum, in dem Tcl statt JavaScript zur Browser-Sprache wurde
    „Interessante Fußnote: Die Gründung von Netscape fiel in die Zeit, als ich 1994 Berkeley verließ und entschied, wohin ich in der Industrie gehen würde. Jim Clarke und Marc Andreessen loteten aus, ob ich als Netscape-Gründer dazustoßen würde, aber ich lehnte schließlich ab. Als ich mit ihnen sprach, hatte ich mich noch nicht einmal entschieden, etwas im Web-Bereich zu machen. Das ist eines der größten ‚Was wäre, wenn‘ in meiner Karriere. Wenn ich zu Netscape gegangen wäre, wäre Tcl ziemlich wahrscheinlich statt JavaScript zur Browser-Sprache geworden, und die Welt wäre anders gewesen! Rückblickend bin ich mir allerdings nicht sicher, ob Tcl tatsächlich eine bessere Sprache fürs Web gewesen wäre als JavaScript; vielleicht ist also doch das Richtige passiert.“
    Quelle: https://pldb.io/blog/JohnOusterhout.html

    • Das kann gut sein. Einer der Hauptgründe, warum sich JavaScript durchgesetzt hat, war meiner Meinung nach, dass es keinen großen historischen Ballast hatte und die Designer es in die Richtung bringen konnten, die nötig war
      Jede Sprache, die mehr als ein paar Leute verwenden, sammelt irgendeine Art Ballast an, egal wie gut sie ist. In diesem alternativen Universum hätte das Ökosystem der Browser-Skriptsprachen also deutlich stärker fragmentiert sein können
    • Die Arbeit an einer sicheren Tcl-Teilmenge fürs Web könnte auch heute noch genutzt werden, um nicht vertrauenswürdige Skripte in einer leicht zu verwaltenden Sandbox auszuführen
      Wenn man will, kann man genug Befehle entfernen, sodass die Sprache nicht mehr Turing-vollständig ist
    • Interessanterweise gab es ein Tcl-Browser-Plugin mindestens seit 1996
      https://sunsite.icm.edu.pl/pub/programming/tcl/plugin/
      Ich erinnere mich auch, dass Kommilitonen davor in den Rechnerraum kamen und sagten: „Schau, jetzt gibt es sogar ein TK-Plugin für Mosaic!“ Das war nicht mehr ganz die Zeit von „Sieht aus wie Gopher mit Maus!“, aber auch noch nicht lange danach
      Allerdings musste man beim Tcl-Plugin etwas selbst tun, um es zu verwenden, während JavaScript, nachdem es einmal da war, standardmäßig mitgeliefert wurde
    • Selbst wenn das passiert wäre, glaube ich nicht, dass die Welt dauerhaft bei TCL geblieben wäre. JavaScript war gerade gut genug, dass die Leute es in Kauf nahmen, TCL dagegen eindeutig nicht
      Wahrscheinlicher wäre, dass TCL eine Zeit lang neben etwas anderem existiert hätte und dann als deprecated gegolten hätte
    • Der Aussage „vielleicht ist also doch das Richtige passiert“ stimme ich voll und ganz zu
      Ich hätte nicht überall Code wie set x [ expr $y + $z ] sehen wollen. Als Befehlssprache ist es zwar nicht so schlecht
  • Es ist keine Übertreibung zu sagen, dass ich Tcl wirklich mag. Ich habe es zwar nur kurz Ende der 1990er beim Schreiben von XiRCON-IRC-Skripten benutzt, aber es war eine elegante Sprache: einfach, leicht zu lernen und flexibel genug, um sie Lisp für Menschen zu nennen
    Ich wünschte, sie wäre populärer gewesen, und freue mich, dass sie immer noch lebt und aktiv ist

    • Mein Kontakt mit Tcl beschränkte sich darauf, IRC-Bot-Skripte zu schreiben, aber an diese Erfahrung habe ich ausschließlich gute Erinnerungen
    • Ich habe in den 90ern TCL-Skripte für IRC-Clients geschrieben, und es war wirklich großartig. Für diesen Zweck war die Sprache hervorragend
      Allerdings war meine andere Hauptsprache damals x86-Assembly, daher lag die Messlatte für Begeisterung vielleicht niedrig
    • Für „Lisp für Menschen“ gibt es da aber upvar
  • Der Autor von Tcl und Tk ist Professor John Ousterhout, und sein Buch über Softwaredesign ist inzwischen in der 2. Auflage erschienen
    A Philosophy of Software Design:
    https://web.stanford.edu/~ouster/cgi-bin/book.php

    • Dieses Buch ist ein wirklich hervorragendes Buch, und ich lese es gerade. Ich lese jeweils ein Kapitel, denke möglichst gründlich darüber nach und schreibe dann mein aktuelles Projekt um, um die Lektionen anzuwenden
      Ich bin jetzt bei Kapitel 11, „Design it Twice“, also werde ich es nach dem Durchlesen vermutlich von oben bis unten komplett neu schreiben. Aktuell ist es ein Modell, bei dem nur die Variablen in einem minimalen Python-Kern liegen und der Rest in OpenSCAD ist; in der neuen Implementierung will ich alles, was möglich ist, in Python unterbringen und über OpenPythonSCAD https://pythonscad.org/ verwenden
  • Die Sprache mag ich wirklich, aber heutzutage nutze ich sie kaum noch. Ich frage mich, ob sie unter Linux immer noch GUIs im Stil von 1995 erzeugt
    Wenn es nur halbwegs vernünftige Linux-GUI-Unterstützung auf dem Niveau gegeben hätte, das auf anderen Plattformen schon lange möglich war, würde ich sie wahrscheinlich heute noch verwenden

    • Die Theme-Engine ist schon vor etwa 15 Jahren hinzugekommen. Das Standard-Theme sieht ziemlich altbacken aus, aber es gibt viele andere Themes: https://wiki.tcl-lang.org/page/List+of+ttk+Themes
      Die Screenshots der Kern-Themes beziehen sich allerdings auf 8.5/8.6, und besonders das Standard-Theme hat sich in Tk 9 etwas geändert. Der Haken ist, dass die Theme-Engine eigene neue Widgets verwendet; damit eine Anwendung ein Theme bekommt, muss sie also die neue API nutzen. Code von 1995 oder 2005 ergibt weiterhin eine GUI im Stil von 1995
    • Ich erinnere mich daran, beim Python-Lernen Tkinter benutzt zu haben. Es gibt zwar andere GUIs, aber Beispiele zu finden, die mit einer modernen GUI funktionieren, ist umständlicher
      Die Dokumentation war viel zu lange auf Tk(inter) zentriert, sodass die meisten es wohl wie den Standard wählen. Die GUI-Unterstützung in Python ist besser geworden, aber wahrscheinlich hat die Beliebtheit durch Machine Learning/AI dabei eine Rolle gespielt. Tcl ist weniger populär, daher muss man genauer suchen, um Dokumentation zur Nutzung moderner GUIs zu finden
  • In letzter Zeit hatte ich mit Tcl nur bei Arbeiten an MacPorts-Portfiles zu tun.
    Falls es heutzutage jemand für andere Zwecke nutzt, würde mich interessieren, warum. Ich mag die Sprache nicht nicht, aber sie ist mir auch nicht ans Herz gewachsen.

    • Ich denke, Tcl ist eher ein Lisp für C-Programmierer. Es bietet die Metaprogramming-Fähigkeiten, die man von Lisp kennt, in einer Sprache, die wie C aussieht, gut mit C harmoniert, deutlich intuitiver ist als eine typische Shell-Sprache und sogar eine plattformübergreifende GUI hat.
      Erfahrene Tcl-Programmierer können damit zaubern. Von 2005 bis 2015 habe ich fast ausschließlich in Tcl/Tk programmiert und es wirklich gemocht. Seitdem nutze ich es eher für kleine Skripte als zum Schreiben von Apps, aber wenn ich Automatisierungsskripte auf Betriebssystemebene schreiben muss, ist es immer noch meine erste Wahl.
    • Typische Einsatzgebiete sind BigIP iRules[0] auf F5-Netzwerkgeräten und A10-Geräten, Orchestrierung auf den Supercomputern der Argonne National Labs[1], Tealeaf[2], Python Tkinter[3] usw.
      Ich nutze es täglich, weil es eine gute Balance zwischen Lisp-artigen Eigenschaften und der Schlichtheit einer Skriptsprache bietet und weil das C-Interface hervorragend ist. Die REPL ist ebenfalls ordentlich, und man kann Erweiterungen in C schreiben und sie zu 100 % wie erstklassiges Tcl darauf aufbauen. Das liegt zu einem großen Teil, vielleicht sogar vollständig, daran, dass Tcl eine sehr einfache Sprache[4] ist und Homoikonizität[5] besitzt. Es macht Spaß, damit zu entwickeln und es zu verwenden.
      [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 ist die Skriptsprache der EDA-Branche. Wenn man Computerchips entwirft, benutzt man TCL. Cadence und Synopsys setzen seit über 30 Jahren auf TCL als Standard.
      Der Vorteil ist, dass man EDA-Tools wie Shell-Skript-Befehle der Form run_my_task -option_a -option_B steuern kann. Wenn man keine Chips entwirft, gibt es keinen Grund, es zu verwenden, und die Sprache selbst ist schrecklich. Je schneller die EDA-Branche TCL aufgibt, desto besser.
    • Richard Hipp, der Erfinder von SQLite, sagt, SQLite sei in Tcl geschrieben. Die Datenbank-Engine selbst ist natürlich in C geschrieben, aber die deutlich größere Testsuite ist größtenteils in Tcl geschrieben.
      Und diese Testsuite macht SQLite zu der verlässlichen Engine, die es heute ist. Die Testsuite wurde kontinuierlich gepflegt, während die Engine ganz oder teilweise neu geschrieben wurde.
    • Wegen Freewrap habe ich ein paar Mal Tcl verwendet. Mit sehr wenig Code konnte man Windows-Apps mit GUI erstellen und sie leicht als ausführbare Dateien ausliefern.
      Ich habe eine Backup-App für eine Online-Verkaufsanwendung gebaut, eine App zum Reparieren fehlerhafter POS-Dateien einer großen Handelskette, eine kleine App, die Forms/Reports auf einen Server kopiert, die Kompilierung ausführt und die neuen Dateien in git schiebt, sowie einen gs-Wrapper, mit dem die Medienabteilung mehrere PDFs leichter zu einer Datei zusammenführen konnte. Alle bestanden jeweils nur aus etwa ein bis zwei Seiten Code.
  • Wichtiger als Python 3.13.
    Bravo !!!!
    Ich warte darauf, dass Scilab und Python mit Tcl/Tk 9.0 ausgeliefert werden. Das aktuelle Release von Next Scripting scheint für 9.0 bereit zu sein. Es lohnt sich, die Abschnitte Undroidwish und Binary Releases auf der offiziellen Seite im Auge zu behalten.