Re: hash collisions
Posted: Tue Feb 18, 2020 5:25 pm
If your code base has half a million lines in it, there will definitely be bugs.
I think that the proper goal is to attempt to eliminate all known bugs.
It might seem like things such as undefined behavior (e.g. integer overflow) are really not important, but such things have caused Arienne rockets to crash and x-ray machine to give a fatal dose of x-rays.
Undefined behavior in your program means that the program can literally do any thing unexpected, including allowing hostile code injections.
It is one thing to say we cannot write perfect code (and indeed, we imperfect humans are not very good at attempting anything perfectly). It is another thing to make no attempt to fix easily fixable well known and serious bugs.
I think that the computer chess community has largely taken the "who cares?" position, and that position is irresponsible. We can cause real damage even when "nothing serious" happens.
Consider the ubiquitous core dump. Utterly harmless snapshots of what was going on in memory seem benign enough. But a giant collection of them can fill up all the disk space, and now the computer cannot obtain the virtual memory it needs to perform some critical operation. Suppose we happen to be in the middle of a systems update when we freeze. We might cause an unrecoverable error that will require a system format.
My personal opinion is that we should not just assume that since our license may say we are not responsible for any harm, there is no need to fix critical known errors. Not doing so is negligent. You can do someone real harm and not caring about it is callous.
I have seen some very polar opinions on software quality. I think that Chris has an unreachable goal, but nonetheless, it is one that we should all strive for. Quality software that performs the wanted task without endangering anything is obviously a laudable goal. In industry, that goal is necessary, and we spend enormous effort in attempting to approach it. I realize that for the most part, computer chess is a hobby and the time allowed to increase software quality is limited. But it is an important lesson to put the customer first. I have always believed that the best goal in creation of software is, "Make the customer prosper." I believe this is true for every form of software development.
I think that the proper goal is to attempt to eliminate all known bugs.
It might seem like things such as undefined behavior (e.g. integer overflow) are really not important, but such things have caused Arienne rockets to crash and x-ray machine to give a fatal dose of x-rays.
Undefined behavior in your program means that the program can literally do any thing unexpected, including allowing hostile code injections.
It is one thing to say we cannot write perfect code (and indeed, we imperfect humans are not very good at attempting anything perfectly). It is another thing to make no attempt to fix easily fixable well known and serious bugs.
I think that the computer chess community has largely taken the "who cares?" position, and that position is irresponsible. We can cause real damage even when "nothing serious" happens.
Consider the ubiquitous core dump. Utterly harmless snapshots of what was going on in memory seem benign enough. But a giant collection of them can fill up all the disk space, and now the computer cannot obtain the virtual memory it needs to perform some critical operation. Suppose we happen to be in the middle of a systems update when we freeze. We might cause an unrecoverable error that will require a system format.
My personal opinion is that we should not just assume that since our license may say we are not responsible for any harm, there is no need to fix critical known errors. Not doing so is negligent. You can do someone real harm and not caring about it is callous.
I have seen some very polar opinions on software quality. I think that Chris has an unreachable goal, but nonetheless, it is one that we should all strive for. Quality software that performs the wanted task without endangering anything is obviously a laudable goal. In industry, that goal is necessary, and we spend enormous effort in attempting to approach it. I realize that for the most part, computer chess is a hobby and the time allowed to increase software quality is limited. But it is an important lesson to put the customer first. I have always believed that the best goal in creation of software is, "Make the customer prosper." I believe this is true for every form of software development.