comp.lang.ada
 help / color / mirror / Atom feed
From: "Lawrence D’Oliveiro" <ldo@nz.invalid>
Subject: Re: In precision typing we trust
Date: Thu, 28 Aug 2025 01:45:58 -0000 (UTC)	[thread overview]
Message-ID: <108occm$11h9j$2@dont-email.me> (raw)
In-Reply-To: 108oann$115to$1@dont-email.me

On Wed, 27 Aug 2025 19:17:43 -0600, Alex // nytpu wrote:

> On 8/27/25 6:33 PM, Lawrence D’Oliveiro wrote:
>>
>> But can you do type checking dynamically, at run-time?
>>
>> For example, in one project (a Python wrapper for receiving
>> fanotify events from the Linux kernel), I had to deal with a
>> sequence of packets of variable length and type. I could dispatch
>> on the packet-type field and return correspondingly typesafe
>> results in my wrapper.
>
> Yes, that's sorta the entire premise of Ada's OOP lol. Use the
> `'Class` type to give you a root class and then you can dispatch
> with a method call or you sorta can match directly (nowhere even
> near the convenience of more modern functional-style matching
> admittedly though). Or just have a variant record that you can match
> on with a `case` if one prefers---I usually do this unless I need
> dynamic dispatch or inheritance.

But the function has to return the base class type, it cannot have
different return types dynamically. E.g. in the above case, I have an
expression like

    info_type = infoptr.contents.info_type
    infoptr = ct.cast \
      (
        infoptr,
        ct.POINTER
          (
            {
                FANOTIFY.EVENT_INFO_TYPE_FID : FANOTIFY.event_info_fid,
                FANOTIFY.EVENT_INFO_TYPE_DFID_NAME : FANOTIFY.event_info_fid,
                FANOTIFY.EVENT_INFO_TYPE_DFID : FANOTIFY.event_info_fid,
                FANOTIFY.EVENT_INFO_TYPE_PIDFD : FANOTIFY.event_info_pidfd,
                FANOTIFY.EVENT_INFO_TYPE_ERROR : FANOTIFY.event_info_error,
            }[info_type]
          )
      )
    additional.append(infoptr)
    if info_type == FANOTIFY.EVENT_INFO_TYPE_DFID_NAME :
        nameptr = ct.cast \
          (
                ct.cast(infoptr, ct.c_void_p).value
            +
                ct.sizeof(FANOTIFY.event_info_fid)
            +
                infoptr.contents.handle.handle_bytes,
            ct.c_char_p
          )
        additional.append(nameptr.value)
    #end if

Note how you have a switch-expression that uses the value of the
event-type field to return the corresponding type object, and I cast
the info pointer to point to that type. And then the “additional”
variable-length array can contain pointers to additional data,
depending on the event type.

> But in the specific case of interacting directly with hardware[1],
> Ada is far and away the best language in existence for it.

Look at MicroPython, though. It makes it so easy to write just a few
lines of code to twiddle some bits or something. Ada is for the big
stuff, not the small stuff.

  reply	other threads:[~2025-08-28  1:45 UTC|newest]

Thread overview: 125+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-18 10:29 In precision typing we trust Kevin Chadwick
2025-08-18 11:08 ` Dmitry A. Kazakov
2025-08-18 13:59   ` Niocláisín Cóilín de Ghlostéir
2025-08-18 15:03     ` Dmitry A. Kazakov
2025-08-18 22:52       ` Niocláisín Cóilín de Ghlostéir
2025-08-19  6:24       ` J-P. Rosen
2025-08-19  7:29         ` Dmitry A. Kazakov
2025-08-20  0:41           ` Lawrence D’Oliveiro
2025-08-20 15:49           ` Kevin Chadwick
2025-08-20 19:00             ` Dmitry A. Kazakov
2025-08-20  0:40         ` Lawrence D’Oliveiro
2025-08-20 13:59           ` Niocláisín Cóilín de Ghlostéir
2025-08-20 14:58             ` Dmitry A. Kazakov
2025-08-20 17:18               ` Niocláisín Cóilín de Ghlostéir
2025-08-20 19:04                 ` Dmitry A. Kazakov
2025-08-20 20:38                   ` Niocláisín Cóilín de Ghlostéir
2025-08-20 21:59                     ` Lawrence D’Oliveiro
2025-08-20 23:37                       ` Niocláisín Cóilín de Ghlostéir
2025-08-21 21:37                         ` Lawrence D’Oliveiro
2025-08-21  1:31                     ` Keith Thompson
2025-08-20 18:10       ` Niklas Holsti
2025-08-20 18:54         ` Kevin Chadwick
2025-08-22  1:27           ` Alastair Hogge
2025-08-22 12:49             ` Kevin Chadwick
2025-08-22 22:13               ` Lawrence D’Oliveiro
2025-08-22 23:21                 ` Niocláisín Cóilín de Ghlostéir
2025-08-23 22:58                   ` Lawrence D’Oliveiro
2025-08-24  8:37                     ` Dmitry A. Kazakov
2025-08-24 11:05                       ` Niocláisín Cóilín de Ghlostéir
2025-08-24 12:59                         ` Dmitry A. Kazakov
2025-08-24 21:51                           ` Lawrence D’Oliveiro
2025-08-24 21:50                       ` Lawrence D’Oliveiro
2025-08-25  8:19                         ` Dmitry A. Kazakov
2025-08-25  8:51                           ` Paul Rubin
2025-08-25 10:41                             ` Dmitry A. Kazakov
2025-08-25 17:12                               ` Paul Rubin
2025-08-25 20:09                                 ` Dmitry A. Kazakov
2025-08-25 21:13                                   ` Lawrence D’Oliveiro
2025-08-26  7:59                                     ` Dmitry A. Kazakov
2025-08-27  0:13                                       ` Lawrence D’Oliveiro
2025-08-27  7:39                                         ` Dmitry A. Kazakov
2025-08-27 23:10                                           ` Lawrence D’Oliveiro
2025-08-27 23:49                                             ` Dmitry A. Kazakov
2025-08-28  0:35                                               ` Lawrence D’Oliveiro
2025-08-28  7:54                                                 ` Dmitry A. Kazakov
2025-08-28  8:50                                                   ` Kevin Chadwick
2025-08-28  9:02                                                     ` Dmitry A. Kazakov
2025-08-25 21:27                                   ` Paul Rubin
2025-08-26  7:27                                     ` Lawrence D’Oliveiro
2025-08-25 21:10                           ` Lawrence D’Oliveiro
2025-08-26  8:14                             ` Dmitry A. Kazakov
2025-08-26 16:48                               ` Paul Rubin
2025-08-26 17:01                                 ` Kevin Chadwick
2025-08-26 19:43                                   ` Dmitry A. Kazakov
2025-08-27  0:00                                   ` Paul Rubin
2025-08-27  0:14                                     ` Lawrence D’Oliveiro
2025-08-27  7:51                                     ` Dmitry A. Kazakov
2025-08-27 20:45                                       ` Keith Thompson
2025-08-28  8:38                                         ` Dmitry A. Kazakov
2025-08-28  9:00                                           ` Von Ottone
2025-08-27 23:16                                       ` Lawrence D’Oliveiro
2025-08-28  8:48                                         ` Dmitry A. Kazakov
2025-08-29  3:57                                           ` Lawrence D’Oliveiro
2025-08-29  7:53                                             ` Dmitry A. Kazakov
2025-08-30 22:29                                               ` Lawrence D’Oliveiro
2025-08-31  8:56                                                 ` Dmitry A. Kazakov
2025-08-28 12:25                                     ` Björn Persson
2025-08-28 22:14                                       ` Lawrence D’Oliveiro
2025-08-29 15:30                                         ` Björn Persson
2025-08-30  3:34                                           ` Lawrence D’Oliveiro
2025-08-30  8:49                                             ` Kevin Chadwick
2025-08-30 22:34                                               ` Lawrence D’Oliveiro
2025-08-27  0:09                                   ` Lawrence D’Oliveiro
2025-08-27  9:06                                     ` Kevin Chadwick
2025-08-26 19:36                                 ` Dmitry A. Kazakov
2025-08-27  0:10                                   ` Lawrence D’Oliveiro
2025-08-27  7:57                                     ` Dmitry A. Kazakov
2025-08-27 23:12                                       ` Lawrence D’Oliveiro
2025-08-28  0:07                                         ` Dmitry A. Kazakov
2025-08-28  0:38                                           ` Lawrence D’Oliveiro
2025-08-28  8:00                                             ` Dmitry A. Kazakov
2025-08-26  9:06                             ` Dmitry A. Kazakov
2025-08-23  0:26                 ` Kevin Chadwick
2025-08-23 22:59                   ` Lawrence D’Oliveiro
2025-08-23 23:58                     ` Kevin Chadwick
2025-08-24 21:49                       ` Lawrence D’Oliveiro
2025-08-25  8:19                         ` Dmitry A. Kazakov
2025-08-25 20:58                           ` Lawrence D’Oliveiro
2025-08-27  9:01                             ` Kevin Chadwick
2025-08-27  9:24                               ` Dmitry A. Kazakov
2025-08-27 23:07                                 ` Lawrence D’Oliveiro
2025-08-28  0:00                                   ` Dmitry A. Kazakov
2025-08-28  0:22                                     ` Lawrence D’Oliveiro
2025-08-28  0:11                                   ` Kevin Chadwick
2025-08-28  0:20                                     ` Kevin Chadwick
2025-08-28  0:33                                       ` Lawrence D’Oliveiro
2025-08-28  1:17                                         ` Alex // nytpu
2025-08-28  1:45                                           ` Lawrence D’Oliveiro [this message]
2025-08-28  8:24                                             ` Dmitry A. Kazakov
2025-08-29  3:53                                               ` Lawrence D’Oliveiro
2025-08-29  8:07                                                 ` Dmitry A. Kazakov
2025-08-30 22:27                                                   ` Lawrence D’Oliveiro
2025-08-31  9:15                                                     ` Dmitry A. Kazakov
2025-08-28  9:17                                             ` Kevin Chadwick
2025-08-29  3:51                                               ` Lawrence D’Oliveiro
2025-08-29  9:27                                                 ` Kevin Chadwick
2025-08-29  9:33                                                   ` Kevin Chadwick
2025-08-30  6:21                                                     ` Lawrence D’Oliveiro
2025-08-31  0:43                                                       ` Kevin Chadwick
2025-08-31  7:30                                                         ` Lawrence D’Oliveiro
2025-08-31  8:51                                                           ` Kevin Chadwick
2025-08-28  9:04                                         ` Kevin Chadwick
2025-08-29  3:55                                           ` Lawrence D’Oliveiro
2025-08-29  9:41                                             ` Kevin Chadwick
2025-08-30  3:31                                               ` Lawrence D’Oliveiro
2025-08-28  9:05                                         ` Kevin Chadwick
2025-08-28  9:43                                           ` Dmitry A. Kazakov
2025-08-29  3:54                                             ` Lawrence D’Oliveiro
2025-08-29  8:15                                               ` Dmitry A. Kazakov
2025-08-30 22:25                                                 ` Lawrence D’Oliveiro
2025-08-31  9:26                                                   ` Dmitry A. Kazakov
2025-08-28  0:30                                     ` Lawrence D’Oliveiro
2025-08-20 19:10         ` Niocláisín Cóilín de Ghlostéir
2025-08-18 23:27   ` Lawrence D’Oliveiro
2025-08-18 23:46     ` Kevin Chadwick
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox