Growing a Language, by Guy Steele (1998) [video]
youtube.com
youtube.com
The "nub" (slightly edited):
"A language design can no longer be thing. It must be a pattern, a pattern for growth".
"My point is that a good programmer does not just write programs. A good programmer builds a working vocabulary. A good programmer does language design, though not from scratch, but building on the frame of a base language"
Oh, the paper if you don't want to watch the whole thing:
https://www.cs.virginia.edu/~evans/cs655/readings/steele.pdf
You see this more and more in "test languages" like cucumber. These languages more explicitly allow programmers to specify domain items and behavior, much more so then general programming languages like Jav, C#, js, etc. I'm currently experimenting with a piece of software that actually does have a specific domain language defined using ANTLR. I'm totally unsure of this will make any sense, but at least it is fun to do. One benefit I can see already is that I now have fully typed & typechecked logging :). Another aspect I'm experimenting with is using it as a replacement for sais "test languages".
You can find my grammar here: https://github.com/generateui/jsettlers-web/blob/master/jset...
Main Entry: bottom line
Part of Speech: noun
Definition: indispensable content
Synonyms: basis, conclusion, core, crux, determination, essence, fiber, final decision, fundamentals, income, key point, last word, loss, main idea, main point, main thing, meat and potatoes, name of the game, net, nitty-gritty, nuts and bolts, point
"This is the nub of what I want to say" is a direct quote from the paper/talk.
"..plan for growth with help from users. This is a win for you because you have help. This is a win for the users because they get to have their say and get to bend the growth to their needs."
"Parts of the language must be designed to help the task of growth. A good set of types, ways for a user to define new types, to add new words and new rules to the language, to define and use all sorts of patterns — all these are needed."
Does anyone know if there is a follow up on this?
Often have I though "My good, if only the language had better supported what the programmer is trying to implement himself through horrible hacks, then I wouldn't be sitting here trying to wonder exactly what mistakes he made that casuses everything to crash inexplicably."
A second example of this culture is the go language. I read a few repo's, and the same style of programming is seemingly applied throughout.
For the Java case, I can actually see operator overloading going haywaire over many codebases. The same as overengineering is a typical trait associated with Java.