On Wed, Jan 4, 2012 at 9:18 AM, Lukasz Sokol <el.es...@gmail.com> wrote: > On 04/01/2012 11:50, Marcos Douglas wrote: > >> Ok, I expressed myself poorly. >> When I said: "If we could return more than one value, ok we (maybe) do >> not need Exceptions." >> I mean: "If we could return more than one value, using a better way >> than 'out arguments' or 'array of const', ok we (maybe) do not need >> Exceptions in many times". >> >> I know we can use 'out args', 'array' or a object (this provides many >> results) but this is not beautiful. >> 1- out args: we always have a local variable ErrorCode/ErrorMsg (like >> your example) and this is boring. >> 2- array of const: we need 'unpack' the array; memleak could happen; etc; >> 3- object: we have a local variabel or use 'with' but memleak could >> happen any way; >> >> Marcos Douglas > > You'd still need exceptions code to protect yourself from corner cases > (like data-(stream) dependent calculation that could possibly hit float div/0 > for example) > because if you don't, your app will bail out...
Correct, because the language was designed that way. > otherwise e.g. your maths functions instead of /just/ doing what they need, > will > have to check for possible misformed argument(s); and (IIIC - if I imagine > correctly) > the exception catching code is closely paired to arithmetic errors like these; > also out-of-memory errors (may be ?) (which could explain the recommended > everywhere > try-finally-end use case for most locally declared objects of e.g. > TStringList type) Correct and try-finally is indispensable. > Object Pascal isn't 'C-plain'like where you'd need manual check for such > cases and commonly > use 'goto error_label;' (common usage in Linux kernel AFAIS, go figure.) > > C++ and Java also have underlying exception handling code. > > IM(H)O you can't have a function return both a value (of whatever kind) and > an error code without > seriously redefining language syntax. > Thing is, (most?) programming languages are based on math concept of a > 'function' which is supposed > to return one meaningful value, where it's up to the upper layer to check for > correctness of > arguments... either that or you check arguments and /abort/ function > execution if they're bad. > And if the function return value is allowed -inf..0..+inf? you definitively > need another out argument > to signal the upper layer something went wrong. > > I see exception handling code/classes/objects as a globally (thread-safe?) > accessible way of bailing out > from bad situation and telling the upper layer about it. It is effectively > your way of 'returning > another value from function', if you look at it from a distance. I agree with you! But I was discussing the possibility do not using Exceptions. ;-) Another point is when and where uses Exceptions... that's what they were discussing. Marcos Douglas _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal