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.
next prev parent 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