Uncompilable Languages
Quis declinabit ipsos declinatores?
Machine languages are not human languages. That is not particularly interesting to observe on its own; there may be some formal distinction to be discovered that is interesting to a small group of researchers, but only the most navel-gazing of engineers might trick themselves into thinking that their code is "poetry" in any sense other than the metaphorical. But if one were merely barking orders to a person in a similar way that a programmer might demand satisfaction from a computer, what specifically would the differences be?- Self-reference: Possible in both, but strange things start happening once this applies to formal languages. (See: Gödel; Russell & Whitehead.) Recursion is of course the norm, and meta-programming is a feature of some of the most popular industry languages (and some of the more niche ones), but for formal language definitions the buck has to stop somewhere. Part of this is really due to the definiteness of programming languages; there is no concept of "a procedure consisting of sub-procedures that do not invoke themselves"...yet. Human languages have no such restrictions. It might not make sense, thus making it not "parseable", but the colorless ideas continue to dream however they wish and in whichever color. Maybe we can say the same of programming languages: at what point in the compiler pipeline would the jig be up? We could certainly tokenize a nonsensical program (and we do, more often than sensical ones), but could it make it to assembly? Clearly I need to read more Chomsky & more of the wizard book.
- Ambiguity: Human languages are rife with it, but programming languages only avoid it out of convenience. Or we pigeon-hole it as "undefined behavior" in the language spec, leaving the compiler to play the role of the hesistant interlocutor. Compilers are the (literally) gassed-up oracles of the programmer playing mighty Apollo, sending forth visions for them to decode. Or maybe the unfortunate general who interprets the vision incorrectly and causes a segfault across most of Greece.
- :
What is poetry? The earliest Western philosophers refer to it as the "verse" form, whether in language or in sound (i.e. music). We could say that this is strictly accurate, as even the unrhymed, unmetered modern poetry is still in verse. But there are a few properties of poetry that are not strictly related to the meter or rhythm of the words. We might call prose "poetic" if its language is artful: metaphorical, emotional, allusional, and we have a telling term for this category: "prose poetry". If poetry is then prose under the influence of art, can we find something similar for programming languages? The man-on-the-street's knee-jerk objection2 might be that the question is irrelevant, since "prose" works written in programming languages are executed by a machine, not read, to which the programmer's first instinct is to tap the old sign:
Programs are meant to be read by humans and only incidentally for computers to execute.But their second instinct is that the program is indeed read by a machine. The former response is one that we'll treat here at length, but the second is interesting enough to briefly consider. In a minimalist way, humans & machines both read text and act on the result. Each word2 in a sentence/subroutine is accepted and makes a small change in one's internal state. The word itself doesn't necessarily do anything - maybe "the", or a
- Abelson & Sussman, Structure and Interpretation of Computer Programs
MOV
- but could have devastating impact despite its seeming simplicity - perhaps
a "no", or a MOV
to the wrong address. The impact of the whole utterance is
decided separately after the words are complete, though the result could be well telegraphed
by the end or end up in a surprise twist.