'Racket Syntax: The Great, the Good and the Back to the Drawing Board' by Allan Schougaard at the (fourteenth RacketCon) is now available at https://youtu.be/ZtTqRH1uwu4
To continue the conversation Allan starts: What if we made a greater emphasis in the Racket documentation on the history of why things are the way that they are in the Racket ecosystem.
After watching the presentation, I feel like I agree to some extent with what Allan says, regarding things which may seem at first glance odd, but I for one think that these oddities ground the language in the reality of the context in which it was conceived. It's the lore of the thing. You can't become a wizard without learning some unnamable incantations.
Take the example he gives of using the unquote-splicing: his slide contains an error, if I am not mistaken, in that the two expressions are not equivalent.
`(html
(head (title "Section: " ,section))
(body
(h1 "Section: " ,section)
(div ((id "main")) ,@body)))
; vs
(list 'html
(list 'head (list 'title "Section: " section))
(list 'body
(list 'h1 "Section: " section)
(list 'div (list ('id "main")) body)))
^^^^^^^^^^ ^^^^
The head of the final list
would have to be list*
, and the 'id
is missing a list
in front of it.
Although I appreciate he is just making a point (so no criticism), it also demonstrates that either nomenclature can be confusing--one terse but more obscure, one more "noisy" but more recognizable--if you aren't paying close attention.
One is great for the initiated, the other better for those new to the system; which he mentions as the reason for his preference of the one over the other.[0]
I think he hits the nail on the head with the "fallen quote" remark: the symmetry makes it better, in my opinion.
He points in one section to lambda
as an example of an oddity, proposing that we use function
instead; thunk
was also singled out, when demonstrating some of the thread
operations.
Both of these terms have rich histories. I remember reading about a thunk
for the first time, and going down the rabbit-hole of function trampolines, the upward and downward funarg problems, and closures in general. And, I mean, Church, man, Church.
Renaming things can freshen them up, and make them more recognizable, but it can also "erase" history, if we are not careful to highlight that historical journey.
I don't know if this is something that's been discussed before, myself not being very versed in the history of the language, apart from what I have picked up via osmosis, BUT what if that process went less like a garden path, and more like a library.
The Racket Glossary is already a great contribution in and of itself in this direction, and even categorizes the concepts according to their perceived "level" of sophistication. Something similar toward the historical significance of certain terms and conventions might go a long way in being able to canonically point to something as "the reason(s)" for the way things are.
I enjoyed this presentation, and it reminded me to use scramble
more!
[0] Take learning a natural language as a close parallel: as a novice speaker, you have to circumlocute (i.e., use some known words to explain something more complex for which the word is unknown) to convey your intent. This is the more verbose but recognizable code; then, you become more fluent and don't have to think as hard about what you are saying, and more about what you want to mean. This is the terser but less obvious code.
Edit:
And, also in this vein, we have HtDP with the student languages, which are awesome, and free.