Rocksolid Light

Welcome to novaBBS (click a section below)

mail  files  register  newsreader  groups  login

Message-ID:  

You have a message from the operator.


devel / comp.lang.ada / Re: Exception Handling within Gtkada

SubjectAuthor
* Re: Exception Handling within GtkadaVadim Godunko
`* Re: Exception Handling within GtkadaDmitry A. Kazakov
 +* Re: Exception Handling within GtkadaEmmanuel Briot
 |`- Re: Exception Handling within GtkadaDmitry A. Kazakov
 `* Re: Exception Handling within Gtkadaldries46
  `- Re: Exception Handling within GtkadaDmitry A. Kazakov

1
Re: Exception Handling within Gtkada

<27364e05-ceac-49de-b6b4-954609d00543n@googlegroups.com>

 copy mid

https://www.novabbs.com/devel/article-flat.php?id=5977&group=comp.lang.ada#5977

 copy link   Newsgroups: comp.lang.ada
X-Received: by 2002:ac8:5e0d:: with SMTP id h13mr26475775qtx.382.1632206987635;
Mon, 20 Sep 2021 23:49:47 -0700 (PDT)
X-Received: by 2002:a25:8409:: with SMTP id u9mr25396133ybk.159.1632206987468;
Mon, 20 Sep 2021 23:49:47 -0700 (PDT)
Path: i2pn2.org!i2pn.org!weretis.net!feeder6.news.weretis.net!news.misty.com!border2.nntp.dca1.giganews.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: comp.lang.ada
Date: Mon, 20 Sep 2021 23:49:47 -0700 (PDT)
In-Reply-To: <nnd$672ea4c3$361caa01@549d065034cf3e10>
Injection-Info: google-groups.googlegroups.com; posting-host=109.165.123.142; posting-account=niG3UgoAAAD7iQ3takWjEn_gw6D9X3ww
NNTP-Posting-Host: 109.165.123.142
References: <nnd$672ea4c3$361caa01@549d065034cf3e10>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <27364e05-ceac-49de-b6b4-954609d00543n@googlegroups.com>
Subject: Re: Exception Handling within Gtkada
From: vgodu...@gmail.com (Vadim Godunko)
Injection-Date: Tue, 21 Sep 2021 06:49:47 +0000
Content-Type: text/plain; charset="UTF-8"
Lines: 13
 by: Vadim Godunko - Tue, 21 Sep 2021 06:49 UTC

On Monday, September 20, 2021 at 3:06:02 PM UTC+3, ldries46 wrote:
> I want an exception to be seen within an existing window of Gtkada to be able to see details of the error. So I used:
>
> exception
> when no_const =>
> Main_Window.Buffer.Insert_At_Cursor
> ("-------------------------------------------------------------------------"
> & To_String(CRLF));
> Main_Window.Buffer.Insert_At_Cursor("Error : io_const" & to_String(CRLF));
> end Test_Exception;
>
> In this case the the program ends and the reason of the exception is lost. I want this only for a selected nr of exceptions. In this case the exception no_const.

Generally, Ada exceptions must not left scope of callback function. Thus, such code should be added to each callback/event handler/etc. subprogram of your application.

Re: Exception Handling within Gtkada

<sic00e$1q61$1@gioia.aioe.org>

 copy mid

https://www.novabbs.com/devel/article-flat.php?id=5979&group=comp.lang.ada#5979

 copy link   Newsgroups: comp.lang.ada
Path: i2pn2.org!i2pn.org!aioe.org!x6YkKUCkj2qHLwbKnVEeag.user.46.165.242.91.POSTED!not-for-mail
From: mail...@dmitry-kazakov.de (Dmitry A. Kazakov)
Newsgroups: comp.lang.ada
Subject: Re: Exception Handling within Gtkada
Date: Tue, 21 Sep 2021 09:01:35 +0200
Organization: Aioe.org NNTP Server
Message-ID: <sic00e$1q61$1@gioia.aioe.org>
References: <nnd$672ea4c3$361caa01@549d065034cf3e10>
<27364e05-ceac-49de-b6b4-954609d00543n@googlegroups.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Info: gioia.aioe.org; logging-data="59585"; posting-host="x6YkKUCkj2qHLwbKnVEeag.user.gioia.aioe.org"; mail-complaints-to="abuse@aioe.org";
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
Thunderbird/78.14.0
Content-Language: en-US
X-Notice: Filtered by postfilter v. 0.9.2
 by: Dmitry A. Kazakov - Tue, 21 Sep 2021 07:01 UTC

On 2021-09-21 08:49, Vadim Godunko wrote:
> On Monday, September 20, 2021 at 3:06:02 PM UTC+3, ldries46 wrote:
>> I want an exception to be seen within an existing window of Gtkada to be able to see details of the error. So I used:
>>
>> exception
>> when no_const =>
>> Main_Window.Buffer.Insert_At_Cursor
>> ("-------------------------------------------------------------------------"
>> & To_String(CRLF));
>> Main_Window.Buffer.Insert_At_Cursor("Error : io_const" & to_String(CRLF));
>> end Test_Exception;
>>
>> In this case the the program ends and the reason of the exception is lost. I want this only for a selected nr of exceptions. In this case the exception no_const.
>
> Generally, Ada exceptions must not left scope of callback function. Thus, such code should be added to each callback/event handler/etc. subprogram of your application.

Right. Each handler should end like this:

exception
when Error : others =>
Glib.Message.Log
( "My fancy program",
Log_Level_Critical,
( "Fault in On_Button_Click: "
& Exception_Information (Error)
) );
end On_Button_Click;

--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de

Re: Exception Handling within Gtkada

<002f7e98-baca-40a3-85f1-211b77550bc7n@googlegroups.com>

 copy mid

https://www.novabbs.com/devel/article-flat.php?id=5980&group=comp.lang.ada#5980

 copy link   Newsgroups: comp.lang.ada
X-Received: by 2002:a05:620a:14b1:: with SMTP id x17mr28706604qkj.37.1632209083485;
Tue, 21 Sep 2021 00:24:43 -0700 (PDT)
X-Received: by 2002:a25:2ccf:: with SMTP id s198mr34413615ybs.452.1632209083239;
Tue, 21 Sep 2021 00:24:43 -0700 (PDT)
Path: i2pn2.org!i2pn.org!weretis.net!feeder6.news.weretis.net!news.misty.com!border2.nntp.dca1.giganews.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: comp.lang.ada
Date: Tue, 21 Sep 2021 00:24:43 -0700 (PDT)
In-Reply-To: <sic00e$1q61$1@gioia.aioe.org>
Injection-Info: google-groups.googlegroups.com; posting-host=87.88.29.208; posting-account=6yLzewoAAABoisbSsCJH1SPMc9UrfXBH
NNTP-Posting-Host: 87.88.29.208
References: <nnd$672ea4c3$361caa01@549d065034cf3e10> <27364e05-ceac-49de-b6b4-954609d00543n@googlegroups.com>
<sic00e$1q61$1@gioia.aioe.org>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <002f7e98-baca-40a3-85f1-211b77550bc7n@googlegroups.com>
Subject: Re: Exception Handling within Gtkada
From: briot.em...@gmail.com (Emmanuel Briot)
Injection-Date: Tue, 21 Sep 2021 07:24:43 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Lines: 14
 by: Emmanuel Briot - Tue, 21 Sep 2021 07:24 UTC

> > Generally, Ada exceptions must not left scope of callback function. Thus, such code should be added to each callback/event handler/etc. subprogram of your application.
> Right. Each handler should end like this:

We were talking the other day of the high-level Connect subprograms generated by GtkAda (`Gtk.Button.On_Clicked` and so on). Those will always catch exceptions and avoid propagating them to the C layer in gtk+ (which as Dmitry mentions is dangerous). They will in effect call `GtkAda.Bindings.Process_Exception`, which in turns calls a user-defined subprogram, see GtkAda.Bindings.Set_On_Exceptions

I think this should be the recommended approach for general exceptions. Of course, your callbacks should directly handle exceptions that they know how to recover from, and deal with that locally.

Re: Exception Handling within Gtkada

<sic2a0$qli$1@gioia.aioe.org>

 copy mid

https://www.novabbs.com/devel/article-flat.php?id=5981&group=comp.lang.ada#5981

 copy link   Newsgroups: comp.lang.ada
Path: i2pn2.org!i2pn.org!aioe.org!x6YkKUCkj2qHLwbKnVEeag.user.46.165.242.91.POSTED!not-for-mail
From: mail...@dmitry-kazakov.de (Dmitry A. Kazakov)
Newsgroups: comp.lang.ada
Subject: Re: Exception Handling within Gtkada
Date: Tue, 21 Sep 2021 09:40:49 +0200
Organization: Aioe.org NNTP Server
Message-ID: <sic2a0$qli$1@gioia.aioe.org>
References: <nnd$672ea4c3$361caa01@549d065034cf3e10>
<27364e05-ceac-49de-b6b4-954609d00543n@googlegroups.com>
<sic00e$1q61$1@gioia.aioe.org>
<002f7e98-baca-40a3-85f1-211b77550bc7n@googlegroups.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Info: gioia.aioe.org; logging-data="27314"; posting-host="x6YkKUCkj2qHLwbKnVEeag.user.gioia.aioe.org"; mail-complaints-to="abuse@aioe.org";
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
Thunderbird/78.14.0
Content-Language: en-US
X-Notice: Filtered by postfilter v. 0.9.2
 by: Dmitry A. Kazakov - Tue, 21 Sep 2021 07:40 UTC

On 2021-09-21 09:24, Emmanuel Briot wrote:
>>> Generally, Ada exceptions must not left scope of callback function. Thus, such code should be added to each callback/event handler/etc. subprogram of your application.
>> Right. Each handler should end like this:
>
> We were talking the other day of the high-level Connect subprograms generated by GtkAda (`Gtk.Button.On_Clicked` and so on). Those will always catch exceptions and avoid propagating them to the C layer in gtk+ (which as Dmitry mentions is dangerous). They will in effect call `GtkAda.Bindings.Process_Exception`, which in turns calls a user-defined subprogram, see GtkAda.Bindings.Set_On_Exceptions

Very cool.

> I think this should be the recommended approach for general exceptions. Of course, your callbacks should directly handle exceptions that they know how to recover from, and deal with that locally.

Yes, but Ada does that much better. I mean rendezvous, which is Ada's
idea of an event handling. An exception in a rendezvous propagates to
the caller. For a GUI it would mean that if a callback fails the emitter
of the signal gets an exception, which would be the right place to
handle the issue rather than sweeping it under the rug.

--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de

Re: Exception Handling within Gtkada

<nnd$0df7c13f$28edb84d@f58f09a4091a43c0>

 copy mid

https://www.novabbs.com/devel/article-flat.php?id=5987&group=comp.lang.ada#5987

 copy link   Newsgroups: comp.lang.ada
Subject: Re: Exception Handling within Gtkada
Newsgroups: comp.lang.ada
References: <nnd$672ea4c3$361caa01@549d065034cf3e10>
<27364e05-ceac-49de-b6b4-954609d00543n@googlegroups.com>
<sic00e$1q61$1@gioia.aioe.org>
From: bertus.d...@planet.nl (ldries46)
Date: Wed, 22 Sep 2021 10:42:29 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
Thunderbird/78.14.0
MIME-Version: 1.0
In-Reply-To: <sic00e$1q61$1@gioia.aioe.org>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
Message-ID: <nnd$0df7c13f$28edb84d@f58f09a4091a43c0>
Organization: KPN B.V.
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!newsreader4.netcologne.de!news.netcologne.de!peer03.ams1!peer.ams1.xlned.com!news.xlned.com!peer03.ams4!peer.am4.highwinds-media.com!news.highwinds-media.com!feed.abavia.com!abe001.abavia.com!abp001.abavia.com!news.kpn.nl!not-for-mail
Lines: 47
Injection-Date: Wed, 22 Sep 2021 10:42:29 +0200
Injection-Info: news.kpn.nl; mail-complaints-to="abuse@kpn.com"
X-Received-Bytes: 3054
 by: ldries46 - Wed, 22 Sep 2021 08:42 UTC

Op 21-9-2021 om 9:01 schreef Dmitry A. Kazakov:
> On 2021-09-21 08:49, Vadim Godunko wrote:
>> On Monday, September 20, 2021 at 3:06:02 PM UTC+3, ldries46 wrote:
>>> I want an exception to be seen within an existing window of Gtkada
>>> to be able to see details of the error. So I used:
>>>
>>> exception
>>> when no_const =>
>>> Main_Window.Buffer.Insert_At_Cursor
>>> ("-------------------------------------------------------------------------"
>>>
>>> & To_String(CRLF));
>>> Main_Window.Buffer.Insert_At_Cursor("Error : io_const" &
>>> to_String(CRLF));
>>> end Test_Exception;
>>>
>>> In this case the the program ends and the reason of the exception is
>>> lost. I want this only for a selected nr of exceptions. In this case
>>> the exception no_const.
>>
>> Generally, Ada exceptions must not left scope of callback function.
>> Thus, such code should be added to each callback/event handler/etc.
>> subprogram of your application.
>
> Right. Each handler should end like this:
>
>    exception
>       when Error : others =>
>          Glib.Message.Log
>          (  "My fancy program",
>             Log_Level_Critical,
>             (  "Fault in On_Button_Click: "
>             &  Exception_Information (Error)
>          )  );
>    end On_Button_Click;
>
I tried different approaches but they cannot solve my problem. Part of
the problem is probably that I am developing a package which should be
usable in all different kind of programs maybe even under programs using
all different kind of GUI's. That means that exception handling cannot
always be done in the package but should be done in at least a package
calling that problem. With this approach I tried to solve an earlier
problem I asked about "Is there a way to see if a value is declared as a
constant". I tried to solve that problem in a way that needed Exception
handling during running to solve a design problem that could be made. I
will need another way to go around that problem.

Re: Exception Handling within Gtkada

<sif05p$1l78$1@gioia.aioe.org>

 copy mid

https://www.novabbs.com/devel/article-flat.php?id=5990&group=comp.lang.ada#5990

 copy link   Newsgroups: comp.lang.ada
Path: i2pn2.org!i2pn.org!aioe.org!x6YkKUCkj2qHLwbKnVEeag.user.46.165.242.91.POSTED!not-for-mail
From: mail...@dmitry-kazakov.de (Dmitry A. Kazakov)
Newsgroups: comp.lang.ada
Subject: Re: Exception Handling within Gtkada
Date: Wed, 22 Sep 2021 12:22:49 +0200
Organization: Aioe.org NNTP Server
Message-ID: <sif05p$1l78$1@gioia.aioe.org>
References: <nnd$672ea4c3$361caa01@549d065034cf3e10>
<27364e05-ceac-49de-b6b4-954609d00543n@googlegroups.com>
<sic00e$1q61$1@gioia.aioe.org> <nnd$0df7c13f$28edb84d@f58f09a4091a43c0>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Info: gioia.aioe.org; logging-data="54504"; posting-host="x6YkKUCkj2qHLwbKnVEeag.user.gioia.aioe.org"; mail-complaints-to="abuse@aioe.org";
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
Thunderbird/78.14.0
Content-Language: en-US
X-Notice: Filtered by postfilter v. 0.9.2
 by: Dmitry A. Kazakov - Wed, 22 Sep 2021 10:22 UTC

On 2021-09-22 10:42, ldries46 wrote:
> Op 21-9-2021 om 9:01 schreef Dmitry A. Kazakov:
>> On 2021-09-21 08:49, Vadim Godunko wrote:
>>> On Monday, September 20, 2021 at 3:06:02 PM UTC+3, ldries46 wrote:
>>>> I want an exception to be seen within an existing window of Gtkada
>>>> to be able to see details of the error. So I used:
>>>>
>>>> exception
>>>> when no_const =>
>>>> Main_Window.Buffer.Insert_At_Cursor
>>>> ("-------------------------------------------------------------------------"
>>>>
>>>> & To_String(CRLF));
>>>> Main_Window.Buffer.Insert_At_Cursor("Error : io_const" &
>>>> to_String(CRLF));
>>>> end Test_Exception;
>>>>
>>>> In this case the the program ends and the reason of the exception is
>>>> lost. I want this only for a selected nr of exceptions. In this case
>>>> the exception no_const.
>>>
>>> Generally, Ada exceptions must not left scope of callback function.
>>> Thus, such code should be added to each callback/event handler/etc.
>>> subprogram of your application.
>>
>> Right. Each handler should end like this:
>>
>>    exception
>>       when Error : others =>
>>          Glib.Message.Log
>>          (  "My fancy program",
>>             Log_Level_Critical,
>>             (  "Fault in On_Button_Click: "
>>             &  Exception_Information (Error)
>>          )  );
>>    end On_Button_Click;
>>
> I tried different approaches but they cannot solve my problem. Part of
> the problem is probably that I am developing a package which should be
> usable in all different kind of programs maybe even under programs using
> all different kind of GUI's.

You still may not propagate exceptions through C.

> That means that exception handling cannot
> always be done in the package but should be done in at least a package
> calling that problem. With this approach I tried to solve an earlier
> problem I asked about "Is there a way to see if a value is declared as a
> constant". I tried to solve that problem in a way that needed Exception
> handling during running to solve a design problem that could be made. I
> will need another way to go around that problem.

Posing a problem correctly is a half of solution.

Anyway, if you want to propagate exceptions through GTK, that is
possible to do by marshaling and then re-raising occurrence. GtkAda
contributions does this in the package Gtk.Main.Router. It also gives
stack trace of the exception in a popup dialog. And it can show the
location in GPS if that is running in the server mode.

--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de

1
server_pubkey.txt

rocksolid light 0.9.7
clearnet tor