retard wrote:
Tue, 27 Jul 2010 04:10:14 +0800, KennyTM~ wrote:
On Jul 27, 10 02:42, Walter Bright wrote:
retard wrote:
I think the Java/C# developers gave up X % of the execution speed to
avoid hard crashes (exceptions instead of segfaults)
1. segfaults *are* exceptions.
2. D offers a memory safe subset, and D's ranges and algorithms are
memory safe.
Catching exception is easy, but handling (segfault) signal is a mess.
Indeed, I'd like to know how you recover from a segfault without help
from an external processes.
On Windows, it's fairly straightforward. I did it once as part of a gc
implementation that would mark unmodified pages as hardware readonly. It would
catch the seg fault from writes to it, log the page as modified, make the page
writable, and restart the failed instruction.
Sometimes you know that some routine might
fail once in a week, but the program MUST run non-stop for several
months. In Java you can achieve this with exceptions. And you can also
dynamically fix classes with the class loader.
Any program that attempts to achieve reliability by "recovering" from program
bugs and continuing is an extremely badly designed one.
http://www.drdobbs.com/blog/archives/2009/10/safe_systems_fr.html
http://www.drdobbs.com/blog/archives/2009/11/designing_safe.html
Sadly, it's a topic that has not penetrated software engineering instructional
materials, and programmers have to learn it the hard way again and again.