It's also easily embeddable in C programs the same way lua is, making it possible to use it as a config, extension, or scripting language in a larger program.
Aside from that having used it a fair bit I think it's got a very "practical" orientation. It provides immutable structures, but doesn't enforce immutability semantics the way clojure does. It has a good concurrency system but is cleanly single-threaded and performant by default. And imo the standard lib is a really good balance, neither forcing you to build EVERYTHING yourself (lua) or having the whole last 50 years of CS research in it (racket).
And here I immediately lost my interest. Anything that cannot do real concurrency is a toy in my book. There's no excuse for a language developed for practical computers in 21'st century to not be able to utilize concurrency which is practically built into every existing computer.
> It has a good concurrency system
Vegan cheese is not named this way to trick you, it's for vegans who want something functionally similar to cheese. Same goes for oat milk and the likes, they're used _like_ milk, in coffee, etc.
Concurrency can mean doing several things that are interleaved, even if they're not literally running on multiple cores. Otherwise, you literally couldn't have concurrent network connections because the NIC only sends one packet at a time. Similarly, fibers, promises, etc. are valid implementations of concurrency as they're running different, unrelated strands of logic in an interleaved fashion.
Apart from that, there are organizations that act on behalf and to protect consumers' rights. Some of that goes against false advertisement. This is why, for example, products that aren't meant for children or puppies aren't allowed to have children or puppies on the packaging, or the reason why it would be illegal for different products to have packaging that inflates the perceived amount of good that you buy by essentially, selling you air. This is also the reason that in many countries vegan "cheese" is not allowed to be called "cheese" in advertisements on on the packaging. Same goes for vegan "milk" and similar products.
It doesn't have to be about vegan products, it was just a convenient example. In some countries "crab" sticks are only allowed to be called that if they actually contain some crustacean meat. Or products aren't allowed to be called "juice" if they have less than a certain % of actual juice in them and so on.
"Concurrency" in languages like Janet is exactly the same thing. It is false advertisement. You pay with the lost ability to debug and to predict code execution path for nothing, whereas that would've been the price you might have wanted to pay for executing code concurrently. That's swindling. Most likely unintentional in the case of the people working on Janet, but for you, as a user, it makes little difference.
Janet is much closer to Lua, in scope and applications, than it is to any Scheme or Common Lisp or Clojure implementations.
Gauche for example implements the latest (and IMO greatest) R7RS, its standard library is huge and "batteries-included" including a wide array of RFCs to the point of rivaling Python, and has a package manager in the form of Akku. Chicken has a similar story. Racket is arguably more useful "out of the box", but its community seems so heavily focused on using it for PL research that it's harder to justify using it for day-to-day programming. And there's Clojure as well, which I know comparatively less about, but is well-loved by its users.
Heck, even Common Lisp has a lot going for it, but the Standard and the conventional Lisp dev tools are kind of chaotic and idiosyncratic enough that it's understandable if people don't want to use it.
To be clear, Janet seems like a great little language. But as someone with limited time and energy who is interested in using it, I want to know why I should spend the time learning it, compared to Scheme