If only they did dynamically bind ... far too many changes require a
reboot and this means that they are still using linking loaders to do quite a bit of integration of changes ... Cheers, Alan At 07:58 AM 5/21/2007, Alan Lovejoy wrote: ><Alan Kay>As Dan Ingalls used to say: "An operating system is just the stuff >left out of the programming language -- if you don't leave it out, then you >don't need the OS".</Alan Kay> > >And one of the most critical things left out of most programming languages >is dynamic binding (and often even static linking,) which is why operating >systems commonly provide both capabilities. In fact, the operating system >is essentially that body of common, shared code that is dynamically >bound/linked to application programs. Dynamically binding applications to >that common code base is the primary purpose of the OS. > >--Alan |
<Alan Kay>If only they did dynamically bind ... far too many changes require a reboot and this means that they are still using linking loaders to do quite a bit of integration of changes ...</Alan Kay> System calls are essentially a dynamic dispatch mechanism--and so can be thought of as sending messages (albeit the receiver is always the kernel.) The distinction between user space and kernel space is analogous to object encapsulation. Interrupts/signals are also a form of dynamic dispatch--and the message receiver(s) can vary dynamically. They are also examples of the Observer design pattern. DLL and .so files are a weak form of dynamic binding--but fall short of what you meant by "OOP" 30+ years ago (in the same way that C++ does.) It's still static typing, just not static linking. Of course, no OS I know of has the equivalent of ClassBuilders that can transparently migrate instances of old (versions of) classes to be instances of new (versions of) classes. This deficiency is one reason why rebooting is so often necessary. Static linking and/or static typing is another. --Alan |
In reply to this post by Brad Fuller-3
On May 21, 2007, at 9:08 PM, Alan Lovejoy wrote: > ... > Of course, no OS I know of has the equivalent of ClassBuilders that > can > transparently migrate instances of old (versions of) classes to be > instances > of new (versions of) classes. ... Well, as long as you're asking... http://www.symbolics.com/Genera-1.htm (note feature bullets) How this was done, exactly, for class defs: http://www.lispworks.com/documentation/HyperSpec/Body/07_b.htm http://lisp.org/mop/concepts.html#reinit-class If I recall, there was an implementation of Objective-C that also updated existing instances when you changed class shape, but I never (knowingly) used it. |
<Howard Stearns>Well, as long as you're asking...</Howard Stearns>
Heh...Got me. Actually, when I wrote "no OS I know of...", I was mentally discounting things like the early Smalltalk systems where Smalltalk served as its own OS--and so, by extension, also discounting similar systems based on LISP. I was also thinking of operating systems in current use, and that might actually be encountered by non-geeks (and so was also excluding things like SqueakNOS.) That'll learn me to avoid using language that's more general than what I was actually thinking ;-) --Alan |
In reply to this post by Alan Kay
"Alan Lovejoy" <[hidden email]> writes:
> Of course, no OS I know of has the equivalent of ClassBuilders that can > transparently migrate instances of old (versions of) classes to be instances > of new (versions of) classes. This deficiency is one reason why rebooting > is so often necessary. Static linking and/or static typing is another. I don't know, .so's/DLL's, not to mention Unixy daemons, are actually plenty to allow you to replace subsystems without rebooting the whole computer. You reboot the subsystem, but not the whole machine. Linux folks update all the time without rebooting. So it seems to depend on the culture as much as the technology. Some programmers make their subsystems replaceable, and others do not bother and make you reboot. Lex |
Free forum by Nabble | Edit this page |