Tried bash, Make, and awk/sed. All hit brick walls. Finally landed on pyinvoke. Two dependencies to install on any new machine. Never had problems. Also, easy to debug and modify as projects evolve.
Linux
From Wikipedia, the free encyclopedia
Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).
Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.
Rules
- Posts must be relevant to operating systems running the Linux kernel. GNU/Linux or otherwise.
- No misinformation
- No NSFW content
- No hate speech, bigotry, etc
Related Communities
Community icon by Alpár-Etele Méder, licensed under CC BY 3.0
If you are interested in tiny lisp like languages, this gitlab could be of interest to you.
Full disclaimer, I came across it a few years back as I am the maintainer of arkscript (which will get faster and better in the v4, so that data about it there is accurate as a baseline of « it should be at least this good but can be even better now »).
I would go with Guile, because it is built-in to the Guix Package Manager which is a really good general-purpose package manager.
It ticks several of your boxes:
- has a CLI interpreter
- is a general purpose language, Scheme, amd compliant with revisions 5, 6, and 7 of the language standard
- allows writing in a functional style (it is one of the original functional programming languages)
- small disk footprint, but still large enough to be "batteries included"
- decent documentation, especially if you use Emacs
- simple setup: not so much, unless you are using Guix to begin with. The standard distribution ships with lots of pre-built bytecode files, you need an installer script to install everything.
It also has pretty good libraries for system maintenance and reporting:
Since you like guile, I would recommend you checkout rash (search "rash shell language" on Google. Sorry too lazy to link it).
It is based on racket, but made to be shell-like, and is very nice. I believe guile used to have a similar project that isn't maintained anymore.
Perl would be my candidate for more advanced text handling than what sh can do.
Never used Lua but I think it's fun.
If nothing else works, just learn C/Rust. There's plenty of that on Linux systems, I think you'll be able to manage. Yes, it doesn't meet a lot of your requirements.
Quickly came to write "AWK!!!!!!!!!" but yeah... you don't want its superiority... 😜
Why not give (Common)LISP a try?
posix sh + awk for manipulating data?
You should probably check out Guile.
nim is great, but it is >200mb (plus AFAIK it is compiled... does it also have an interpreter?)
The part where it's compiled is what makes it have no dependencies to actually execute
Bro seriously just slap pyenv + pyenv-virtualenv on your systems and you’re good to go. They’re absolutely trivial to install. Iirc the latter is not a thing in windows, but if you’re stuck on windows for some reason and doing any serious scripting, you should be using WSL anyways.
Why does it need to be a scripting (by this I assume interpreted) language? For your requirements - particularly lightweight distribution - a precompiled binary seems more appropriate. Maybe look into Go, which is a pretty simple language that can be easily compiled to native binaries.
You could use Ansible for automation just keep in mind it needs python.
Could use a hipster shell like fish, nushell or elvish. I know the latter two have the functional support you're looking for.
It is possible to wrap something like python into a single file, which is extracted (using standard shell tools) into a tmpdir at runtime.
You might also consider languages that can compile to static binaries - something like nim (python like syntax), although you could also make use of nimscript. Imagine nimscript as your own extensible interpreter.
Similarly, golang has some extensible scripting languages like https://github.com/traefik/yaegi - go has the advantage of easy cross compiling if you need to support different machine architectures.
vlang might fit your request pretty nicely. It's a bit patchy in places but mainly stable and gets pretty frequent updates
@gomp Small footprint? Why not try forth. https://forth-standard.org/