I should have mentioned that Forth programmers use a lot of functional programming techniques, presumably to avoid shooting themselves in the foot.
I forgot my initial plans for Forth included a set of APL-like array features for this reason.
APL has run on bare hardware, not so much as an OS as a way to use the language with its special character set; a feature which causes difficulties with conventional terminals. When 16-bit systems with decent graphics became affordable, APL68K was produced and it ran on a bare machine. APLX is a descendant of this, and its documentation still likens functions to programs.
It doesn't mention that variables are basically data files, but they are and they can have complex structures understood by the language. I like that.
I considered trying to write a bare-metal APL myself, and build more of an OS with it.
It would be a very big job; a compiler, standard library, and an OS because there aren't any open-source APL systems, but I think the wealth of array operations (1D and 2D) would take a big chunk of the work out of string and graphic libraries and maybe others. I rejected it because, when using APL interactively with its strict right-to-left evaluation order, I found myself constantly having to insert parentheses whenever I modified an expression. Perhaps I should have used more temporary variables. I find Forth syntax better with its left-to-right evaluation order, (not to mention easier to read!) but it's clumsy when you have to manually handle the type and size of every piece of data, even interactively. Simple calculations require different operators for floating point or integer numbers. Every different array-ish or list-ish task (e.g. text editing) needs its own small library, and it's taking me a long time to find good ways to do the different things. I found a few new tricks this week, but they were for such basic things; equivalent to things I learned in the first week of my interest in APL. It's probably just the weird way my brain works; I do not get on with lots of different words for similar things. I suppose I could still try to build those array features with type and array shape stored with the data, allowing a few words to work with a variety of types. It would pretty-much be a standard library project and then implementing all the useful things on top of that.
I didn't mention Plain English Programming. I've been thinking of it as kind-of borderline as a "real" alternative to C, but maybe that's because it's still rather new and its overall style is rather lighthearted. Despite that, I think it's closer to the machine than Lisp. It's also a language with a decent set of types (he said with feeling)... but now I remember there's no actual array type; another reason it's borderline. It uses lists instead, integrating them with records (structs for you C types). I imagine adding arrays would not be terribly difficult, but haven't looked into it yet. Anyway, I started a
wiki page on it today. It's rough because I was half-asleep all day, but it has some info and perhaps all the available links already. The documentation is limited but the language is, of course, more self-documenting than any other for those fluent in English. That's the other thing I love about it.