Since becoming re-interested in Smalltalk (after 20 years) a few days ago, I keep running across references to "closures", "block closures", and "block closures in modern Smalltalk". Can anyone point me to information explaining these terms/issues?
Also, for years in the 80s and early 90s, any references I read regarding Smalltalk stated that it was too inefficient and not useful for practical applications. I once flew to Los Angeles where I had an appointment to evaluate a Xerox Dolphin workstation running Smalltalk. This was about 1983, and I believe the Dolphin was priced at upwards of $100,00.00. I requested a small example of Smalltalk programming. The representative was tentative about what sort of example to show me, so I said, "How about a simple loop that prints numbers from 1 to 1000." So a loop was written and executed. It never got to 1000, it was TOO SLOW! That about cinched it for me.
I also studied the Smalltalk implementation details published at that time (Addisson-Wesley whatever), actually I got pre-publication editions of the book for some reason. I found it fascinating but felt there were to many layers to the message processing (inheritance hierarchy), for the system to perform efficiently enough. The other thing that always bugged me was the "image". It all seemed so tightly coupled, I couldn't figure out how you would "share programs" or separate out "data files."
I'm sure this is all ancient history to those on the list. These issues have long been debated and put to rest, but it is amusing reading about "how modules should work" after all this time. My first impression about the image file was apparently on target, since it is still biting your ass after all these years.
Anyway, all this aside, I ran Croquet today, which kept crashing. Apparently the network collaboration connection software isn't working for Windows yet. But I was able to run all the built in "toys", that are from Squeak. So I did an experiment. I ran everything I could in the Morphic world, all at once. Spinning 3D block, ant hill, termites, chess, crawling blob, music synthesizer, clock, and mp3 player playing a symphony. It all worked amazingly. No crashing, skipping, wobbling. The frame rate dropped to 50 ms, but everything continued to work impressively. I let it run for hours.
I was mightily moved.
I have also done the basic programming tutorials. The first tutorial I did I think locked up my image. The tutorial said "pick any category, like Kernel-Object" for example. So I did but when I wrote "Hello World" my image went into never never land.
But then I did the banking tutorial, and the animation, and it worked great. So easy. And then in the animation tutorial I was reprogramming the object, during its execution. Mind blowing.
I have been researching software systems and languages during the last year, looking for the right platform to build a "really" user friendly and "personal" software environment for naïve computer users (most people). I have looked at Forth, Plan9, Inferno, Java, Python, the Unices (I have programmed in C and Unix for 20 years), and pulling my hair out trying to find a starting point for something portable, reliable, and "doable." The nasty complexities of trying to find a reasonable starting place, or platform have been overwhelming. But now with Squeek I think I may have finally stumbled onto it.
Squeak feels like what I was hoping Forth and Smalltalk would be 20 years ago. When I got a Mac (pre-ordered before they were on the street), I was dissappointed when it did not even do multi- tasking. I was already programming for Unix, so I could not comprehend a multi-window system, that did not multi-task, what's the point? More ancient history...
I've been waiting for the computer industry to grow up for 25 years, and we are still using hand crank starters, spark advance knobs on the steering wheel, manual chokes, and we have to wear driving gloves, goggles, and helmets before we step on the gas.
Now I'm getting too old, I can't wait any more. Something has got to be done!!!!
So we'll see if I can commit to Squeak and get serious with it...
Thanks, Shane
Hi Shane and all!
Just wanted to chip in a few remarks here and there.
shane@shaneroberts.com wrote:
Since becoming re-interested in Smalltalk (after 20 years) a few days ago, I keep running across references to "closures", "block closures", and "block closures in modern Smalltalk". Can anyone point me to information explaining these terms/issues?
Someone else will have to do that, I don't have any handy - and honestly I don't know much about closures and continuations anyway...
Note that today we don't have proper closures in Squeak - at least not in the current official release. Anthony Hannan has implemented it though and it will appear soon. For anyone impatient enough there are special Anthony-images/VMs etc to download, check the Swiki for more info.
Also, for years in the 80s and early 90s, any references I read regarding Smalltalk stated that it was too inefficient and not useful for practical applications. I once flew to Los Angeles where I had
This has been false for at least 9 years :-) - I started using VW around 1994 to build "real" applications and it was really good/fast/other nice superlatives.
an appointment to evaluate a Xerox Dolphin workstation running Smalltalk. This was about 1983, and I believe the Dolphin was priced at upwards of $100,00.00. I requested a small example of Smalltalk programming. The representative was tentative about what sort of example to show me, so I said, "How about a simple loop that prints numbers from 1 to 1000." So a loop was written and executed. It never got to 1000, it was TOO SLOW! That about cinched it for me.
Heh, funny enough that snippet probably used the Transcript which in turn needs to manage a buffer of contents and to scroll the output, which in turn exercises the BitBlt of the Smalltalk in question and the primitives for updating the display (damage recording etc) etc. In short - Transcript is really dumb and slow and you have no buffering at all.
Time millisecondsToRun: [ 1 to: 100 do: [:i | Transcript show: i printString; cr] ]
With a medium sized partially covered Transcript window this took 5 seconds on my laptop! Whua! But wait...
Time millisecondsToRun: [ Transcript show: (String streamContents: [:stream | 1 to: 100 do: [:i | stream nextPutAll: i printString; cr]]) ]
This version that produces the same end result takes 89 milliseconds to run. And if we remove the printing on Transcript it takes about 2-5 milliseconds. Lesson to learn? Always profile. Transcript simply sucks. Don't do benchmarks that prints on Transcript without taking that into account.
I also studied the Smalltalk implementation details published at that time (Addisson-Wesley whatever), actually I got pre-publication editions of the book for some reason. I found it fascinating but felt there were to many layers to the message processing (inheritance hierarchy), for the system to perform efficiently enough. The other thing that always bugged me was the "image". It all seemed so tightly coupled, I couldn't figure out how you would "share programs" or separate out "data files."
I'm sure this is all ancient history to those on the list. These issues have long been debated and put to rest, but it is amusing reading about "how modules should work" after all this time. My first impression about the image file was apparently on target, since it is still biting your ass after all these years.
Well, the image is in fact simply wonderful - a world of objects that interact with each other with full dynamics. But of course the freedom and dynamics of an image makes modules etc much more complicated. But as a Smalltalker I would never give up the image just to get "nice modules".
It would be like moving from a large very nicely planned 10-room villa to live in 10 small 1-room cottages just because the carpenter couldn't figure out how to build walls...
I say - we just need to figure out some more about wall-building. I will never give up my villa.
Anyway, all this aside, I ran Croquet today, which kept crashing. Apparently the network collaboration connection software isn't working for Windows yet. But I was able to run all the built in
Well, my impression is that Croquet is highly dependent on what kind of graphics hardware/drivers you have. My laptop kept crashing it (weird graphics card or simply bad opengl driver - don't know) but other hardware has been running the exact same version almost flawlessly.
"toys", that are from Squeak. So I did an experiment. I ran everything I could in the Morphic world, all at once. Spinning 3D block, ant hill, termites, chess, crawling blob, music synthesizer, clock, and mp3 player playing a symphony. It all worked amazingly. No crashing, skipping, wobbling. The frame rate dropped to 50 ms, but everything continued to work impressively. I let it run for hours.
I was mightily moved.
I have also done the basic programming tutorials. The first tutorial I did I think locked up my image. The tutorial said "pick any category, like Kernel-Object" for example. So I did but when I wrote "Hello World" my image went into never never land.
Well, probably just looping - try "Alt-." which is the equivalent of ctrl-c.
[SNIP]
So we'll see if I can commit to Squeak and get serious with it...
Please do - you will not be disappointed.
regards, Göran
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Am Montag, 3. Februar 2003 13:28 schrieb goran.hultgren@bluefish.se:
Well, the image is in fact simply wonderful - a world of objects that interact with each other with full dynamics. But of course the freedom and dynamics of an image makes modules etc much more complicated. But as a Smalltalker I would never give up the image just to get "nice modules".
Hey Göran, how about self which joins code and image into the same thing. To be honest I like the idea of self that the separation of classes and objects is unnecessary, and I love the slot concept too, which draws no difference between function calls and accesses to instance variables.
I think modules should contain objects too. When you draw no difference between image and code, you need no gui-builder, cos you can simplystick together some widgets to a gui and then save it somewhere in the snapshot, and when code needs the gui, it simply loads the gui, without constructing it widget by widget. And when modules contain objects anyway -- why would we bother to separate code and object space?
regards,
nick - -- Give thought to your reputation. Consider changing name and moving to a new town.
Hi all!
Niko Schwarz niko.schwarz@gmx.net wrote:
Am Montag, 3. Februar 2003 13:28 schrieb goran.hultgren@bluefish.se:
Well, the image is in fact simply wonderful - a world of objects that interact with each other with full dynamics. But of course the freedom and dynamics of an image makes modules etc much more complicated. But as a Smalltalker I would never give up the image just to get "nice modules".
Hey Göran, how about self which joins code and image into the same thing. To be honest I like the idea of self that the separation of classes and objects is unnecessary, and I love the slot concept too, which draws no difference between function calls and accesses to instance variables.
I agree - both these aspects of Self are intriguing. I haven't worked in self so I can't say anything from personal experience.
I think modules should contain objects too. When you draw no difference between image and code, you need no gui-builder, cos you can simplystick together some widgets to a gui and then save it somewhere in the snapshot, and when code needs the gui, it simply loads the gui, without constructing it widget by widget. And when modules contain objects anyway -- why would we bother to separate code and object space?
Well, personally I think it comes down to a matter of how we want to think about our software artefacts. Even if Self proved that "Hey, classes are unnecessary" I don't think we would construct better and clearer software if we simply started mixing behaviour and data "as we please" and forgot about classes. I bet that Self programs *have* classes, they are just not called that.
The idea of building UIs "by hand" and then simply keeping the instances around has been tried several times and AFAIK it has been shown to have its own problems. One issue is that object structures can be quite big and complex and when you develop code that builds them it can be very easy to simply change a line and then affect the complete structure. If there was no code to change then you would need to try to change the structure "in place" instead of simply rebuilding it from scratch.
Another issue is that the objects you use in your UI may have changed (new version of the UI toolkit for example) and you need to evolve your code to fit with the new toolkit - not very easy to do either.
But anyway - the issue of focusing on "objects" instead of "source code" in the modularization effort has been discussed a lot on this list previously. IMHO I think that "simplifying" the question by saying that - hey, if we instead base the modules model on objects then "the rest will follow" simply is an oversimplification.
Anthony has been pushing this idea earlier (I think) and I don't claim to know the truth or have more knowledge than he has (I certainly don't) but I still think it is an "oversimplification".
To try one more silly analogy (I know it is limping but perhaps my point can be understood anyway):
We all know "everything" in the image are objects, much like molecules are in real life. Now, let's pretend that the image is the human body and that the different modules are the organs - the heart, brain, lungs, limbs etc.
If I told a surgeon that "Hey, if you just figure out how to keep track of the dependencies between the molecules in the body - then you will as, a sideeffect, have solved the problem of knowing the dependencies between the organs!".
I think the surgeoun would laugh at me. He would say that, "It's a bit more complex than that. You can't just figure out how the organs interact by looking how the molecules connect to each other. For example, the heart pumps blood out into the other organs. So all other organs are dependent on the heart. But many of the organs aren't even touching the heart are they?"
Whatever - I will stop my silly analogy here. ;-) Two small facts I stand by:
1. Smalltalk code is our way of capturing the dynamics of the image in a declarative way. We need declarative descriptions of our systems to be able to think about them - it's just the way we work as humans. At least until we can plug the computer directly into our brains. Simply dragging and drooling will not cut it (instance based programming á la Parts or whatever).
2. The dependencies in Smalltalk code are hard to capture and describe. It is not impossible but do not underestimate the problem. People who have tried like Joseph Pelrine and Henrik Gedenryd (two different approaches) can surely tell us more about the complexities involved. I also guess that Allen Wirfs-brock can tell us more about what is involved too. No pressure intended. ;-)
regards, Göran
I am using my university acct to gateway, and it is a linux cluster so of course the names of the machines do not mean much ... HTF do I post to the list ?
E.
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Am Montag, 3. Februar 2003 14:16 schrieb goran.hultgren@bluefish.se:
I agree - both these aspects of Self are intriguing. I haven't worked in self so I can't say anything from personal experience.
Neither have I, unfortunately, but I found the idea very tempting.
I bet that Self programs *have* classes, they are just not called that.
They have traits, and behaviour. If I understood it all correctly, the logic is this: When I want a car, why would I search for a concept for a car (the class) rather than for a car itself? So, what selfers do is write a proto-car, a fully blown car ready to rock, which you then copy if you want your "instances". objects inherit from one another (multiple ways, too. it complains when there would be two functions of that name), and it elegantly solves issues like globals: you simply inherit them from the Behaviour object, same as you find the other prototypes: they are in a tree which you can inherit, if you want it.
The idea of building UIs "by hand" and then simply keeping the instances around has been tried several times and AFAIK it has been shown to have its own problems.
[short description]
Yes, that sounds convincing. Another way would be to create a grammar that describes how the objects are organized. That would as well simplify the process of creating a UI-builder. Please don't take me too serious, I'm just thinking aloud: I suppose it is simpler to write a ui-builder that stores its information in a description format, rather than producing smalltalk code that builds this ui. (like: ud teach every morph to print itself into an xml-tag). With this approach, too, you would have an abstract ui description, which would be nice to store in the snapshot, and in your module, when you ship it.
But anyway - the issue of focusing on "objects" instead of "source code" in the modularization effort has been discussed a lot on this list previously. IMHO I think that "simplifying" the question by saying that
- hey, if we instead base the modules model on objects then "the rest
will follow" simply is an oversimplification.
I guess. But pushing whole squeak more in this direction, not just modules, might be a useful approach. Maybe we two should take a better look at self and if this whole stuff really simplifies work, there =)
We all know "everything" in the image are objects, much like molecules are in real life. Now, let's pretend that the image is the human body and that the different modules are the organs - the heart, brain, lungs, limbs etc.
If I told a surgeon that "Hey, if you just figure out how to keep track of the dependencies between the molecules in the body - then you will as, a sideeffect, have solved the problem of knowing the dependencies between the organs!".
=) Nice analogy. But I understand self much simpler. It doesnt claim that it can tell you the dependencies better, it just wants to say that splitting the body into two separate parts: organ-color and organ-form, you will not simplify the process of understanding. better would be to watch at the organs in both their aspects all the time: color and structure.
regards,
nick
- -- Your home electrical system is basically a bunch of wires that bring electricity into your home and take if back out before it has a chance to kill you. This is called a "circuit". The most common home electrical problem is when the circuit is broken by a "circuit breaker"; this causes the electricity to back up in one of the wires until it bursts out of an outlet in the form of sparks, which can damage your carpet. The best way to avoid broken circuits is to change your fuses regularly. Another common problem is that the lights flicker. This sometimes means that your electrical system is inadequate, but more often it means that your home is possessed by demons, in which case you'll need to get a caulking gun and some caulking. If you're not sure whether your house is possessed, see "The Amityville Horror", a fine documentary film based on an actual book. Or call in a licensed electrician, who is trained to spot the signs of demonic possession, such as blood coming down the stairs, enormous cats on the dinette table, etc. -- Dave Barry, "The Taming of the Screw"
Hi!
Niko Schwarz niko.schwarz@gmx.net wrote:
Am Montag, 3. Februar 2003 14:16 schrieb goran.hultgren@bluefish.se:
I agree - both these aspects of Self are intriguing. I haven't worked in self so I can't say anything from personal experience.
Neither have I, unfortunately, but I found the idea very tempting.
Me too, but more from the perspective of simplification than for "making cool solutions nobody groks". :-)
I bet that Self programs *have* classes, they are just not called that.
They have traits, and behaviour. If I understood it all correctly, the logic is this: When I want a car, why would I search for a concept for a car (the class) rather than for a car itself? So, what selfers do is write a proto-car, a fully blown car ready to rock, which you then copy if you want your "instances". objects inherit from one another (multiple ways, too. it complains when there would be two functions of that name), and it elegantly solves issues like globals: you simply inherit them from the Behaviour object, same as you find the other prototypes: they are in a tree which you can inherit, if you want it.
Yes, I have read about Self so this is in line with my limited knowledge. You instantiate by "cloning" and you do inheritance by delegation. But as you say there are so called "Behaviour objects" etc. - in my ears this is still mimicking classes in some way.
In short - as a programmer I need to describe "types" and associate behaviour with those types of objects. We can do this using many different mechanisms (Traits, Self delegation, class inheritance etc) but in the end we are still expressing the same thing - we are describing objects with different sets of behaviours.
So in the end I assume Self has similar problems with modularization as all the other OO languages, especially the dynamically typed ones. So dropping classes is no silver bullet. I assume.
The idea of building UIs "by hand" and then simply keeping the instances around has been tried several times and AFAIK it has been shown to have its own problems.
[short description]
Yes, that sounds convincing. Another way would be to create a grammar that describes how the objects are organized. That would as well simplify the process of creating a UI-builder.
This has also been tested a lot. The GNOME people use XML (as do many others), check out Glade for example. In the Smalltalk world VW has been doing this as long as I can remember (Window specs that are Arrays of literals) and the StableSqueak effort (that sortof died or froze) had stuff doing this using XML in Squeak. See my article about that:
http://anakin.bluefish.se:8000/sqworld
IMHO this is a very good way of doing UIs. Personally I like either coding them by hand (total power, much easier to make components and debug) or by using some form of declarative description and a builder as they did it in StableSqueak/Glade etc.
Please don't take me too serious, I'm just thinking aloud:
That is ok! :-)
I suppose it is simpler to write a ui-builder that stores its information in a description format, rather than producing smalltalk code that builds this ui. (like: ud teach every morph to print itself into an xml-tag).
IIRC Michael Rueger has provided this capability earlier and did demo it at OOPSLA 2001 I think. In essence all Morphs could represent themselves as XML so you could construct your Morph by hand and then simply take a snapshot of it in XML which a Builder then could use to reconstruct it. Pretty nifty, don't know what happened to that code.
So I don't think either way is "simpler" than the other. There are UI builders for Squeak btw, check the Swiki. Don't know their status though.
With this approach, too, you would have an abstract ui description, which would be nice to store in the snapshot, and in your module, when you ship it.
Right.
But anyway - the issue of focusing on "objects" instead of "source code" in the modularization effort has been discussed a lot on this list previously. IMHO I think that "simplifying" the question by saying that
- hey, if we instead base the modules model on objects then "the rest
will follow" simply is an oversimplification.
I guess. But pushing whole squeak more in this direction, not just modules, might be a useful approach.
Yes, and there are efforts in this direction too. Stephen Pair has been doing intriguing stuff enabling Self-like delegation in Squeak and more importantly (IMHO) has some really cool technology for doing remote object memories. That last part can really change a lot in the Squeak world...
Maybe we two should take a better look at self and if this whole stuff really simplifies work, there =)
I am not sure there are enough experience in the Self world to draw from. I mean - what should we look at? Perhaps I have missed something but to me Self has always seemed a bit "academic". I haven't seen any major "day to day" work being done in it. But I may be totally wrong of course.
We all know "everything" in the image are objects, much like molecules are in real life. Now, let's pretend that the image is the human body and that the different modules are the organs - the heart, brain, lungs, limbs etc.
If I told a surgeon that "Hey, if you just figure out how to keep track of the dependencies between the molecules in the body - then you will as, a sideeffect, have solved the problem of knowing the dependencies between the organs!".
=) Nice analogy. But I understand self much simpler. It doesnt claim that it can tell you the dependencies better, it just wants to say that splitting the body into two separate parts: organ-color and organ-form, you will not simplify the process of understanding. better would be to watch at the organs in both their aspects all the time: color and structure.
Well, to me it seems Self instead wants to generalize stuff even more than Smalltalk does. Sure, fine by me - generalization is cool. That is after all one of the powers of Smalltalk - you know: five reserved words, everything is an object, almost everything is a message send etc. etc.
But I can't see how the aspects of Self (compared to Smalltalk) would help us in the field of Modules. But hey - I have been known to be wrong. :-)
I like the way we approach the problem now. We do it step-by-step. First we created a simple package registration mechanism (SqueakMap). Then Ned created the SAR-format and Avi created DVS. The next logical steps are enhancing SqueakMap with information about releases enabling us to record dependencies between packages and evolving DVS into Monticello for team development. When that is in place the final step is to try to automate dependency detection and install/uninstallation to satisfy the dependencies. These two things are HARD. But if we keep them for last it doesn't matter if they take time. :-)
regards,
nick
regards, Göran
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Hola,
Am Montag, 3. Februar 2003 15:59 schrieb goran.hultgren@bluefish.se:
Me too, but more from the perspective of simplification than for "making cool solutions nobody groks". :-)
=)
Yes, I have read about Self so this is in line with my limited knowledge. You instantiate by "cloning" and you do inheritance by delegation. But as you say there are so called "Behaviour objects" etc.
- in my ears this is still mimicking classes in some way.
In short - as a programmer I need to describe "types" and associate behaviour with those types of objects. We can do this using many different mechanisms (Traits, Self delegation, class inheritance etc) but in the end we are still expressing the same thing - we are describing objects with different sets of behaviours.
Of course. But after all, this would even be true for C++ and even for C with its structures: youre defining mechanisms to handle data. but maybe its the classes here mimicking the objects, separating something that doesnt need to be separated, but can instead be modularized into behaviour and data, rather than being hardsplitted. I mean: wasnt that always the strong side of smalltalk: a simple paradigm, making things simple and elegant through its flexibility?
So in the end I assume Self has similar problems with modularization as all the other OO languages, especially the dynamically typed ones. So dropping classes is no silver bullet. I assume.
=) Yes, probably. I don't even think squeak would need any "silver bullet" besides speed (morphic is just sluggish sometimes on my 800Mhz Athlon). But the logic is just too tempting: when I access the "size" attribute of my class from function rotate: why should I worry if it is an instance variable or a function call. Smalltalk clearly draws a line here where none is needed: I don't care if I "know" it or must first load 'size' from a database.
IMHO this is a very good way of doing UIs. Personally I like either coding them by hand (total power, much easier to make components and debug) or by using some form of declarative description and a builder as they did it in StableSqueak/Glade etc.
I agree. Although the ladder requires some experience in the toolkit. It's hard to explore UI creation like you can explore everything in squeak. Just my subjective impression, of course.
[stephen pair] has some really cool technology for doing remote object memories. That last part can really change a lot in the Squeak world...
Can I find out more about it?
Maybe we two should take a better look at self and if this whole stuff really simplifies work, there =)
I am not sure there are enough experience in the Self world to draw from. I mean - what should we look at? Perhaps I have missed something but to me Self has always seemed a bit "academic". I haven't seen any major "day to day" work being done in it. But I may be totally wrong of course.
I don't think you are. But nevertheless, that technologies didn't succeed on the market might just mean they came out before time - who would know that better than smalltalkers, who are inventing croquet nowadays =)
I like the way we approach the problem now. We do it step-by-step. First we created a simple package registration mechanism (SqueakMap). Then Ned created the SAR-format and Avi created DVS. The next logical steps are enhancing SqueakMap with information about releases enabling us to record dependencies between packages and evolving DVS into Monticello for team development. When that is in place the final step is to try to automate dependency detection and install/uninstallation to satisfy the dependencies. These two things are HARD. But if we keep them for last it doesn't matter if they take time. :-)
=) I hope it'll get to work, and that I might contribute to squeak's development at some place.
regards,
nick - -- The Soviet pre-eminence in chess can be traced to the average Russian's readiness to brood obsessively over anything, even the arrangement of some pieces of wood. Indeed, the Russians' predisposition for quiet reflection followed by sudden preventive action explains why they led the field for many years in both chess and ax murders. It is well known that as early as 1970, the U.S.S.R., aware of what a defeat at Reykjavik would do to national prestige, implemented a vigorous program of preparation and incentive. Every day for an entire year, a team of psychologists, chess analysts and coaches met with the top three Russian grand masters and threatened them with a pointy stick. That these tactics proved fruitless is now a part of chess history and a further testament to the American way, which provides that if you want something badly enough, you can always go to Iceland and get it from the Russians. -- Marshall Brickman, Playboy, April, 1973
On Mon, 3 Feb 2003, Niko Schwarz wrote:
I agree - both these aspects of Self are intriguing. I haven't worked in self so I can't say anything from personal experience.
Neither have I, unfortunately, but I found the idea very tempting.
It's very good for you to admire this idea, but Self never implemented anything like it. The VM and the optimized code is/was separate from the image, and was a big source of problems that way.
About Self as a UI builder, it was designed to save the behavior of course, but there was a separate tool to pull object groups out of images to put them into other ones. It works reasonably well, but all of this was ever only a prototype (sic).
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Am Montag, 3. Februar 2003 18:28 schrieb Brian T Rice:
It's very good for you to admire this idea, but Self never implemented anything like it. The VM and the optimized code is/was separate from the image, and was a big source of problems that way.
Are you sure that's true for the current version? I can't get to run it for some mysterious error message, I'm currently reporting to the interest group, but if I understood the tutorial correctly, it does not separate.
regards,
nick - -- WARNING TO ALL PERSONNEL:
Firings will continue until morale improves.
On Mon, 3 Feb 2003, Niko Schwarz wrote:
Am Montag, 3. Februar 2003 18:28 schrieb Brian T Rice:
It's very good for you to admire this idea, but Self never implemented anything like it. The VM and the optimized code is/was separate from the image, and was a big source of problems that way.
Are you sure that's true for the current version? I can't get to run it for some mysterious error message, I'm currently reporting to the interest group, but if I understood the tutorial correctly, it does not separate.
Don't believe everything you read in a tutorial. ;-) Not even Self's parser is self-hosting. Well, David Ungar has rumoured that he and another employee from Sun - I met them both - are working on a self-hosting bootstrap, which *may* do what you say, but I wouldn't bet the farm on it. Lisp compilers tend to include binary code within the image, and use an executable for a starting stub and FFI enabler and such like that, but not Self or at least a decent number of Smalltalks.
squeak-dev@lists.squeakfoundation.org