Which would now pass blithely though the parser only to raise a NoMethodError at run time because numbers do not implement an update method (At least, not in Ruby. Legend has it that this was legal in early versions of FORTRAN.
I recall a friend telling me a long time ago that REXX allowed this, but he no longer remembers and I can't verify.
When I read the "lvalues and references" part, I thought about functional programming and equivalence. That is, an interpreter where you can state:
f(g(h(x))) = n
and any time the first was mentioned, it would be substituted with the second, and vice versa, whichever allows the evaluator to simplify to a greater extent.
Then, thinking further, are there any programming languages that rely on the sorts of math where f(f^-1(x)) is simplified to x without being evaluated?
"Then, thinking further, are there any programming languages that rely on the sorts of math where f(f^-1(x)) is simplified to x without being evaluated?"
Miserably enough I had to use REXX occasionally in my previous job. I no longer have it to verify, but I wouldn't be terribly surprised if something akin to that were indeed allowed.
I've always taken "turtles all the way down" to mean the fixation that Lisp/Forth/Scheme/Smalltalk/etc... people get about implementing everything in their language of choice, all the way down to the OS and even silicon if they can. This is almost always an enormous waste of time (unless the goal is only to have fun and learn) and of no import to your 'average user'. The scripting language guys came along and got popular because they concentrated on what their languages were good at, and happily interacted with C (and now Java).
Also:
> I think it's a good thing when languages are highly consistent, in the vein of Scheme, Smalltalk, and Forth
Yes and no. It's very elegant, but in the end, I'm not convinced that that's what (most) people really want. Elegant is often a thing to be admired from afar, rather than something you use every day. I'm also in agreement with Larry Wall that sometimes these languages get too hung up on their Elegant Paradigm and forget to be practical.
As a programmer who've used Lisp and Scheme for commercial projects, I object to that, although I admit there's a tendency in the circles of these languages that pursue ideals obsessibly.
However, "turtles all the way down" has also very practical implications. I have been saved more than once because Lisp/Scheme have the way to tweak very low-level stuff within it so that I can tune the whole program to meet the performance requirements without changing the large structure of the program. And don't take the Scheme guy's discussion about Elegance by their word---we know that tools of day-to-day jobs has to have a kind of dirtiness (I don't despise that; in fact, I rather like to play with lower bits, UI, or legacy workflow,...). We only believe that keeping an eye on the ideal will serve as a long-term guide.
I don't mean that everyone is that obsessed; suffice it to say that enough people have the mentality that they want their entire environment to be in Lisp/Scheme/Smalltalk (the last of which is pretty much that way by design) to have created a culture that is, on average, more concerned with that kind of thing than the scripting languages were - they were too busy getting things done, piggybacking on Unix, C, and Windows to some degree. Note that the Java people have also gone in big for 'turtles all the way down', but that's easier with millions of Sun dollars at your back.
My point wasn't that Scheme/Lisp/etc... are impractical languages, or unusable for real work, but more along the lines of "ok, these are great languages, languages that have changed the way everyone thought - so why aren't they more popular? What went wrong?"
One very specific example - I recall fooling around with Scheme a while ago, and the implementation I was using didn't even have a string-split (string -> list). Easy to implement? Sure, but also evidence that it wasn't being used for the sort of practical things I wanted to do with it.
If you feel to taste Scheme again, check out mine http://practical-scheme.net/gauche/ . It has string-split :) Seriously, it aims at being a handy tool for day-to-day scripting.
> I've always taken "turtles all the way down" to mean the fixation that Lisp/Forth/Scheme/Smalltalk/etc... people get about implementing everything in their language of choice
That's how I take it as well. I wrote this to point out that Turtles all the way down languages make it easier to make consistent languages. I get that you don't care for that.
> Turtles all the way down is a philosophy where you try to define a ridiculously minimal set of orthogonal axioms and build the language by combining those axioms...
> But the advantage of having everything in the language built on top of a small set of axioms is that when you want to make a new feature possible, it's often just a case of burrowing down a level of abstraction and combining the existing things in new ways. For example, it could be as simple as rewriting select to return generalized variables instead of values... if Ruby really treated "=" as a method instead of treating it as a special case that is sometimes a method and sometimes something else and sometimes a third thing.
> Elegant is often a thing to be admired from afar, rather than something you use every day.
"Elegance" sounds like some effete aesthetic quality, there's no point in debating that word. Instead, I am asking you to think about consistency and discoverability, qualities that have a direct relationship to the programmer's ability to translate thought into programs.
> Turtles all the way down is a philosophy where you try to define a ridiculously minimal set of orthogonal axioms and build the language by combining those axioms
What I'm talking about is the "my whole environment must be Smalltalk/Scheme/Forth", from the OS, or even silicon, on up. That's different from your version of turtles. Yours is not the enormous waste of time that the "environment turtles" are.
However, I'm still not sure whether consistency is really that important. People seem to do ok with some inconsistencies and warts in their languages, and continue to favor languages with warts and weirdnesses and quick idioms to the ones under discussion (incidentally, what could we call Smalltalk/Scheme/Forth to group them together?).
Since there are many factors that contribute to popularity and diffusion of languages, it's hard to pin down what has kept those languages from being as popular as many people think they ought to be, but it's a question worth asking.
Naturally, I think the more people are aware of languages like that, the better. It's good for your brain and a great way of expanding your concepts of how to do things.
My bad: I misinterpreted what you meant when you said:
> Elegant is often a thing to be admired from afar
Any ways...
> > Turtles all the way down is a philosophy where you try to define a ridiculously minimal set of orthogonal axioms and build the language by combining those axioms
> What I'm talking about is the "my whole environment must be Smalltalk/Scheme/Forth", from the OS, or even silicon, on up. That's different from your version of turtles. Yours is not the enormous waste of time that the "environment turtles" are.
Perhaps I'm talking about "turtles most of the way down" and you are talking about "turtles almost all of the way down." I understand why you say what building, say, a Lisp Machine seems like an enormous waste of time.
> I'm still not sure whether consistency is really that important. People seem to do ok with some inconsistencies and warts in their languages, and continue to favor languages with warts and weirdnesses and quick idioms to the ones under discussion
> Perhaps I'm talking about "turtles most of the way down" and you are talking about "turtles almost all of the way down." I understand why you say what building, say, a Lisp Machine seems like an enormous waste of time.
Your breed of turtles is contained entirely within the language itself, and makes no demands that the language interact with: an OS written in the language, a GUI written in the language, a database written in the language, etc... It's an internal thing if I understand you correctly, and orthogonal to my breed of turtles where people turn their nose up at interacting with anything that's not written in The Language.
> Are we equating popularity with importance?
I don't know about you, but I am, at least to some degree, although I suppose my phrase might read better as "really all that important to most people" or "that important for many practical applications".
I think you're correct about the elegance, simplicity and power of a language built as you describe, but my gut feeling is that, taken as a whole, that kind of power has not been enough to tip the scales in favor of languages that wield it. I'm genuinely curious as to why that is the case. The facile argument revolves around people being "too dumb", but I think that's an easy out for fans of those languages.
With all due respect, that's misleading. I'm talking about the application of the turtles meme to a very specific software idea, the one which Alan Kay called recursive design and that you happen to be writing about. As far as I am aware, this particular use of the turtles metaphor was introduced by Avi Bryant in a 2005 post and popularized by him in various interviews since. Surely credit should be given where it is due, especially when an idea has a well-defined origin. It's like writing a whole post about Blub without mentioning "Beating the Averages".
(While it is true that the wikipedia page contains a reference to Bryant at the bottom, it's a very obscure reference, and this could hardly be a more specific idea. It's very possible that Avi got it from someone else in the Smalltalk world, but if anyone knows of an earlier published reference I'd be curious to see it.)
If I am responding directly to someone, I will link to them. If I think there's value to be added for the reader, I will also link to an essay like that.
Other than that, I do _not_ insert links and footnotes and citations into every blog post. The footnotes would outnumber the paragraphs if not the sentences.
Should I link to Alan Kay every time I discuss objects? How is that different? Or for that matter, if someone discusses the signal-to-noise ratio in programming language idioms, must they mention a post I wrote that was popular at the time?
And FYI, I have written about Blub and linked to Paul's essay as well as written about Blub without linking to Paul's essay. You are right, the two things are exactly the same and I have treated them the same way.
I choose to link or cite when I think it improves the reader's experience. In this case, I didn't think so, and after re-reading AVi's post, I still don't think a link belongs in my post. You could force it in, perhaps by adding a post script "If you find this interesting, you may also like..." or by adding a parenthetical remark "(TAWDry languages have other benefits, like...)."
But you know, that isn't what you are arguing. You do not appear to be arguing that a citation would improve the user experience of the post. Or at least, that's not how it reads. Your comment reads like I have written a scholarly paper and violated the rules of citation. Is that really what you are saying here?
There is a saying that I will attribute to Jerry Kaplan (since I read it in the forward to his book "Startup"):
"Your ideas will go further if you don't insist on going along with them."
Avi hasn't emailed to insist that he go along with that metaphor. Which is probably part of why it is spreading.
The value to the reader of being pointed in a rich new direction is obvious.
I'm not saying that you wrote a scholarly paper. I'm saying you introduced a (fairly esoteric) metaphor with a clear and unambiguous origin and failed to mention it; that struck me as ungracious. As for "forcing it in", it couldn't be more relevant. You named your post after it.
Oh goodness me, that word is redolent of drawing rooms and mannerly discourse.
I present you with two options:
1. There is a comment feature on the post, and it permits you to include hyperlinks. Help yourself. That's exactly what the comments are for, to allow you to suggest avenues of investigation for other readers.
2. If you think there's a rich connection that ought to be mined in prose, write a blog post and go into as much detail as you think appropriate. I'd like to read it.
2 = 3
Which would now pass blithely though the parser only to raise a NoMethodError at run time because numbers do not implement an update method (At least, not in Ruby. Legend has it that this was legal in early versions of FORTRAN.
I recall a friend telling me a long time ago that REXX allowed this, but he no longer remembers and I can't verify.