I am pleased and amazed at the attention you all lavish on Self. The recent activity has moved me to wonder: What is it about Self that appeals? What is it that you don’t like?
I mean to ask about the language, environment, and implementation, not about the mailing list, web site, or even documentation.
One reason this topic interests me is that I am watching the immense popularity of Swift, a somewhat different style of PL, and I am even enjoying Swift myself.
Thanks in advance,
- David
Hi,
the Universal Design Pattern http://steve-yegge.blogspot.co.uk/2008/10/universal-design-pattern.html blog post[1] by Steve Yegge brought Self to my attention, though I was aware it from discussions of the Javascript object system.
Morphic blew my mind but I sadly don't have time to spend on it.
I'm currently learning Swift, but in my down-time I am fiddling with Protobj[2] and 'Purely-functional Object-Oriented System'[3] with a vague idea of doing a mini-self on top of the Racket Language[4] (that would run on windows - something you sadly can't do in Self 4.5 - and probably blocks a number of people who would otherwise try it)
Is there a implementation of Korz available ?
Kind Regards,
Stephen
1. http://steve-yegge.blogspot.co.uk/2008/10/universal-design-pattern.html
2. http://www.neilvandyke.org/racket/protobj/ 3. http://okmij.org/ftp/Scheme/#pure-oo more detail http://okmij.org/ftp/Scheme/oop-in-fp.txt 4. https://docs.racket-lang.org/guide/languages.html
On Tue, Jun 21, 2016 at 5:32 PM, David Ungar ungar@mac.com [self-interest] < self-interest@yahoogroups.com> wrote:
I am pleased and amazed at the attention you all lavish on Self. The recent activity has moved me to wonder: What is it about Self that appeals? What is it that you don’t like?
I mean to ask about the language, environment, and implementation, not about the mailing list, web site, or even documentation.
One reason this topic interests me is that I am watching the immense popularity of Swift, a somewhat different style of PL, and I am even enjoying Swift myself.
Thanks in advance,
- David
Thank you for answer and for that pointer. It’s a good one. Let us know if you do that mini-Self.
We did a toy implementation of Korz atop Self. I believe that Harold Ossher was looking at getting IBM to release it. Send me a message at ungar@mac.com if you want his email address.
- David
On Jun 21, 2016, at 10:57 AM, Stephen De Gabrielle spdegabrielle@gmail.com [self-interest] self-interest@yahoogroups.com wrote:
Hi,
the Universal Design Pattern http://steve-yegge.blogspot.co.uk/2008/10/universal-design-pattern.html blog post[1] by Steve Yegge brought Self to my attention, though I was aware it from discussions of the Javascript object system.
Morphic blew my mind but I sadly don't have time to spend on it.
I'm currently learning Swift, but in my down-time I am fiddling with Protobj[2] and 'Purely-functional Object-Oriented System'[3] with a vague idea of doing a mini-self on top of the Racket Language[4] (that would run on windows - something you sadly can't do in Self 4.5 - and probably blocks a number of people who would otherwise try it)
Is there a implementation of Korz available ?
Kind Regards,
Stephen
http://steve-yegge.blogspot.co.uk/2008/10/universal-design-pattern.html http://steve-yegge.blogspot.co.uk/2008/10/universal-design-pattern.html
http://www.neilvandyke.org/racket/protobj/ http://www.neilvandyke.org/racket/protobj/
http://okmij.org/ftp/Scheme/#pure-oo http://okmij.org/ftp/Scheme/#pure-oo more detail http://okmij.org/ftp/Scheme/oop-in-fp.txt http://okmij.org/ftp/Scheme/oop-in-fp.txt
https://docs.racket-lang.org/guide/languages.html https://docs.racket-lang.org/guide/languages.html
On Tue, Jun 21, 2016 at 5:32 PM, David Ungar ungar@mac.com mailto:ungar@mac.com [self-interest] <self-interest@yahoogroups.com mailto:self-interest@yahoogroups.com> wrote:
I am pleased and amazed at the attention you all lavish on Self. The recent activity has moved me to wonder: What is it about Self that appeals? What is it that you don’t like?
I mean to ask about the language, environment, and implementation, not about the mailing list, web site, or even documentation.
One reason this topic interests me is that I am watching the immense popularity of Swift, a somewhat different style of PL, and I am even enjoying Swift myself.
Thanks in advance,
- David
On Wed, Jun 22, 2016 at 4:32 AM, David Ungar ungar@mac.com [self-interest] self-interest@yahoogroups.com wrote:
I am pleased and amazed at the attention you all lavish on Self. The recent activity has moved me to wonder: What is it about Self that appeals? What is it that you don’t like?
I like the environment where I'm basically living inside the software I'm building, modifying it as I go. Being able to drag/drop an empty object, and start building it up from scratch while viewing attributes of it live, changing as things in the world change. The way debuggers pop up when errors happen and I can drill down and edit methods and fix bugs while the issue is happening. The language itself appeals to me for its simplicity and ease of understanding. The environment is nicely extensible with the outliner approach and morphic in general.
Things I don't like is how much of the VM is in C++. Having the JIT and assembler, etc in Self would make it easier to hack on the internals. I understand the intent of Klein was to achieve some of this. The transporter approach of exporting changes is a bit fragile - the overhead of managing what goes in what module, will filing in clobber my running application, and issues like that make me dread saving things sometimes. The VM (on Intel) being 32 bit and not multi-core capable is a limitation for me too. Using native code libraries is a bit painful but some of the work in the 'native' branch that Russell has been doing looks very promising.
One reason this topic interests me is that I am watching the immense popularity of Swift, a somewhat different style of PL, and I am even enjoying Swift myself.
I'm a fan of Swift type languages as well. I like being able to use the type system to prevent classes of programmer errors early. Some blend of the Self dynamic environment with a modern type system would be wonderful. I wonder what a "Self with types" could look like.
On 22 Jun 2016, at 10:31 AM, Chris Double chris.double@double.co.nz [self-interest] self-interest@yahoogroups.com wrote: Using native code libraries is a bit painful but some of the work in the 'native' branch that Russell has been doing looks very promising.
I think I have the core primitives for working with native machine code in reasonable shape but have been stalled for a bit on what to do with callbacks into the VM from other threads.
If anyone feels like helping, on the Self side, at the moment I just call out to a c compiler or assembler. It would be nice if there was a pure Self x86 assembler, or even a simple compiler from a C level language (which would help retargeting if we do that later).
I think this approach stands a good chance of being able to move most of the primitives dealing with integration (sockets, xlib etc) into the Self world and out of the C++ code, without requiring the native-code maker to know too much about the VM’s internals.
Russell
On Wed, Jun 22, 2016 at 1:28 PM, Russell Allen mail@russell-allen.com [self-interest] self-interest@yahoogroups.com wrote:
If anyone feels like helping, on the Self side, at the moment I just call out to a c compiler or assembler. It would be nice if there was a pure Self x86 assembler, or even a simple compiler from a C level language (which would help retargeting if we do that later).
Would linking to LLVM be useful? Or is that too heavyweight a dependency? If an LLVM backend was made that would also ease porting to 64 bit. I'm not a big fan of using it since it moves further away from pure Self code.
Klein has an assembler but I think it is Sparc and PowerPC. It might serve as a base to add x86 though.
On 22 Jun 2016, at 11:38 AM, Chris Double chris.double@double.co.nz [self-interest] self-interest@yahoogroups.com wrote:
On Wed, Jun 22, 2016 at 1:28 PM, Russell Allen mail@russell-allen.com mailto:mail@russell-allen.com [self-interest] <self-interest@yahoogroups.com mailto:self-interest@yahoogroups.com> wrote:
If anyone feels like helping, on the Self side, at the moment I just call out to a c compiler or assembler. It would be nice if there was a pure Self x86 assembler, or even a simple compiler from a C level language (which would help retargeting if we do that later).
Would linking to LLVM be useful? Or is that too heavyweight a dependency? If an LLVM backend was made that would also ease porting to 64 bit. I'm not a big fan of using it since it moves further away from pure Self code.
I’m not sure what LLVM gives us. We’re only talking fragments of code, so I doubt we need much optimisation. I suppose it gives us some portability but so does just calling out to a C compiler (in fact that’s more so because we’re not locked into a single compiler)
Klein has an assembler but I think it is Sparc and PowerPC. It might serve as a base to add x86 though.
Interesting. I’ll have a look.
Russell
Dne 22.6.2016 v 03:28 Russell Allen mail@russell-allen.com [self-interest] napsal(a):
If anyone feels like helping, on the Self side, at the moment I just call out to a c compiler or assembler. It would be nice if there was a pure Self x86 assembler, or even a simple compiler from a C level language (which would help retargeting if we do that later).
Isn't Self assembler part of the Klein? I am not sure if it is x86, but if I remember correctly, it was mentioned in the Klein paper that there is assembler and disassembler written in Self.
I think someone else has mentioned that we did a very nice (IMO) assembler and disassember for Klein. I believe it included the x86 architecture. It tested itself against the Unix assembler and found bugs in the Unix assembler for every platform we tried. (SPARC and x86 IIRC).
Great project you are doing!
- David
On Jun 21, 2016, at 6:28 PM, Russell Allen mail@russell-allen.com [self-interest] self-interest@yahoogroups.com wrote:
On 22 Jun 2016, at 10:31 AM, Chris Double chris.double@double.co.nz mailto:chris.double@double.co.nz [self-interest] <self-interest@yahoogroups.com mailto:self-interest@yahoogroups.com> wrote: Using native code libraries is a bit painful but some of the work in the 'native' branch that Russell has been doing looks very promising.
I think I have the core primitives for working with native machine code in reasonable shape but have been stalled for a bit on what to do with callbacks into the VM from other threads.
If anyone feels like helping, on the Self side, at the moment I just call out to a c compiler or assembler. It would be nice if there was a pure Self x86 assembler, or even a simple compiler from a C level language (which would help retargeting if we do that later).
I think this approach stands a good chance of being able to move most of the primitives dealing with integration (sockets, xlib etc) into the Self world and out of the C++ code, without requiring the native-code maker to know too much about the VM’s internals.
Russell
Thanks for your answer. I’ll interleave…
On Jun 21, 2016, at 5:31 PM, Chris Double chris.double@double.co.nz [self-interest] self-interest@yahoogroups.com wrote:
On Wed, Jun 22, 2016 at 4:32 AM, David Ungar ungar@mac.com mailto:ungar@mac.com [self-interest] <self-interest@yahoogroups.com mailto:self-interest@yahoogroups.com> wrote:
I am pleased and amazed at the attention you all lavish on Self. The recent activity has moved me to wonder: What is it about Self that appeals? What is it that you don’t like?
I like the environment where I'm basically living inside the software I'm building, modifying it as I go. Being able to drag/drop an empty object, and start building it up from scratch while viewing attributes of it live, changing as things in the world change. The way debuggers pop up when errors happen and I can drill down and edit methods and fix bugs while the issue is happening.
Yes, swimming in a sea of live objects, everything tangible and real, because any change happens in split-second. I miss it, but it may not be optimal when battery power matters.
The language itself appeals to me for its simplicity and ease of understanding. The environment is nicely extensible with the outliner approach and morphic in general.
Interestingly, I have found people to be divided regarding simplicity. Glad you like that about it. Morphic… IMO Randy Smith deserves more credit than he has received for the basic principles there. John Maloney and Lars Bak did a lot to make it happen.
Things I don't like is how much of the VM is in C++. Having the JIT and assembler, etc in Self would make it easier to hack on the internals.
Amen! Had the project continued, I would have wanted to explore that.
I understand the intent of Klein was to achieve some of this. The transporter approach of exporting changes is a bit fragile - the overhead of managing what goes in what module, will filing in clobber my running application, and issues like that make me dread saving things sometimes.
Thank you. Good to know.
The VM (on Intel) being 32 bit and not multi-core capable is a limitation for me too. Using native code libraries is a bit painful but some of the work in the 'native' branch that Russell has been doing looks very promising.
Yes. When we tried to popularize the work, people rejected Self because it needed a 16MB machine, which was more than most could afford.
One reason this topic interests me is that I am watching the immense popularity of Swift, a somewhat different style of PL, and I am even enjoying Swift myself.
I'm a fan of Swift type languages as well. I like being able to use the type system to prevent classes of programmer errors early. Some blend of the Self dynamic environment with a modern type system would be wonderful. I wonder what a "Self with types" could look like.
Agreed. I haven’t managed to get anyone to pay me to do it, though. And lots of fun to be had doing other things.
Hi David,
2016-06-21 18:32 GMT+02:00 David Ungar ungar@mac.com [self-interest] < self-interest@yahoogroups.com>:
I am pleased and amazed at the attention you all lavish on Self. The recent activity has moved me to wonder: What is it about Self that appeals? What is it that you don’t like?
For me, the appeal of Self is that it presents a singular vision that is well executed and throughly explored. The vision is that of programming through direct manipulation, and it is supported by both the language design and the environment. As a result, programming in Self is engaging, fun, and playful.
The research that came out of Self has been adopted in terms of VM implementation and language design, but the idea that drove that research has, unfortunately, not been as influential. Self, and Smalltalk, remain quite unique in this regard. Though there are many playful environments out there for teaching children how to program, these are more games that are played through programming and not conceived as tools for programmers to actually work with. I can only think of a few other attempts to design a programming language and environment with the goal of realizing an alternate programming experience (e.g., data flow languages, or the work of Jonathan Edwards / alarming development). This unique quality of Self keeps me coming back to it and thinking about it.
What I don't like about Self is that I cannot use it for my job! :)
More specifically, what I do not like about Self is how difficult it is to interact with the world outside of the image. I admit that this is a little unfair as a criticism, since I think those choices were perfectly reasonable at the time and context in which they were made. Still, from the perspective of now, I think they were unfortunate and make Self unsuitable for many projects today (at least for me).
Since you brought up Swift, I also wanted to add a few thoughts about language design today. Today, I think the programming language itself has diminished in importance and been eclipsed by the libraries and frameworks available in the language. On recent projects where I had free choice of programming language, I chose python and Scala, not because I'm particularly enamored of those languages, but because I wanted to use pandas/numpy and Spark, respectively. And not only can libraries compel language choice, libraries can also save languages from their weaknesses, as illustrated by the examples of d3js and React in JavaScript.
You see this dynamic at work as an influence in the design of new languages. Languages like Rust, Scala, and Swift all make it a priority to interoperate with and leverage existing vibrant ecosystems. It is a compromise (Faustian bargain?) that places some restrictions on design of the language, but gives them a shot at widespread adoption in return.
Hope you are doing well!
Sekhar
Hi Sekhar,
Nice to hear from you, and thanks for your answer. Interleaving...
On Jun 22, 2016, at 3:03 AM, Chandrasekhar Ramakrishnan cramakrishnan@acm.org [self-interest] self-interest@yahoogroups.com wrote:
Hi David,
2016-06-21 18:32 GMT+02:00 David Ungar ungar@mac.com mailto:ungar@mac.com [self-interest] <self-interest@yahoogroups.com mailto:self-interest@yahoogroups.com>: I am pleased and amazed at the attention you all lavish on Self. The recent activity has moved me to wonder: What is it about Self that appeals? What is it that you don’t like?
For me, the appeal of Self is that it presents a singular vision that is well executed and throughly explored. The vision is that of programming through direct manipulation, and it is supported by both the language design and the environment. As a result, programming in Self is engaging, fun, and playful.
I’m grinning! Yes that was what we were after. Thanks for understanding.
The research that came out of Self has been adopted in terms of VM implementation and language design, but the idea that drove that research has, unfortunately, not been as influential. Self, and Smalltalk, remain quite unique in this regard. Though there are many playful environments out there for teaching children how to program, these are more games that are played through programming and not conceived as tools for programmers to actually work with. I can only think of a few other attempts to design a programming language and environment with the goal of realizing an alternate programming experience (e.g., data flow languages, or the work of Jonathan Edwards / alarming development). This unique quality of Self keeps me coming back to it and thinking about it.
Sigh, yes, exactly.
What I don't like about Self is that I cannot use it for my job! :)
Ha ha! Me, neither.
More specifically, what I do not like about Self is how difficult it is to interact with the world outside of the image. I admit that this is a little unfair as a criticism, since I think those choices were perfectly reasonable at the time and context in which they were made. Still, from the perspective of now, I think they were unfortunate and make Self unsuitable for many projects today (at least for me).
Yes, true. I have also been thinking about the tradeoff between dynamism and battery usage.
Since you brought up Swift, I also wanted to add a few thoughts about language design today. Today, I think the programming language itself has diminished in importance and been eclipsed by the libraries and frameworks available in the language. On recent projects where I had free choice of programming language, I chose python and Scala, not because I'm particularly enamored of those languages, but because I wanted to use pandas/numpy and Spark, respectively. And not only can libraries compel language choice, libraries can also save languages from their weaknesses, as illustrated by the examples of d3js and React in JavaScript.
You see this dynamic at work as an influence in the design of new languages. Languages like Rust, Scala, and Swift all make it a priority to interoperate with and leverage existing vibrant ecosystems. It is a compromise (Faustian bargain?) that places some restrictions on design of the language, but gives them a shot at widespread adoption in return.
Good point. I’m also fascinated by the culture of software creators, and how that changes through the decades. There is an interesting interplay between platonic ideas and the real world of hardware technology. (These thoughts are nothing new, of course.)
Hope you are doing well!
Thank you. Same to you! Yes, I am doing well. Life is good, including work.
Best regards,
- David
Sekhar
-- C. Ramakrishnan cramakrishnan@acm.org mailto:cramakrishnan@acm.org
Self looks to me like Smalltalk done right. I grew up with prototypes not classes, and I find Smalltalk hard going for that reason.
I just re-watched Alan Kay's famous talk "The Computer Revolution Hasn't Happened Yet", and it sounds to me like a very good argument against classes, although I doubt that he meant it to be!
Jason
On 22 Jun 2016, at 2:32, David Ungar ungar@mac.com [self-interest] wrote:
I am pleased and amazed at the attention you all lavish on Self. The recent activity has moved me to wonder: What is it about Self that appeals? What is it that you don’t like?
I mean to ask about the language, environment, and implementation, not about the mailing list, web site, or even documentation.
I wrote:
I just re-watched Alan Kay's famous talk "The Computer Revolution Hasn't Happened Yet", and it sounds to me like a very good argument against classes, although I doubt that he meant it to be!
And I've just noticed that Alan Kay has recently (this week!) said:
I liked Self. "Good OOP" is still waiting for a much better notion to replace the idea of a "Class"
https://news.ycombinator.com/item?id=11939851
Jason
So we have prototypes (self & JavaScript) and classes (sometimes added to JavaScript).
Is there another way?
S.
On Sat, 25 Jun 2016 at 04:23, 'Jason Grossman' spam-me@xeny.net [self-interest] self-interest@yahoogroups.com wrote:
I wrote:
I just re-watched Alan Kay's famous talk "The Computer Revolution Hasn't Happened Yet", and it sounds to me like a very good argument against classes, although I doubt that he meant it to be!
And I've just noticed that Alan Kay has recently (this week!) said:
I liked Self. "Good OOP" is still waiting for a much better notion to replace the idea of a "Class"
https://news.ycombinator.com/item?id=11939851
Jason
A third way of looking at objects, which I rather like, is the lambda-based perspective:
http://erights.org/elib/capability/ode/ode-objects.html
The last paragraph quotes Dr. Alan Kay…
----------=-=-=-=-=-=-=-=-========oOo========-=-=-=-=-=-=-=-=---------- mailto:Ronald.P.Welch@baesystems.com Phone:(607)206-8718 BAE SYSTEMS 1701 North Street, Endicott, NY 13760 ----------=-=-=-=-=-=-=-=-===================-=-=-=-=-=-=-=-=----------
On Jun 25, 2016, at 5:39 AM, Stephen De Gabrielle spdegabrielle@gmail.commailto:spdegabrielle@gmail.com [self-interest] wrote:
*** WARNING *** EXTERNAL EMAIL -- This message originates from outside our organization.
So we have prototypes (self & JavaScript) and classes (sometimes added to JavaScript).
Is there another way?
S.
On Sat, 25 Jun 2016 at 04:23, 'Jason Grossman' spam-me@xeny.netmailto:spam-me@xeny.net [self-interest] <self-interest@yahoogroups.commailto:self-interest@yahoogroups.com> wrote:
I wrote:
I just re-watched Alan Kay's famous talk "The Computer Revolution Hasn't Happened Yet", and it sounds to me like a very good argument against classes, although I doubt that he meant it to be!
And I've just noticed that Alan Kay has recently (this week!) said:
I liked Self. "Good OOP" is still waiting for a much better notion to replace the idea of a "Class"
https://news.ycombinator.com/item?id=11939851
Jason
-- Kind regards, Stephen -- Bigger than Scheme, cooler than Clojure & more fun than CL.(n=1) --
Thanks. Nice! That link is now on my reading list.
On Jun 24, 2016, at 8:23 PM, 'Jason Grossman' spam-me@xeny.net [self-interest] self-interest@yahoogroups.com wrote:
I wrote:
I just re-watched Alan Kay's famous talk "The Computer Revolution Hasn't Happened Yet", and it sounds to me like a very good argument against classes, although I doubt that he meant it to be!
And I've just noticed that Alan Kay has recently (this week!) said:
I liked Self. "Good OOP" is still waiting for a much better notion to replace the idea of a "Class"
https://news.ycombinator.com/item?id=11939851 https://news.ycombinator.com/item?id=11939851
Jason
Thank you for thinking about this. See below…
On Jun 24, 2016, at 7:00 PM, 'Jason Grossman' spam-me@xeny.net [self-interest] self-interest@yahoogroups.com wrote:
Self looks to me like Smalltalk done right. I grew up with prototypes not classes, and I find Smalltalk hard going for that reason.
That was the goal when Randy & I designed Self, getting to the essence of Smalltalk...
I just re-watched Alan Kay's famous talk "The Computer Revolution Hasn't Happened Yet", and it sounds to me like a very good argument against classes, although I doubt that he meant it to be!
I really ought to watch that sometime. Alan Kay is amazing.
Jason
On 22 Jun 2016, at 2:32, David Ungar ungar@mac.com mailto:ungar@mac.com [self-interest] wrote:
I am pleased and amazed at the attention you all lavish on Self. The recent activity has moved me to wonder: What is it about Self that appeals? What is it that you don’t like?
I mean to ask about the language, environment, and implementation, not about the mailing list, web site, or even documentation.
On 6/21/2016 9:32 AM, David Ungar ungar@mac.com [self-interest] wrote:
I am pleased and amazed at the attention you all lavish on Self. The recent activity has moved me to wonder: What is it about Self that appeals? What is it that you don’t like?
I mean to ask about the language, environment, and implementation, not about the mailing list, web site, or even documentation.
One reason this topic interests me is that I am watching the immense popularity of Swift, a somewhat different style of PL, and I am even enjoying Swift myself.
Thanks in advance,
Glad to see the activity here. Nice job poking the list, Bystroushaak.
Really well done.
Hi David,
What appeals:
1. It was (co)created by one of the wisest, and kindest souls I have ever met. (I suspect that such facts are relevant, whether or not they seem to be ;-)
2. I just love the experience of re-learning fundamental thoughts.
Like delegation vs inheritance. Delegation. I dnu - so I hand off, to someone else. True delegation. Hand off, but callee implicitly retains identity of caller. Hmm - ok, yes, very nice. Versus regular inheritance -- obvious, from the hierarchy, above, after searching the one, the only, path. Related concepts, but completely different.
Oh for -- no. Inheritance? That's just eunics doing headstands while delegating. Search, yes, but along paths selected from an unbounded set of possibilities. Its all delegation.
Ka-blam! Head explodes, like a balloon. I love that feeling.
Ok, but then, how is it organized? What does it look like?
Browser opens. Click.... pause. Click... pause. Click... pause. See?
Wait a minute. I swear to god it looks identical. How can that...
DOH! Ka-blam! And another hour picking up shards.
I love that feeling.
Works in reverse, too.
Case in point -
We were hot on the trail of "selector namespaces". 'Cuz they're IT. Exactly what you'd want. Extension on demand, completely isolated.
Meanwhile, I'm reading papers. Next one on the stack? Us.. Not weekly. Just Us. Hey, you know what this is? I think to myself. I can't wait. ... I finish the paper, and toss it back on the table. Another balloon pops - a different sort of balloon. Shite. It doesn't work. Well, that's depressing.
DOH! But now I *know* it doesn't work. And I know why.
I just love that feeling.
So, while not precisely what you asked for, perhaps within the "cosmic background" of appeal..
3. Hmm, tap, tap, tap. What appeals?
Ok, slots. First of all - nice name, simple, concise. Second - Its a method. Its a variable. Its a read barrier. Its a search path. Wow. That's all. Design at its finest.
What I don't like:
1. I know ego-less programming is all the rage, but I'm not so sure.
Eliding of 'self' is not, ah, yeah - I just don't see what its about. The sort of problem that, barring singularity, takes care of itself soon enough. Double plus good, if you ask me.
2. The resolution of name collisions is, um, Horrible. There, I said it. Worst solution ever. Except for all the others.
We could yak about it, I'm sure you have a better solution. Me too.
And now for something completely different.
What are you finding about Swift that appeals?
(Yeah, a bit off topic. Offline's good, too, if inclined.)
-Jim
- David
Posted by: David Ungar ungar@mac.com
Yahoo Groups Links
This is all highly subjective and maybe even wrong. I am still learning the Self, so there is strong possibility that I am missing something and don't see the whole picture.
I will begin with what I don't like:
1. Missing cascading operator.
I've seen reasoning why it is not there and I am aware, that you may live without it, and also that ; is now used for other things, but it really feels like it should be there. I mean - in my mind, it is such a wonderful simple solution which saves you repetition of code, nicely abstracted pattern. For me, it is what makes Smalltalk's syntax different, not in some weird sense, but in clever way.
2. No „VM checkpoints“
I am not yet proficient with Self. I've began learning it in October 2015, and since then, I've killed my VM countless times.
For example, if you try the Morphic lesson from the Handbook and then make typo (save a method with wrong name, or something like that), you'll get debugger and the whole environment freezes. Then you must hope, that you will find the bug in the debugger, which may be really hard (remember, you are beginner and you don't know Morphic and this is probably your first time in debugger). Chances are, that you will do "pkill -9 Self" and start again rather than trying to find the bug.
I know, that this is not really Self's problem, but for beginners, loosing a work can be frustrating and saving whole image after each operation manually is also painful.
It would be really useful, if there were ability to "roll back" your last changes in way how „undo“ in text editors works. Some user friendly disaster recovery protocol. I know, that there is debugger, and also process manager in console, but both is not much useful to beginners.
I think that there is several possible ways how to do this.
I. Periodical (and maybe partial, diff only) snapshots at the background and then allow user to navigate and choose which one of them he would like to use.
II. Remember all changes user did (patch Morphic to remember what was changed by user - updates in method code, inheritance and so on) and then allow to return back in this „change trail“.
III. The way some smalltalk environments do it - remember all user steps, log them separately and then after crash, allow user to repeat them and get to the point right before crash.
3. Mouse oriented environment
I know that when Self began, mouse was probably not that much common and it may seem like wonderful solution to all problems, but for me as a programmer, it is almost too much. Mouse is what slows me down. This is not that much issue in „Self as an experiment and exploration environment“ scenario, but in „Self as language where people actually routinely create big applications“ scenario, it may be a problem.
This is easily solvable by changing the environment to allow keyboard shortcuts for all kind of manipulations which is now done by mouse.
4. Inheritance and outliners
Sometimes it may be a hard to get an idea about what is in the object's namespace. You have to open a lot of outliners to see all inherited slots. I think I will try to write a tool, which will show all inherited slots in one view, maybe inside on top of the outliner.
I know, it goes against the idea of concrete objects, but I think it would save a lot of time.
Now what I like:
1. Minimalist approach
I like how the language is small. This feels right. I think it is better when the language core is just small „seed“ and everything else blooms from this core.
2. Direct manipulation of objects
This is why I decided to learn Self. I've seen this in Smalltalk, but I think that Self brings this to another levels. There is several reasons why I need this and I will get to them later (in other posts in following months).
3. Speed.
I would never thought that language like Self could be so efficient. I am truly amazed with how it was done.
4. Image based development
I am tired of „persistence“ solutions in other languages. I've played with SQL, noSQL, ORM mappings and object databases, but image is the best. I know that there are some disadvantages, but I like it anyway.
Dne 21.6.2016 v 18:32 David Ungar ungar@mac.com [self-interest] napsal(a):
I am pleased and amazed at the attention you all lavish on Self. The recent activity has moved me to wonder: What is it about Self that appeals? What is it that you don’t like?
I mean to ask about the language, environment, and implementation, not about the mailing list, web site, or even documentation.
One reason this topic interests me is that I am watching the immense popularity of Swift, a somewhat different style of PL, and I am even enjoying Swift myself.
Thanks in advance,
- David
Hey Bystroushaak,
Actually I think your criticisms here are pretty good.
On 27 Jun 2016, at 2:48 AM, Bystroushaak bystrousak@kitakitsune.org [self-interest] self-interest@yahoogroups.com wrote:
- Missing cascading operator.
This is definitely an annoying niggle for me. It’s something I’d like to see in Self but would require delving into the VM to fix it, or redoing the parser in Self, either of which is an effort out of proportion to the problem at the moment :)
As an aside, I would implement it the way Tim Budd’s Little Smalltalk did, not Smalltalk-80’s cascade which I find broken. i.e.
a b: c D: e; f: g = (a b: c D: e) f: g
not
a b: c D: e; f: g = a b: c D: e. a f: g
- No „VM checkpoints“
I’d add one more way of doing this: make the snapshot format an actual database (Sqlite’s the easiest) holding multiple checkpoints. This also gives us some nice storage ideas for objects we want to be persistent but which don’t need to be in memory all the time (like my MP3 collection)
- Mouse oriented environment
I don’t mind this so much but making key bindings for the common outliner operations shouldn’t be too hard. The immediate problem I would think is the you would have to introduce the idea of which outliner is ‘in focus’ for the keyboard.
- Inheritance and outliners
Assuming you’re in a recently built image, open a shell and do this:
preferences outliner kevooidal: true
:)
(This code is old, but putting a helper method in preferences outliner is new)
Russell
Dne 27.6.2016 v 01:41 Russell Allen mail@russell-allen.com [self-interest] napsal(a):
Hey Bystroushaak,
- No „VM checkpoints“
I’d add one more way of doing this: make the snapshot format an actual database (Sqlite’s the easiest) holding multiple checkpoints. This also gives us some nice storage ideas for objects we want to be persistent but which don’t need to be in memory all the time (like my MP3 collection)
This is one example, where I think the wiki would be better for collaboration, than discussion.
- Inheritance and outliners
Assuming you’re in a recently built image, open a shell and do this:
preferences outliner kevooidal: true
:)
(This code is old, but putting a helper method in preferences outliner is new)
Thanks. This actually really helps.
On Tue, Jun 21, 2016 at 9:32 PM, David Ungar ungar@mac.com [self-interest] self-interest@yahoogroups.com wrote:
What is it that you don’t like?
As others have noted, it's hard to follow the virtual machine's sources. It's also a little annoying getting the fonts to work properly on Linux.
I wonder how much work it'll be to write something for Self like Bert Freudenberg's SqueakJS. Paired with Electron (node.js and a WebKit extension), it might be relatively speedy, and certainly easier to run on platforms like arm or 64-bit Intel.
Faried.
self-interest@lists.selflanguage.org