Re: Fwd: What to do to get new users

Nikolay Nikolov via fpc-pascal <[email protected]>
Newsgroups gmane.comp.compilers.free-pascal.general
Message-ID <[email protected]>
On 1/24/25 8:12 AM, Hairy Pixels via fpc-pascal wrote:
> On Jan 24, 2025 at 12:43:51 PM, Nikolay Nikolov via fpc-pascal 
> <[email protected]> wrote:
>> That's not what exceptions are meant to be used for, though. What you 
>> describe is called a program "defect". When you encounter a "defect" 
>> in your program, you terminate the program. The proper handling of a 
>> defect is to fix (modify) the program, so it doesn't happen again. In 
>> the case of a "defect", there's no much point in freeing the memory, 
>> because all of the program's memory is freed anyway, when the process 
>> terminates. An exception is used for reporting an unanticipated 
>> condition, encountered at runtime. A program can be correct (bug 
>> free) and still encounter exceptions. For example, a web browser 
>> might encounter a network error, during the loading of a web page, in 
>> which case, it should report the error to the user in its GUI, and it 
>> should continue operating normally, instead of crashing, so the user 
>> can continue browsing, by e.g. trying again, or typing in a different 
>> URL, or switching to a different tab, etc.
>
> Yes I know I’m just saying that’s the most I’ve done with them in 
> Pascal. I do use them to escape deep recursion too and then they’re 
> very helpful but I would have random allocations in a recursive that 
> could fail randomly at any point.
>
>> Feels to me like manual memory management and exceptions don’t mix well.
>> I fail to understand how you came to this conclusion, since I just 
>> showed how the same code would look without exceptions, and it's way 
>> worse.
>>
>
> That example was the best scenario for exceptions where they’re 
> handled in the same scope they occur and they don’t bubble up through 
> the call stack.
Doesn't matter whether they're handled in the same scope or not. It's 
the same code. Usually they're not handled in the same scope, but in a 
very distant place. That's usually when exceptions are convenient.
> Once you let them bubble up you need to wrap all call sites with 
> try..finally right?

Wrong. Only sites that allocate memory, that needs to be freed, before 
leaving the scope need a try..finally. You don't need to wrap every 
call. That's nonsense. The pattern is:

var

   {... initialize local vars you're going to allocate in this function 
with nil}

begin

   try

     {lots of code, allocations, calls, etc}

   finally

     {cleanup code}

     {free stuff that isn't nil}

   end;

end;


Nikolay

_______________________________________________
fpc-pascal maillist  -  [email protected]
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.