So with that in mind I tried your tool and I was enthusiastic about seeing a score for each words, but then what? I tried a few sentences manually (the random button doesn't work) and for example it seems that I have an issue with the pronunciation of "to" where I always get around 50%, but there's no way to know what's wrong. As it is I'd stop using the tool after about a minute.
I'd suggest adding something to hear the correct US/UK pronunciation of the words.
A small percentage go the wrong way for millennia and die immediately, but they pass along their generations gene when the magnetic field flips of the earth.
Always found that fascinating to consider…
cd foo/<tab>
# oh, too many options
<ret>
ls -la
cd bar/baz
git status
cat quux | grep xckd
cat quux | grep -i xckd
cat quux | grep -i xkcd
cat quux | grep -i xkcd | xargs ...
etc.The trial-and-error command refining is arguably what REPLs are for. It's the filesystem navigation that are the odd part.
(INB4: don't give me the "useless use of cat", it factors out better like this and everyone does it anyway.)
`<quux grep xkcd`
That said, Emacs relies rather heavily on unique features such as dynamic binding, advice, and autoloads. These are more or less impossible to replicate in modern languages, so I don't think there's a reasonable path to rewriting major parts of Emacs in, say, Javascript.
But we should look at what Lua did for Neovim. There has been an explosion of development effort now that Neovim finally added a reasonable programming interface. A similar thing could happen in Emacs.
It is very much debatable whether Lua is the "reasonable programming interface" causing the activity in Neovim. Vimscript has many flaws, one of them being that it doesn't look like other programming languages, but it does its specialized job pretty well. It is slow, but efforts are made in that area. Lua is well designed but it certainly has its shortcomings too, and many argue (me included) that programming in Lua is not that pleasant. The Lua bindings have been available in Vim for quite some time, but they never were popular, for some reasons.
Anyway, it is not directly related to your point, but I think that example is not that compelling.
Here's the reference manual: https://vimhelp.org/#reference_toc (`:h reference_toc`)
There's also a cheatsheet: https://vimhelp.org/quickref.txt.html (`:h quickref`)
Incidentally, the same advice apply to Bash: just read the man page, and search into it each time it is needed. It is just worth it.
My basic thesis is that Shell as a programming language---with it's dynamic scope, focus on line-oriented text, and pipelines---is simply a different programming paradigm than languages like Perl, Python, whatever.
Obviously, if your mental model is BASIC and you try to write Python, then you encounter lots of friction and it's easy for the latter to feel hacky, bad and ugly. To enjoy and program Python well, it's probably best to shift your mental model. The same goes for Shell.
What is the Shell paradigm? I would argue that it's line-oriented pipelines. There is a ton to unpack in that, but a huge example where I see friction is overuse of variables in scripts. Trying to stuff data inside variables, with shell's paucity of data types is a recipe for irritation. However, if you instead organize all your data in a format that's sympathetic to line-oriented processing on stdin-stdout, then shell will work with you instead of against.
/2cents
I swear, there should be a HN rule against those. It pollutes every single Shell discussions, bringing nothing to them and making it hard for others do discuss the real topic.
When it comes to bash search for even simplest command/syntax always ALWAYS leads to stackoverflow thread with 50 answers where bash wizards pull oneliners from sleeves and nitpick and argue about various intricancies