The code at [2] provided an alternative approach using C via critcl. It was interesting to see how malleable tcl can be.
[1] https://github.com/msteveb/jimtcl [2] https://wiki.tcl-lang.org/page/speed+up+clock+format+and+clo...
Are you the monetus who used to post on the pd forums? If so, thanks, I have found some of my answers in threads which you contributed too and probably provided the solution too.
You can create a standalone binary from .tcl files by using KitCreator and sdx (Starkit Developer eXtension). You need to wrap your Tcl script into a .kit file (a virtual filesystem), then combine it with a Tcl runtime to produce a native ELF (or Windows) binary. Optionally, you can encrypt your Tcl code with AES (e.g., using openssl enc) before embedding it, and decrypt it at runtime via a custom loader. The result is a self-contained executable that runs anywhere Tcl is supported. :)
I have a script for it!
Standalone encrypted application created:
-> /tmp/tcl/app.run
-> AES KEY (hex): 95a8a95e8322344b808ebd3fd3986b5b
-> AES IV (hex): 69eac67341d2657a0b00d3006addb131
-> To run it: ./app.run
$ ./app.run
Hello world from binary!
$ file app.run
app.run: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=f3fabb748cc7e61c2fafc7c288f282db2f6de0c7, for GNU/Linux 3.2.0, stripped
The generated app.run is 10 MB and ldd shows it only needs "linux-vdso", "libm", "libc", and "ld-linux-*".Useful links (taken from my script):
TCL_VERSION="9.0.1"
TCL_SRC_URL="https://sourceforge.net/projects/tcl/files/Tcl/${TCL_VERSION}/tcl${TCL_VERSION}-src.tar.gz"
SDX_KIT_URL="https://chiselapp.com/user/aspect/repository/sdx/uv/sdx-20110317.kit"
TCLLIB_URL="https://github.com/tcltk/tcllib/archive/refs/heads/main.zip"
I wonder if there is a more recent sdx, although it still works.FWIW, the steps are:
1. Download and build Tcl
2. Clone KitCreator and build Tclkit
3. Download SDX
4. Create the loader ($VFS_DIR/main.tcl)
5. Download and extract Tcllib (optional)
6. Copy any modules you want from Tcllib (optional)
7. Add dummy assets to $VFS_DIR/assets/data.json (has a specific format) (probably optional)
8. Wrap and generate .kit and final .run ELF (you need 2 Tclkit binaries, just duplicate it)
If you have any questions, let me know!---
I have used critcl before, but can't find my code anymore. :( It is good stuff though.
It makes more sense to me to embed Tk into a C program.
Critcl looks to be quite nice in those situations when Tcl/Tk is almost but not quite, you get the speed and ease of Tcl/Tk but a little more as well. The big gotcha looks to be having the foresight of identifying when writing a proper Tcl/Tk extension or switching language is the better plan, but this is almost always the big gotcha.
Being able to compile ephemeral objects is actually pretty useful in some use-cases. =3
Expanding TCL C support proves it is not deprecated as some suggested (most Java VM also run a dual stack with C/C++ native binary object support.)
Automated remote host administration with TCL is one area where it still works extremely well... I guess it is not relevant if people like pseudo-repetitive typing... so much typing people actually know all the parameters to tar without the manual. lol
Have a great day =3
https://wiki.tcl-lang.org/page/Tcl+vs%2E+TCL
Which gets into the syntactical preference people developed over time.
The Tool Command Language acronym allusion is rather distinct from a popular "Tcl" colloquialism for the "tickle" project. From my perspective Tcl is a TCL, but not all TCLs are necessarily Tcl nor include a specific extension package.
Have a glorious day friend =3
You have a nice day too! =3