4 ms·
While I like Tcl, which I have used to write substantial portions of a shipping product, the author does make a good point about the difficulty of creating a la
by jasomill 6y ago
While I like Tcl, which I have used to write substantial portions of a shipping product, the author does make a good point about the difficulty of creating a language that is simultaneously a good programming language and a good scripting language: I love IPython dearly, but I've never seriously considered using it as a bash replacement (nor bash as a substitute for anything but the simplest Python scripts).
As an aside, I have to praise one particular, easily overlooked aspect of Tcl: its comm facility is, from a (non-Tcl) client implementation perspective, the easiest "foreign function interface"[1] I've ever worked with by far, due almost entirely to the simplicity and consistency of Tcl syntax.
[1] Technically, comm was designed as a remote execution facility, but it works just as well locally to run Tcl code from within a non-Tcl program without the hassle of embedding an interpreter.
- kevin_thibedeau 6y agoTcl is an aw some configuration language. Delete all the commands to make it non-Turing complete. Throw in infix assignment for ergonomics and you have a minimal configuration language that can be enhanced by adding back more commands as needed.
- unixhero 6y agoI think I get this. Would you have any code examples laying around?
- sirn 6y agoMacPorts' Portfile[1], maybe? Portfile is being evaluated entirely within interp[2] with only few functions exposed inside the environment [1]: https://github.com/macports/macports-ports/blob/master/lang/lua/Portfile https://github.com/macports/macports-ports/blob/master/lang/... [2]: https://www.tcl.tk/man/tcl8.4/TclCmd/interp.htm https://www.tcl.tk/man/tcl8.4/TclCmd/interp.htm
- unixhero 6y agoVery decent, that file from the Macports repo looks very clean and sane. Thank you.
- gglitch 6y agoPossibly related: https://trs.jpl.nasa.gov/bitstream/handle/2014/7660/03-1728.pdf https://trs.jpl.nasa.gov/bitstream/handle/2014/7660/03-1728....
- hobby-coder-guy 6y agoAw some?
- gurjeet 6y ago> difficulty of creating a language that is simultaneously a good programming language and a good scripting language I bridged that gap recently with GoLang. Below [1] is an example of how I now use GoLang instead of Bash for my scripting needs. The development cycle is essentially just 2 steps, like scripting, 1) Edit file(s) 2) Run the script (./my.go). This gives the same feeling of writing scripts, but with all the guarantees of GoLang and benefits of an IDE (VSCode). The trick is to have the first line of the file be a script (for the process loader to execute) as well as a comment (so that GoLang infrastructure ignores that line. [1]: https://gist.github.com/gurjeet/3121b2e373e61873c5a6e96d72b6c1c6 https://gist.github.com/gurjeet/3121b2e373e61873c5a6e96d72b6... (Gist version at the time of submission: v3)
- IggleSniggle 6y agoThat is one interesting shebang. Nicely done. Can you explain the error handling stuff?
- gurjeet 6y agoThere are functions in log.go that emit message to stdout (thinking about it, I need to send warnings and above to stderr). The function err(), in addition to sending a message to stdout, also causes an exit of the process. But it does so only if ExitOnError is turned on; which is on by default, and can be turned off by setting environment variable EXIT_ON_ERROR=true. I have converted that Gist into a standalone Git repo, and hope to update it to add more improvements (like the stderr change, above) to showcase how to leverage GoLang for scripting. [1]: https://git.sr.ht/~gurjeet/GoLang_Scripting_Example https://git.sr.ht/~gurjeet/GoLang_Scripting_Example