5 ms·
Critcl – C Runtime in Tcl
- forinti 1y agoI suppose you would use this to do low level stuff because it's much harder to do in TCL, but it just doesn't feel right. It makes more sense to me to embed Tk into a C program.
- ofalkaed 1y agoDepends on how much C you need, it might make more sense to write a proper Tcl extension and it might make sense to just embed Tcl/Tk but having this middle ground is nice because swinging to the fences is rarely the best course of action. 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.
- Joel_Mckay 1y agoTCL is popular for automated scripting, and is still quite popular with "expect" and "autoexpect" package users. The key feature is opening a remote scripted or interactive ssh session, and running setup/install commands admins would otherwise have to type in thousands of times a month (or worse, leave sensitive information/CSR on short lived host nodes.) Being able to compile ephemeral objects is actually pretty useful in some use-cases. =3
- kemyd 1y agoNot contributing much to the discussion, but thanks for explaining who still uses Tcl. It was my first programming language about 20 years ago (I used it to write scripts for Eggdrop - an IRC bot). Just stopped by the comments out of nostalgia.
- Joel_Mckay 1y agoThe language core is still actively used, but not in the way most people assume. 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
- johnisgood 1y agoNitpick: it is Tcl, not TCL, just like how Ada is not ADA.
- Joel_Mckay 1y agoFollowing the Wikipedia citation will point people here: https://wiki.tcl-lang.org/page/Tcl+vs%2E+TCL 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
- johnisgood 1y agoWhen I say it out loud, I say T-C-L, too, but I write it as Tcl. You have a nice day too! =3
- NelsonMinar 1y agoStill in active development, or at least maintenance. https://github.com/andreas-kupries/critcl/commits/master/ https://github.com/andreas-kupries/critcl/commits/master/
- ofalkaed 1y agoI don't think it needs much development at this point, it is stable, all it needs to do is keep up with Tcl/Tk development. I just started playing with it two days ago so I might be missing some of its flaws but so far it seems quite mature.
- bb01100100 1y agoI was doing some looping recently with tcl and comparing against another implementation (called Jim [1], a very cool project in its own right) and wondered why datetime formatting was so slow when using `clock format`. 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 https://github.com/msteveb/jimtcl [2] https://wiki.tcl-lang.org/page/speed+up+clock+format+and+clock+scan https://wiki.tcl-lang.org/page/speed+up+clock+format+and+clo...
- monetus 1y agoI've been using critcl for a long time, and maybe weirdly still end up using it despite often using nim. Fantastic software.
- ofalkaed 1y agoAny chance you can elaborate on your use case? Part of why I submitted this is because I am not completely sure on when it is wise to use, I can see situations where it is clearly useful but things get fuzzy rather quickly. 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.
- hoherd 1y agoNot to be confused with the kubernetes container runtime interface CLI https://github.com/kubernetes-sigs/cri-tools/blob/master/docs/crictl.md https://github.com/kubernetes-sigs/cri-tools/blob/master/doc...
- qalmakka 1y agoThis is insane and I love it. Just like Tcl. The fact everything is a string in Tcl makes embedding languages wonderfully simple.
- johnisgood 1y agoSomewhat related, it is something I have been trying to figure out, and I did, successfully! This information might help others. 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.
- johnisgood 1y agoCorrection: "The result is a self-contained executable that runs anywhere Tcl is supported" is inaccurate. You do not need Tcl to be supported, hence the binaries.