I realized that one name among the nothingness antiforms that I don't know is optimal is "NIHIL".
I'll throw it out to the forum to see if there are any better ideas. But I framed the question for the chatbots to see what they would say.
(My question is actually a pretty succinct summary of the situation...probably easier to digest than reading all the rambling that led up to it.)
Note that TRASH as described at the outset here was changed to NOTHING, and TRASH is now quasi-blank... the meta-state of nothing (e.g. lone
~
in source)Credit for NIHIL actually goes to @gchiu who suggested it a while back, when I was asking what to call an arity-zero COMMENT construct.
Heirarchical Nothingness In A Programming Language
I have a programming language in which I have several layers of concepts of "nothing", each with unique properties.
NULL is like most languages' null in that it is falsey when tested conditionally by something like IF. But in general, if you pass it in a slot that is not conditional it is considered an error. It's kind of a "soft failure" signal returned by many routines saying "I couldn't find what you were asking for".
VOID is a kind of intentional nothingness. When passed as an argument, it opts out of things...frequently causing the function to return NULL. If you pass it to a function that tests many things logically (like "are these items all truthy" or "all these items all falsey") it will opt out of voting on the result. Hence a single conditional test (e.g. passing it to an IF) must error as it isn't definitively true or false in isolation.
TRASH is used as the contents of an unset variable (like an undefined
in JavaScript, perhaps). It is also the result of many functions that have no meaningful result to return, such as a PRINT statement (unless you pass PRINT a VOID in which case it returns NULL). Trying to reference a variable holding this state will trigger an error, and special operations must be used to test for or extract the state from a variable. It is conditionally truthy, which comes in handy e.g. if you wish to test the result of a PRINT to know whether it was opted out of or not.
But there is one more kind of nothingness I have to account for, which is a very strange transient state. It can be an evaluation product but attempting to store it in a variable will trigger an error. But you don't try to assign it to anything and it's in the middle of a stream of evaluation, then it will just be ignored and you will get whatever the previous result would be. This makes it useful as the result of things like COMMENT.
>> var: comment "illegal"
** Error: Some Error Message Here
>> 1 + 1
== 2
>> 1 + 1, 10 + 10
== 20
>> 1 + 1 comment "ignore me"
== 2
This transient state returned from COMMENT needs a name. Without biasing you on what I've been calling it so far, I'll ask if you have any ideas!