The terminology is definitely a work in progress. It's mostly for my attempts to teach programming using Mu. I noticed that mathematical words intimidated some students. I tried to write up my rationale here: http://akkartik.name/post/mu. But I've certainly started mixing up the terms with my student, so it might not last.
I can see how the use of the term "arguments" could be confusing ("parameters" or "inputs" would make more sense), and "threads" is a rather tenuous metaphor for how scheduling works within a kernel, but all of the others mirror their real-world meaning pretty well. I'd be more worried about students needing to unlearn "containers", "ingredients", and "reagents" when they start reading material from outside of Mu, talking to other developers, or learning calculus (which uses functions, sets, and arrays).
Functions are what something is for, as opposed to form. It isn't natural to think about their inputs and outputs.
It's quite possible my solutions are too blunt and problematic, but these seem like real problems.
Interesting, as I tried a quick brainstorm, I thought of a group of kids sitting together playing with the same toys. Actions that only one could do on a toy at the same time. Trying to convey the problems or exclusivity. Mentally came to problem of sharing. Then that people often borrowed toys temporarily then the owner checked up on them.
(lightbulb) Rust has a borrow-checker. And ownership. Now I wonder where they came up with that haha.
In Ada, "tasks" makes sense, but only because it is an abstraction that makes use of threads while managing all memory access and separation from the rest of the process.
How you like THAT! Maybe need a similar analogy closer to whats going on but the spirit of it seems accurate. Maybe factory workers on assembly lines or offics workers at desks.
Procedure however might be a good enough name, less connoted than Recipe.
Quoting the Elements of Programming by Alexander Stepanov:
"A Procedure is a sequence of instructions that modifies the state of some objects; it may also construct or destroy objects."
With the definition of Object as:
"An Object is a representation of a concrete entity as a value in memory"
As for functions, I think the term makes sense, even with the non-mathematical definition, and especially in the context of OOP:
> an activity or purpose natural to or intended for a person or thing. synonyms: purpose, task, use, role
The "purpose" part doesn't make much sense with the way that we use the word, but it's certainly an activity. For example, a function of a stove is boiling water, its input would be liquid water, and its output would be steam & hot water. In OOP, "stove" would be the name of the class, and "boil_water" would be the function.
From that observation, I think one should conclude that using analogies from cooking, as you do with recipe in the kitchen sense is not the best idea.
+ recording runs as tests
+ one library for all layers of abstraction
+ building in assembler to avoid the big runtime.
+ using literate programming techniques to manage coding in assembly.
+ scenario, "screen-should-contain" and "assume-keyboard". awesome.
+ spaces: nice primitive of the closure and similar concepts
+ attributes for meta programs. again, awesome.
+ labels and using [,] as labels. genius.
Suggestions:
* If there's a valid reason to call them recipes, go ahead. If they're actully just functions, please stick with what everyone knows and gets. Same thing with "reagents","reply", "ingredients" and "products". Update: I did read your blog post about this. still think the regular names are better in the long run.
* I dont know where you're going to with multiple types of the "number:list" kind, but if so, the map must look the same, not lispy.
In all, I really like where you're going with this. Kudos! I find a lot of resonance of ideas I've had for a long time now.