2009/11/11 Andreas Raab andreas.raab@gmx.de:
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.
Excuse me for intrusion, but as you said, passing wrong pointer to some C function having same consequence either you doing it from C program or from smalltalk one. So, what the difference? It is the price we pay, and will pay anyways , when developing applications which using unmanaged C code. Someone has to go through the pain debugging the code which using C libraries. And he will have to deal with core dumps. Be it core dump of VM or core dump of any other program, it is still a core dump - a signal that something gone wrong.
Also, trying to keep users away from platform-specific stuff is a good intent.. but it means that someone, at some day dealt with this stuff instead of you. One, who had to get through numerous core dumps & crashes until he had a stable code, ready for use by others. So, what makes that developer any different from anyone else, who trying to do something which requires use of some platform-specific library?
Cheers, - Andreas