Join the discussion

Write your take first — we'll ask for email only when you're ready to publish.

  • Hacker News
  • Who else here read Philip and Alex's Guide to Web Publishing, used AOLserver, or attended an ArsDigita workshop or ADuni?

    Chapter 10: Sites That Are Really Programs

    https://philip.greenspun.com/panda/server-programming

  • Tcl for Web Nerds

    by Hal Abelson, Philip Greenspun, and Lydia Sandon

    https://philip.greenspun.com/tcl/

    If in reading this introduction, you've come to realize that "Hey, Tcl is just like Lisp, but without a brain, and with syntax on steroids", you might wonder why Lisp isn't a more popular scripting language than Tcl. Lisp hasn't been a complete failure, by the way; it is used as an extension language by users of some popular programs, notably AutoCAD. But Tcl has been much more successful. It has been compiled into hundreds of larger programs, including AOLserver, which is why we wrote this book.

    As a software developer, you're unlikely to get rich. So you might as well try to get through your life in such a way that you make a difference to the world. Tcl illustrates one way:

        make something that is simple enough for almost everyone to understand
        give away your source code
        explain how to weave your source code in with other systems
    
    ...
  • I was an early adopter of the TiVo. You can hook up a terminal to those things. A dumb terminal or terminal software on your computer using your own serial port. There was a terminal/serial port in the back (baud 2600)that took the form of a 3/4" audio plug.

    It was a Linux system, but all their own software running on it was written in TCL.

    I don't think they were using TK though.

    Pretty fun to hack around with. Since it was connected to the phone line, when a call came in it could get the caller ID off the line and display it on the TV screen.

  • On Linux there is also this windowing shell `wish` which I've used for some very quick (and very very dirty) UIs
  • This is for example use by the builtin Git GUI.
  • Do you have more information? It looks interesting
  • I haven’t used myself but in Linux there is also zenity

    https://linux.die.net/man/1/zenity

    I have seen scripts that use it for a quick GUI.

    I really dislike using Powershell as a shell, but it looks like on Windows specifically it also has some gui thing that is somewhat similar to a .NET like zenity.

    by a1o
  • the problem with Tcl/Tk is Tcl. the author does write about the quirks and problems, so this is a good article, but the end of it is that Tcl is simply not a language that i am interested in mastering. just like shell scripting. i'll use it if i have to, but it is not my preference.

    and as the article also mentions what makes the apps cross platform is the native or near-native GUI. and apparently Tk is good for that.

    but i'd rather use a nicer language with it. again, the article does talk about python, and points out that the Tk bindings in python are simply not good enough. that was very insightful, and i am glad to know.

    however i would like to know if any other languages do better here. what about go for example? has anyone tried Tk with other languages and can share some experience?

  • I wonder whether Delphi/Lazarus would be better suited for a native GUI on each platform. But you’d have to compile your app for each separately.
  • Fun fact: macOS hex editor "Hex Fiend" uses Tcl for its templating language:

    https://github.com/HexFiend/HexFiend/tree/master/templates

  • The industry standard VFX compositing tool Nuke also uses Tcl for its expressions and save format, it's all Tcl terms as I recall. My brother did VFX for a while and I was amused when he was having some trouble with an expression and I was like "it's a Tcl system... I know this" and helped him.
  • Some of these UIs look simpler and better / more user friendly to me than the latest offerings from Apple and Microsoft. Especially this: https://cgicoffee.com/blog/content/images/2026/tcl-tk-articl... Looks like OpenBox?
  • I take issue with the only 100 MB footprint, that is still pretty big when consider fasm, tcc and rebol are all closer to 1 meg.
  • Yeah, 100mb is not a bragging point. That's the size of a full web browser engine
  • 1MB memory usage for a GUI app with a bunch of packages installed?

    If you are talking about the size of the TCL/Tk static binaries they are a few MB to judge by the zipkit downloads linked to.

  • Tkinter or other Tk based GUI interfaces are the immediate tool I reach for whenever I build something that's not in the CLI or in the browser.

    My general "daily driver" is python and I love that I can just spin up a cross-platform tool immediately with it. Tcl/Tk rule and are insanely useful.

  • how is your experience with the problems with Tk and python as described in the article?
  • Besides Tk and the ease of creating GUIs, Tcl has some unique advantages. As I have written before, a favorite of mine, which I have not found in other languages (besides LISP, obviously) is the ability to treat data as code combined with the existence of safe slave interpreters.

    This is extremely useful for configuration files: they can use some functions you have defined, but may also include arbitrary code. In order to load them, you simply fire up a safe slave interpreter to execute the code and you're done!

    Imagine a config file like:

        host machine.example.org
        port 9000
        dbhost server.example.org
    
    This can obviously be manually parsed easily, but this is also valid Tcl code, if one has defined the functions "host", "port", and "dbhost". And this allows people to extend the config file to something like:

        set mydomain example.org
        set type prod
        host machine.$mydomain
        dbhost server.$mydomain
        if {$type == prod} {
            port 9000
        } else {
            port 9999
        }
    
    Having a "full-blown programming language" for free in config files is sometimes desirable.

    I'm writing much more Python than Tcl these days, but this is a feature I sorely miss. I keep looking for similar functionality in Python, but I am always disappointed. Starlark has been proposed in the past, but unfortunately it means you have to work with something different than Python (in developing, in deploying, etc.), doubling your dependencies.

    by zvr
  • A fun one: PostgreSQL uses an adopted version of Tcl's regular expression engine, written by Henry Spencer. Tom Lane seems to think it was an impressive piece of work, and patched it up from time to time.

    https://en.wikipedia.org/wiki/Henry_Spencer https://en.wikipedia.org/wiki/Tom_Lane_%28computer_scientist...

    by fdr
  • > Those GUI apps look native on Windows, Linux and macOS

    I don’t see how the author can write this with a straight face.

    The apps look like what native apps looked like in 2003.

  • Does it look nicer on Windows than on Linux?
  • That's just how native programs look on the platform.
  • Pretty sure tcl apps look ugly as sin... Python's tkinter is all tcl underneath.
  • In 2003, Tk looked more like 1993.
  • They were never that good, I get annoyed every day I touch some annoying behavior in gitk/git gui.

    The look is mostly acceptable though.

  • Coincidentally the last time native apps were good.
  • > The apps look like what native apps looked like in 2003

    you make that sound more like a bug than the feature it truly is

  • I use Tk routinely in Scheme; there is no Tcl in my code, but Tk is a very nice (though basic) GUI kit, and my programs work on Linux, BSD, MacOS, and Windows. Other commenters have mentioned that Python ships with Tkinter, a library module that interfaces to Tk. I believe Ruby does the same. Hell, if you're programming in Cobol, you can have Tk (as long as your Cobol allows you to call C). You do not have to love Tcl to love Tcl/Tk.
  • This is a fun idea! Are you using Guile-tk?
  • > interfaces to Tk

    It interfaces to its own internal Tcl interpreter that runs Tk. You can even feed it arbitrary non-Tk commands to eval.

    This is a legacy of the trouble Perl/Tk had splitting it out as an independent library which the Tcl devs didn't want to support.