How do people think? Co-inventor of Self, which influenced JavaScript. Also sped up Java, Python. Animation for screens. Reality? How to be useful now?
@rseroter@golang And then thereโs the impact of artificial or super intelligence upon the creation of software.
Not to mention what your target programmer audience is already familiar with.
I love this! Adaptive optimization versus ahead of time compilation. Garbage collection versus carefully-written manual storage allocation with help from the language and compiler.
Multidimensional tradeoffs, and careful experiments certainly help.
I believe that there will be cases in which each approach wins for each metric.
Context matters: Does your computer plug into the wall or run off a small battery? Are you writing one-off code for research purposes or distributing millions of copies of your app? Is the computer here on earth, on Mars, or flying past the edge of the solar system?
I donโt plan to dig into this, but I love that youโre going in this direction. Computers have gotten so much faster and memories have gotten so much larger, that language implementations can serve the programmer way better than in the days of C on the PDP-11, or Smalltalk on the Dorado.
And those were in my time. Before my time there was the first Fortran compiler, and you wouldnโt believe how little memory was on the computer it ran on.
@rseroter I guess I got a little too excited: theyโre not using dynamic optimization, but they are using garbage collection. Iโd love to see them compare this to Swift, which uses optimized reference counting.
Java virtual machines use the Adaptive Optimization techniques we pioneered for Self, and the generational garbage collection ideas I published as Generation Scavenging back in the 80s.
Iโve always been passionate about programming systems that optimize programmer creativity, and productivity. They are not appropriate for all contexts, though.
The benefit of Adaptive Optimization is that it can take advantage of dynamic program behavior patterns. It is not without its costs, though.
It is wonderful to see comparisons between the two approaches. Thank you, @rseroter!
1. It sounds like you have an encountered the concept of the complexity pyramid before. Or if you have, what do you think it is?
2. I prefer to frame other peopleโs thoughts as different rather than wrong. Influenced by both rational and emotional considerations, as well as experience. Sometimes it benefits me to adopt those ways of thinking. And sometimes I try to offer a different way, as I have done in this discussion, I hope.
3. Do I understand you correctly that an extension is a completely different thing than the definition?
4. I think I have already stated my case against linearization elsewhere.
5. Legos are a great example of a system based on fundamentals: every piece has the same sort of bumps and hollows so that they all fit together easily and in unforeseen ways. Chemistry is another example of such an a system. When I design a language, or an environment for programming, I strive for an abstraction level that contains only a few basic concepts that can be mixed and matched. In my experience, such a system fosters creativity and in my work, I seek to do that very thing.
@Ngnghm@jameskjx Who was that undergraduate? Why do you mention that he was unpaid? Where I come from, undergraduates are rarely paid. Significance They pay the university in return for the education.
"Flavors was a genius discovery that revolutionized OO by an unpaid undergrad over a few weeks." Were you that undergrad? Why do you think it was genius and revolutionary? What was the novel insight? What was the revolutionary idea? I don't understand.
Why are you so laudatory? Did it solve a huge problem for you? Did you have a transformative experience with it?
You refer to your book, and LtUO. Where can I find them?
Your second paragraph seems to assert that the quotient of features divided by lines-of-code is equivalent to simplicity. I prefer to think of simplicity in terms of how much new stuff a user has to learn, taking into account what the user already knows. Am I misunderstanding your argument?
When I encountered Flavors, back in the 80's I think, it just seemed like an overly complicated attempt to layer an object-oriented system onto Lisp. Smalltalk seemed much more elegant, and later Self was more powerful with fewer concepts still than Smalltalk.
When I program in any language, I try to make the best use of what it provides, but I would never claim that my success is an endorsement of the fundamental language design. You seem to be saying that, because you used Flavor constructs to build something useful the choice to design the language that was good. What am I missing here?
I say Korz allows for far more modularity than its (dynamic) predecessors, because it allows for subjective modularity. The whole purpose of modularity is to centralize invariants, easing the finding the code that either depends upon or enforces some invariant. The need for subjectivity arises because there is no one containing hierarchy that cleanly centralizes the invariants. Your "invariants that no one owns" reflects a limited understanding of the power of subjectivity. For any invariant, one can add a dimension that owns it, and thus a projection of the space that does centralize the invariant. I sympathize, because the cognitive shift from a linear, objective world-view to a multidimensional, contextual world-view is profound.
IDEs matter; they cannot be separated from the language. And building a good one for a contextual, multidimensional system will be interesting.
The conflicts that can emerge when writing Korz code are the same ones that Flavors merely papers over by linearizing inheritance. If I want to resolve a conflict in Korz I can do it with either extra dimensions, or more specificity in the coordinate inheritance hierarchies. To me, the inheritance linearization in Flavors was just a way to ease the implementation at the cost of a more baroque mental model for the programmer.
But hey! Korz is mainly just an idea, and I could be wrong. I've made plenty of mistakes before.
And please don't interpret what I write and any attempt to change your mind or even challenge the way you see things. As my mother would say, "That's what makes horse-racing." Each person lives in his or her own subjective reality and you are entitled to yours. You pays your money and you takes your chances.
Best of luck!
"predefined" Rubs me the wrong way. Why those and not others?
Defined how? Macros?? If so, it's a symptom of what I consider to be a disease, sorry. OTOH, a system built on uniform true partial evaluation or adaptive optimization is fine by me.
"Streamlines"? Were they predefined for the sake of performance? If so, I think there's a better way.
In Self, the standard library is just stuff you import. It's as visible and as malleable as anything you write yourself. And what you write yourself runs as fast as "library" code, while both your own and library code is fully debuggable. Were there Lisp or Flavors systems that worked the same way? When? Later, AFAIK.