Wine, Mozilla & IE ?
Shachar Shemesh
wine-devel at sun.consumer.org.il
Sat Jan 11 03:25:59 CST 2003
Alexandre Julliard wrote:
>None of these are showstoppers, but it needs a *really* good reason to
>overcome all of them. So far I haven't heard anything convincing
>enough.
>
>
>
THE thing that makes me miss C++ the most is exception handling. C
offers you, basically, three options:
1. Having to perform an "if" every other line and perform a *shudder*
goto in case of error.
2. Have nested "if"s seven levels deep.
3. return from the middle of the function.
4. Worst yet, write insecure code.
1. produces the longest code. It is also the ugliest one, structured
programming wise.
2. has solved the ugliness, at the expense of code readability. For
performance reasons you have to place the branch most likely to happen
as the "then" part of the if, leaving the error handling to the "else"
part. This means that you have an operation, long long list of what to
do in case it succeeds (this list includes nested "if"s, mind you), and
then an "else" and a sigle line of error handling. These last lines are
all bunched together for each nesting level, and by the time you read
them you no longer have the opening condition on screen.
3. This one produces a very neat solution, except that it requires
performing the shutdown procedure over and over again. With multiple
resources allocated, the shutdown also gets progressively longer.
4. This is the simplest one, and very easy to understand. It is also
very common. In a nutshell - this means that you don't check the results
of the operations you perform, and therefor you don't clutter your code
with error handling. I think I don't have to elaborate why this is bad.
Exceptions, on the other hand, give a clean solution to the entire
problem. The source code looks almost like option 4 - on error checks
are performed. The resulting machine language, however, looks almost
like 1 - all resource cleanups in one place, and you jump there if
necessary.
If the discussion goes forward, I can give an example of rewriting my
latest patch to wineboot (currently using approach 1) with the other
four approaches (2, 3, 4 and exceptions).
Shachar
More information about the wine-devel
mailing list