Eliot Miranda wrote:
Andreas counters that implementing the abstractions in the VM keeps them well-defined and free from meddling. But that runs counter to the philosophy of an open system and preventing inadvertent meddling is something Smalltalk has to do anyway (e.g. "Process should not be redefined, proceed to store over it"). The nice things about shooting oneself in the foot by meddling with a Smalltalk system are that a) it doesn't really do any harm and b) the debugging of it can be a great learning experience.
I disagree with both of these statements 100%. First, once you have passed the first invalid pointer to some C function you will find out the hard way that "not really doing any harm" means, oh well it'll crash your image instead of raising a debugger. The consequence of this is that for any serious development you will no longer want to do in-image development; consider writing C code inside the running C app and then have it core-dump every time you misspell something. Not exactly my definition of "not really doing any harm". Secondly, wading through gobs of platform specific code is only a great learning experience if you are trying to learn platform specific stuff. Otherwise it's a useless distraction that only gets into your way of seeing (and using) the abstractions.
Cheers, - Andreas