Skip Navigation

Recommend me a scripting language

I've been looking around for a scripting language that:

  • has a cli interpreter
  • is a "general purpose" language (yes, awk is touring complete but no way I'm using that except for manipulating text)
  • allows to write in a functional style (ie. it has functions like map, fold, etc and allows to pass functions around as arguments)
  • has a small disk footprint
  • has decent documentation (doesn't need to be great: I can figure out most things, but I don't want to have to look at the interpter source code to do so)
  • has a simple/straightforward setup (ideally, it should be a single executable that I can just copy to a remote system, use to run a script and then delete)

Do you know of something that would fit the bill?


Here's a use case (the one I run into today, but this is a recurring thing for me).

For my homelab I need (well, want) to generate a luhn mod n check digit (it's for my provisioning scripts to generate synchting device ids from their certificates).

I couldn't find ready-made utilities for this and I might actually need might a variation of the "official" algorithm (IIUC syncthing had a bug in their initial implementation and decided to run with it).

I don't have python (or even bash) available in all my systems, and so my goto language for script is usually sh (yes, posix sh), which in all honestly is quite frustrating for manipulating data.

124

You're viewing a single thread.

124 comments
  • As for languages intended to be run as a script first and foremost, consider powershell. It's object oriented (and not, like other script languages, just serialising/deserialising everything to JSON under the hood). The syntax takes some time getting used to, but it's cross-platform, quite powerful, and has very good editor support.

    Something I haven't seen here yet, but may be worth considering: several programming languages support invoking the compiler to run a source file rather than compile it into a binary.

    Go may be worth trying as a Python replacement. It's strictly a programming language, but the language has been written to make it fast to compile. For simple scripts, there's not much difference between the startup time for Python and a compiler invocation of Go.

    If you want a more functional programming, Kotlinscript may be to your liking (though that comes with a rather large JVM+compiler dependency that's not very portable). Kotlinscript is basically Kotlin (the programming language) executed like a script by putting the Kotlin compiler in the hashbang.

    Similarly, Java can these days also be executed like a script if you invoke it as java some-script.java. Using Java like this doesn't allow for importing dependencies, though, which you may want if you ever need to process JSON.

    These compilers aren't single binaries, but they are available as normal OS packages on most modern distros.

    If you want to optimisme for "I want to copy a statically linked file to an alpine container", maybe look into fish or zsh.

    For some types of data manipulation, PHP may be a good fit. It's not just for web development, although many of its more optimised features are designed for that. Useful features include clear iterations over maps/dictionaries, quite strong static types it you bother to put them in the script, and lots of examples of how to accomplish something online.

    Typescript can also be invoked directly these days, and it's even better than PHP (and arguably most programming languages) when it comes to types. I find the time it takes for the JS VM to initialise frustrating, but maybe more modern interpreters such as deno do better in this regard.

You've viewed 124 comments.