Re: open-read/open-write

Ralf Juengling <[email protected]> Sun, 15 Nov 2009 15:14:00 -0800 (PST)
Newsgroups gmane.lisp.lush.devel
Message-ID <[email protected]>

On Sun, 15 Nov 2009, Yann LeCun wrote:

> There is a mechanism for catching errors by temporarily
> redefining  the "debug-hook" function, but it's a little
> bit dangerous. This could be used, but very carefully.

I think this function is called from within 'error', that
is, after an error has already been raised, and it let's
you do a little bit of inspection.

The idea with an error-handler function would be a little
different. It would be called by a lush function like
'open-read' when it cannot succeed. It is then up to the
error-handler to decide whether to abort the program or to
do something else and to return to the caller to let
execution continue. 'Open-read' would return <nil> as it
does now, if the error-handler returns. A default
error-handler would simply call 'error' and abort the
program.


Ralf




>
>  -- Yann
>
> On Sunday 15 November 2009, Ralf Juengling wrote:
>> Hmm. Another approach would be to allow users to
>> define error-handler functions. But instead of making
>> that an optional argument, one would bind a dedicated
>> symbol, like 'system-error-handler' to a function. The
>> open-xxx implementations would check if a function is
>> bound to 'system-error-handler', and if so, would call
>> that function with an error code and stack-trace, say,
>> when an error occurs. If the symbol is not bound, then
>> the error would be silently ignored. An advantage of
>> this approach is that you could also catch errors that
>> originate in other functions that use open-xxx and that
>> don't care to catch errors themselves.
>>
>> If that sounds like a good idea, then we need to hammer
>> out the details at some point. For the 2.0 release I
>> won't change open-read and friends, but for a future
>> release it would be good if we could come up with some
>> general, user-customizable scheme for handling errors in
>> lush.
>>
>> Any other ideas?
>>
>> Ralf
>>
>> On Tue, 10 Nov 2009, Yann LeCun wrote:
>>> Again, I think we need to catch all errors that are not under the
>>> control of the programmer, so that people can write applications that
>>> don't just crash and burn.
>>>
>>> libc sets an error code when something bad happens. Perhaps some
>>> functionality of this sort could be implemented (perhaps based on the
>>> fileinfo function), so that errors can be caught. As much as I dislike
>>> the idea of "returning error codes by side effects", it's nice to
>>> stick to models people are used to.
>>>
>>> Perhaps all of this could be handled with optinal arguments to
>>> open-xxx. Without optional args, open-xxx would work as it does now,
>>> with t as optional argument, it would do what you are suggesting
>>> (throw an error whenever something goes bad), with a symbol as
>>> optional arg it would set the symbol with the error code, if
>>> necessary.
>>>
>>> Just some random ideas,
>>>
>>>  -- Yann
>>>
>>> On Tuesday 10 November 2009, Ralf Juengling wrote:
>>>> On Tue, 10 Nov 2009, Yann LeCun wrote:
>>>>> Yes, I object.
>>>>>
>>>>> For an interactive srcipt language it's nice to have a function that
>>>>> just throws an error, but for a "real" programming language, you need
>>>>> one that just tells you the file doesn't exist so your program can
>>>>> take corrective actions and not crash and burn (like fopen() in C).
>>>>
>>>> Ok. What bugs me is that open-read also returns '()' when a
>>>> file does exist but it could not be opened for another reason
>>>> (network proplems, no permission, too many files open, ...),
>>>> and you have no clue what went wrong.
>>>>
>>>> How about we let open-read return '()' when a file does not exist
>>>> but raise an error when an existing file cannot be opened?
>>>>
>>>> Ralf
>>>>
>>>>> The solution is to keep the current open-write/read/append as they are
>>>>> (changing them would break too many things), but to add another set
>>>>> higher-level function that throws errors (although that is kind of
>>>>> what "(reading <file> ....)" does).
>>>>>
>>>>> I don't have any good sugestions for name. Perhaps
>>>>> file-open-r file-open-w file-open-a, or something.
>>>>>
>>>>>  -- Yann
>>>>>
>>>>> On Tuesday 10 November 2009, Ralf Juengling wrote:
>>>>>> The functions 'open-read' and 'open-write' do not
>>>>>> raise errors. The current behavior is this:
>>>>>>
>>>>>> "The empty list is returned when an error occurs while
>>>>>> opening the file. .."
>>>>>>
>>>>>> I can see that this may be useful. But I believe the
>>>>>> alternative behavior--open-read/write raising an error and
>>>>>> printing an informative error message when the operation
>>>>>> fails--is useful more often than the current behavior.
>>>>>>
>>>>>> Does anybody remember why the current behavior was chosen?
>>>>>> Does anybody object if I change open-read/open-write (and
>>>>>> open-append) in lush2 to raise errors?
>>>>>>
>>>>>> Ralf
>>>>>>
>>>>>>
>>>>>> ----------------------------------------------------------------------
>>>>>> -- --- --- Let Crystal Reports handle the reporting - Free Crystal
>>>>>> Reports 2008 30-Day trial. Simplify your report design, integration
>>>>>> and deployment - and focus on what you do best, core application
>>>>>> coding. Discover what's new with Crystal Reports now.
>>>>>> http://p.sf.net/sfu/bobj-july
>>>>>> _______________________________________________
>>>>>> Lush-devel mailing list
>>>>>> [email protected]
>>>>>> https://lists.sourceforge.net/lists/listinfo/lush-devel
>>>>
>>>> ------------------------------------------------------------------------
>>>> --- --- Let Crystal Reports handle the reporting - Free Crystal Reports
>>>> 2008 30-Day trial. Simplify your report design, integration and
>>>> deployment - and focus on what you do best, core application coding.
>>>> Discover what's new with Crystal Reports now.
>>>> http://p.sf.net/sfu/bobj-july
>>>> _______________________________________________
>>>> Lush-devel mailing list
>>>> [email protected]
>>>> https://lists.sourceforge.net/lists/listinfo/lush-devel
>>>
>>> -------------------------------------------------------------------------
>>> ----- Let Crystal Reports handle the reporting - Free Crystal Reports 2008
>>> 30-Day trial. Simplify your report design, integration and deployment -
>>> and focus on what you do best, core application coding. Discover what's
>>> new with Crystal Reports now.  http://p.sf.net/sfu/bobj-july
>>> _______________________________________________
>>> Lush-devel mailing list
>>> [email protected]
>>> https://lists.sourceforge.net/lists/listinfo/lush-devel
>>
>> ---------------------------------------------------------------------------
>> --- Let Crystal Reports handle the reporting - Free Crystal Reports 2008
>>  30-Day trial. Simplify your report design, integration and deployment -
>>  and focus on what you do best, core application coding. Discover what's
>>  new with Crystal Reports now.  http://p.sf.net/sfu/bobj-july
>> _______________________________________________
>> Lush-devel mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/lush-devel
>>
>
>
> ------------------------------------------------------------------------------
> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
> trial. Simplify your report design, integration and deployment - and focus on
> what you do best, core application coding. Discover what's new with
> Crystal Reports now.  http://p.sf.net/sfu/bobj-july
> _______________________________________________
> Lush-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/lush-devel
>

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july