comp.lang.ada
 help / color / mirror / Atom feed
* In precision typing we trust
@ 2025-08-18 10:29 Kevin Chadwick
  2025-08-18 11:08 ` Dmitry A. Kazakov
  0 siblings, 1 reply; 125+ messages in thread
From: Kevin Chadwick @ 2025-08-18 10:29 UTC (permalink / raw)


On LinkedIn Richard Riehle suggested that strong typing was claimed by many
 languages but Ada offers more in precision typing. I wonder if precision
 would fit around the coin?

-- 
Regards, Kc

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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 23:27   ` Lawrence D’Oliveiro
  0 siblings, 2 replies; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-18 11:08 UTC (permalink / raw)


On 2025-08-18 12:29, Kevin Chadwick wrote:
> On LinkedIn Richard Riehle suggested that strong typing was claimed by many
> languages but Ada offers more in precision typing. I wonder if precision
> would fit around the coin?

These are unrelated issues. Strong typing is about:

1. Any object has a type. Note that many OO languages violate this 
principle, but not Ada which has T'Class and T separate.

2. Types have definite set of operations, arguments and results are 
typed. No, ellipsis, no messages (calling an operation on any object), 
no pattern matching of calls etc.

3. Types are insulated unless a relationship is explicitly stated by the 
programmer. E.g. no implicit type conversions.

What Richard refers to is an accuracy of mapping a type to the problem 
space. Talking about numerical entities the model types have precision, 
range, accuracy (float vs. fixed-point vs. unbounded), behavior like 
rounding, handling of exceptional states (breaking out the model) etc.

A counter example to Richard's statement. A weakly typed PL/1 had 
precision types.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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 23:27   ` Lawrence D’Oliveiro
  1 sibling, 1 reply; 125+ messages in thread
From: Niocláisín Cóilín de Ghlostéir @ 2025-08-18 13:59 UTC (permalink / raw)


On Mon, 18 Aug 2025, Dmitry A. Kazakov wrote:
|-----------------------------------------------------------------------------|
|"These are unrelated issues. Strong typing is about:                         |
|                                                                             |
|1. Any object has a type. Note that many OO languages violate this principle,|
|but not Ada which has T'Class and T separate.                                |
|                                                                             |
|[. . .]"                                                                     |
|-----------------------------------------------------------------------------|

Dear Mister Kazakov,

Ada is a strongly typed language so Ada is not an OOP language.

With best regards.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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
                         ` (2 more replies)
  0 siblings, 3 replies; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-18 15:03 UTC (permalink / raw)


On 2025-08-18 15:59, Niocláisín Cóilín de Ghlostéir wrote:
> On Mon, 18 Aug 2025, Dmitry A. Kazakov wrote:
> |-----------------------------------------------------------------------------|
> |"These are unrelated issues. Strong typing is about:                         |
> |                                                                             |
> |1. Any object has a type. Note that many OO languages violate this principle,|
> |but not Ada which has T'Class and T separate.                                |
> |                                                                             |
> |[. . .]"                                                                     |
> |-----------------------------------------------------------------------------|
> 
> Ada is a strongly typed language so Ada is not an OOP language.

Ada is a strongly typed OO language.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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-20 18:10       ` Niklas Holsti
  2 siblings, 0 replies; 125+ messages in thread
From: Niocláisín Cóilín de Ghlostéir @ 2025-08-18 22:52 UTC (permalink / raw)


[-- Attachment #1: Type: text/plain, Size: 3636 bytes --]

On Mon, 18 Aug 2025, Dmitry A. Kazakov wrote:
|--------------------------------------|
|"Ada is a strongly typed OO language."|
|--------------------------------------|

Dear Mister Kazakov:

I am curious as to how such an elite expert computer scientist as yourself 
concluded so perversely. Professor Alan Curtis Kay professes: “I’ve been 
shown some very, very strange-looking pieces of code over the years by 
various people, including people in universities, that they have said is 
OOP code, and written in an OOP language—and actually, I made up the term 
object-oriented”. Cf.
Kay, A. C. (1997). The Computer Revolution Hasn’t Happened Yet. In The 
12th ACM SIGPLAN Conference on Object-Oriented Programming, Systems, 
Languages, and Applications.
HTTP://files.Squeak.org/Media/AlanKay/Alan\%20Kay\%20at\%20OOPSLA\%201997\%20-\%20The\%20computer\%20revolution\%20hasnt\%20happened\%20yet.ogg
HTTP://blog.Moryton.net/2007/12/computer-revolution-hasnt-happened-yet.html
HTTP://Gloucester.Insomnia247.NL/Alan_Curtis_Kay/Kay_1997__I_made_up_the_term_object-oriented,_and_I_can_tell_you_I_did_not_have_C++_in_mind.avi

Professor Alan Curtis Kay says that Ada (while calling Ada “ADA” (sic)) is 
not an OOP language but one of the “Better Old Things” about “Abstract 
Data Types which was really staying with an assignment-centered way of 
thinking about programming”.

Contrast
ADA_is_a_good_non-OOP_language_says_Alan_Curtis_Kay.JPG
with
HTTP://Gloucester.Insomnia247.NL/Alan_Curtis_Kay/New_Things_OOP.JPG

Cf.
“Oh, yeah, I had to sigh when Alan Kay, the keynote speaker, had a slide
with Ada spelled as "ADA".” says Gary Kephart, “OOPSLA [was Re: Tri-Ada 
Soars; Hal eats crow -Reply]”, Team-Ada, Wed, 8 Oct 1997 14:16:31 -0700
HTTPS://LISTSERV.ACM.org/SCRIPTS/WA-ACMLPX.CGI?A2=ind9710&L=TEAM-ADA&P=R1772

Cf.
HTTP://Gloucester.Insomnia247.NL/Alan_Curtis_Kay/ADA_is_a_good_non-OOP_language_says_Alan_Curtis_Kay.JPG
Cf.
“Date: Wed, 23 Jul 2003 09:33:31 -0800

To: Stefan Ram [removed for privacy]

From Alan Kay [removed for privacy]

Subject: Re: Clarification of "object-oriented"
[. . .]
The second phase of this was to finally understand LISP and then 

using this understanding to make much nicer and smaller and more 

powerful and more late bound understructures. [. . .]
[. . .]

[. . .]

(I'm not against types, but I don't know of any type systems that 

aren't a complete pain, so I still like dynamic typing.)


OOP to me means only messaging, local retention and protection and 

hiding of state-process, and extreme late-binding of all things. It 

can be done in Smalltalk and in LISP. There are possibly other 

systems in which this is possible, but I'm not aware of them.”
says
HTTPS://userPage.FU-Berlin.De/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_de

Precisely not Ada!

Can you cite an authoritative prescriptive definition for “OO language” 
which compels Professor Kay to confess that he must conclude that he 
himself defined that Ada is an “OO language” despite Ada having “any type 
system” and potentially not demanding messaging and allowing global 
variables and demanding compilation-time checking? I note that you say “OO 
language” about a programming language (Ada), but Professor Kay says “OOP 
language” and Kay says that Ada is not an OOP language. So, do you 
theorize that Ada (i.e. a programming language) can be an “OO language” 
without being an “OOP language”? This really does not convince me! Sorry!

I mean no disrespect against you.

Sincerely.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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 23:27   ` Lawrence D’Oliveiro
  2025-08-18 23:46     ` Kevin Chadwick
  1 sibling, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-18 23:27 UTC (permalink / raw)


On Mon, 18 Aug 2025 13:08:32 +0200, Dmitry A. Kazakov wrote:

> What Richard refers to is an accuracy of mapping a type to the problem
> space. Talking about numerical entities the model types have precision,
> range, accuracy (float vs. fixed-point vs. unbounded), behavior like
> rounding, handling of exceptional states (breaking out the model) etc.

Subclassing?

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-18 23:27   ` Lawrence D’Oliveiro
@ 2025-08-18 23:46     ` Kevin Chadwick
  0 siblings, 0 replies; 125+ messages in thread
From: Kevin Chadwick @ 2025-08-18 23:46 UTC (permalink / raw)


On 19/08/2025 00:27, Lawrence D\x19Oliveiro wrote:
>On Mon, 18 Aug 2025 13:08:32 +0200, Dmitry A. Kazakov wrote:
>
>> What Richard refers to is an accuracy of mapping a type to the problem
>> space. Talking about numerical entities the model types have precision,
>> range, accuracy (float vs. fixed-point vs. unbounded), behavior like
>> rounding, handling of exceptional states (breaking out the model) etc.
>
>Subclassing?

For example engineering parameters so only valid inputs are possible using
 e.g. ranges. That could be a subtype or new type etc..

-- 
Regards, Kc

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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:40         ` Lawrence D’Oliveiro
  2025-08-20 18:10       ` Niklas Holsti
  2 siblings, 2 replies; 125+ messages in thread
From: J-P. Rosen @ 2025-08-19  6:24 UTC (permalink / raw)


Le 18/08/2025 à 17:03, Dmitry A. Kazakov a écrit :
 >> Ada is a strongly typed language so Ada is not an OOP language.
 >
 > Ada is a strongly typed OO language.

More precisely:
OOP implies a weakening of the typing system, since a wider class can 
contain any object of the subclass.
But in Ada, this can happen only for objects of a class-wide type; so 
you get it only if you ask for it, and you immediately know from the 
type of an object which values it can hold.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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  0:40         ` Lawrence D’Oliveiro
  1 sibling, 2 replies; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-19  7:29 UTC (permalink / raw)


On 2025-08-19 08:24, J-P. Rosen wrote:
> Le 18/08/2025 à 17:03, Dmitry A. Kazakov a écrit :
>  >> Ada is a strongly typed language so Ada is not an OOP language.
>  >
>  > Ada is a strongly typed OO language.
> 
> More precisely:
> OOP implies a weakening of the typing system, since a wider class can 
> contain any object of the subclass.
> But in Ada, this can happen only for objects of a class-wide type; so 
> you get it only if you ask for it, and you immediately know from the 
> type of an object which values it can hold.

Yes, however class-wide objects only behave as if they held specific 
type objects. The class-wide type is still a different type, so the type 
system remains strong.

Constrained subtypes are even "weaker" in that respect, e.g. Positive 
vs. Integer.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-19  6:24       ` J-P. Rosen
  2025-08-19  7:29         ` 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
  1 sibling, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-20  0:40 UTC (permalink / raw)


On Tue, 19 Aug 2025 08:24:23 +0200, J-P. Rosen wrote:

> OOP implies a weakening of the typing system, since a wider class can
> contain any object of the subclass.

Or conversely, a strengthening, since operations defined only on a 
subclass will not work on the superclass.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-19  7:29         ` Dmitry A. Kazakov
@ 2025-08-20  0:41           ` Lawrence D’Oliveiro
  2025-08-20 15:49           ` Kevin Chadwick
  1 sibling, 0 replies; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-20  0:41 UTC (permalink / raw)


On Tue, 19 Aug 2025 09:29:25 +0200, Dmitry A. Kazakov wrote:

> Constrained subtypes are even "weaker" in that respect, e.g. Positive
> vs. Integer.

Subtype restrictions can overlap. In OOP I suppose you would get an 
analogous effect via multiple inheritance.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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
  0 siblings, 1 reply; 125+ messages in thread
From: Niocláisín Cóilín de Ghlostéir @ 2025-08-20 13:59 UTC (permalink / raw)


On Wed, 20 Aug 2025, so became written:
|-----------------------------------------------------------------------|
|"On Tue, 19 Aug 2025 08:24:23 +0200, J-P. Rosen wrote:                 |
|                                                                       |
|> OOP implies a weakening of the typing system, since a wider class can|
|> contain any object of the subclass.                                  |
|                                                                       |
|Or conversely, a strengthening, since operations defined only on a     |
|subclass will not work on the superclass."                             |
|-----------------------------------------------------------------------|

Operations defined only on a subclass would result in a superclass (or any 
unrelated class) receivng a message which does not match its protocol so 
it would crash. That is OOP. We do not need that. That is not Ada. We need 
Ada.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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
  0 siblings, 1 reply; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-20 14:58 UTC (permalink / raw)


On 2025-08-20 15:59, Niocláisín Cóilín de Ghlostéir wrote:
> On Wed, 20 Aug 2025, so became written:
> |-----------------------------------------------------------------------|
> |"On Tue, 19 Aug 2025 08:24:23 +0200, J-P. Rosen wrote:                 |
> |                                                                       |
> |> OOP implies a weakening of the typing system, since a wider class can|
> |> contain any object of the subclass.                                  |
> |                                                                       |
> |Or conversely, a strengthening, since operations defined only on a     |
> |subclass will not work on the superclass."                             |
> |-----------------------------------------------------------------------|
> 
> Operations defined only on a subclass would result in a superclass (or 
> any unrelated class) receivng a message which does not match its 
> protocol so it would crash. That is OOP. We do not need that. That is 
> not Ada. We need Ada.

Class is a set of types. Subclass is a subset of types.

In Ada's OO a subclass is a set of types derived from some type:

    S <: T

Then S'Class is a subclass of T'Class. E.g.

    type T is tagged ...;
    type S is new T with ...;  -- S'Class is a subclass of T'Class

In no way an operation declared on S:

    procedure F (X : in out S);

can be called on T. Ada is type safe.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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
  1 sibling, 1 reply; 125+ messages in thread
From: Kevin Chadwick @ 2025-08-20 15:49 UTC (permalink / raw)


I get lost in OOP talk. So much...meh.

>
>Constrained subtypes are even "weaker" in that respect, e.g. Positive 
>vs. Integer.

I don't understand this point as you can just use new types instead of
 subtypes as needed.

-- 
Regards, Kc

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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
  0 siblings, 1 reply; 125+ messages in thread
From: Niocláisín Cóilín de Ghlostéir @ 2025-08-20 17:18 UTC (permalink / raw)


On Wed, 20 Aug 2025, Dmitry A. Kazakov wrote:
|-----------------------------------------------------------------|
|"Then S'Class is a subclass of T'Class. E.g.                     |
|                                                                 |
|   type T is tagged ...;                                         |
|   type S is new T with ...;  -- S'Class is a subclass of T'Class|
|                                                                 |
|In no way an operation declared on S:                            |
|                                                                 |
|   procedure F (X : in out S);                                   |
|                                                                 |
|can be called on T. Ada is type safe."                           |
|-----------------------------------------------------------------|

So Ada is not an OOP language. Cf. Professor Alan Curtis Kay says:
"I don't know of any type systems that

aren't a complete pain, so I still like dynamic typing."
via
HTTPS://userPage.FU-Berlin.De/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_de

Cf. a Smalltalk superclass can receive a subclass message for which no 
superclass counterpart exists, so causing a crash. OOP is poop!

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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-20 18:10       ` Niklas Holsti
  2025-08-20 18:54         ` Kevin Chadwick
  2025-08-20 19:10         ` Niocláisín Cóilín de Ghlostéir
  2 siblings, 2 replies; 125+ messages in thread
From: Niklas Holsti @ 2025-08-20 18:10 UTC (permalink / raw)


On 2025-08-18 18:03, Dmitry A. Kazakov wrote:
> On 2025-08-18 15:59, Niocláisín Cóilín de Ghlostéir wrote:
>> On Mon, 18 Aug 2025, Dmitry A. Kazakov wrote:
>> |-----------------------------------------------------------------------------|
>> |"These are unrelated issues. Strong typing is 
>> about:                         |
>> |                                                                             |
>> |1. Any object has a type. Note that many OO languages violate this 
>> principle,|
>> |but not Ada which has T'Class and T 
>> separate.                                |
>> |                                                                             |
>> |[. . 
>> .]"                                                                     |
>> |-----------------------------------------------------------------------------|
>>
>> Ada is a strongly typed language so Ada is not an OOP language.
> 
> Ada is a strongly typed OO language.


I would say: Ada supports object-oriented programming, but also supports 
other programming paradigms. So calling Ada an "OO language" is saying 
too little.

Some people called Ada 83 an "object-based" language, perhaps because 
Ada programs typically modelled the real application objects (as 
abstract data types) even before tagged types were available.

It seems to me that the strength of typing in a language is mostly 
orthogonal to the differences between object-oriented programming and 
other paradigms.

But I understand that some people may feel that the "freedom" of weak or 
duck typing is important to their personal programming style, and 
perhaps especially so for object-oriented programming where it has a 
long history, as shown by other posts in this thread.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-20 18:10       ` Niklas Holsti
@ 2025-08-20 18:54         ` Kevin Chadwick
  2025-08-22  1:27           ` Alastair Hogge
  2025-08-20 19:10         ` Niocláisín Cóilín de Ghlostéir
  1 sibling, 1 reply; 125+ messages in thread
From: Kevin Chadwick @ 2025-08-20 18:54 UTC (permalink / raw)



>
>Some people called Ada 83 an "object-based" language, perhaps because 
>Ada programs typically modelled the real application objects (as 
>abstract data types) even before tagged types were available.
>

This guy researched the origins of OOP with a focus on C++ apparently
 botching it up. I'm not sure how interesting anyone might find it to be.

"https://youtu.be/wo84LFzx5nI"

-- 
Regards, Kc

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-20 15:49           ` Kevin Chadwick
@ 2025-08-20 19:00             ` Dmitry A. Kazakov
  0 siblings, 0 replies; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-20 19:00 UTC (permalink / raw)


On 2025-08-20 17:49, Kevin Chadwick wrote:
> I get lost in OOP talk. So much...meh.
> 
>> Constrained subtypes are even "weaker" in that respect, e.g. Positive 
>> vs. Integer.
> 
> I don't understand this point as you can just use new types instead of
> subtypes as needed.

The point is about the types algebra. If you have any relations between 
types => substitution, you necessarily weaken typing.

Of course you can have nothing of that, but then you loose generic 
programming = programming in terms of sets of types (closed by some 
relation.)

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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
  0 siblings, 1 reply; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-20 19:04 UTC (permalink / raw)


On 2025-08-20 19:18, Niocláisín Cóilín de Ghlostéir wrote:

> So Ada is not an OOP language. Cf. Professor Alan Curtis Kay says:

To be clear, I don't care what Prof. Kay says.

> Cf. a Smalltalk superclass can receive a subclass message for which no 
> superclass counterpart exists, so causing a crash. OOP is poop!

I care even less about Smalltalk. It is about Ada. I explained that your 
suggestion about Ada subclasses evidently wrong.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-20 18:10       ` Niklas Holsti
  2025-08-20 18:54         ` Kevin Chadwick
@ 2025-08-20 19:10         ` Niocláisín Cóilín de Ghlostéir
  1 sibling, 0 replies; 125+ messages in thread
From: Niocláisín Cóilín de Ghlostéir @ 2025-08-20 19:10 UTC (permalink / raw)


On Wed, 20 Aug 2025, Niklas Holsti wrote:
|--------------------------------------------------------------------------|
|"Some people called Ada 83 an "object-based" language, perhaps because Ada|
|programs typically modelled the real application objects (as abstract data|
|types) even before tagged types were available."                          |
|--------------------------------------------------------------------------|

Dear Dr. Holsti,

Thanks for this contribution.

The person who coined "object-based" professes that OOP necessarily 
involves inheritance, whereas "object-based" programming does not. 
However, he did not coin "OOP".

Even \cite{Objective-C} professes that inheritence is not necessary for 
OOP. (But then again, it is not by Alan Curtis Kay, and it professes that 
Objective C be an OOP language, so do not rely on it for what an "OOP" 
language is!)

"OOP to me means only messaging, local retention and protection and

hiding of state-process, and extreme late-binding of all things."
says
HTTPS://userPage.FU-Berlin.De/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_de
It might be possible to interpret this quotation to not necessitate 
inheritance, even with the part about "extreme late-binding of all 
things."


@book{Objective-C,
  author = {Cox, Brad J.},
  title = {Object oriented programming: an evolutionary approach},
  year = {1987},
  note = {``Reprinted with corrections April, 1987
Copyright {\copyright} 1986 by Productivity Products International, 
Inc.''},
  publisher = {Addison-Wesley}
  }

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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-21  1:31                     ` Keith Thompson
  0 siblings, 2 replies; 125+ messages in thread
From: Niocláisín Cóilín de Ghlostéir @ 2025-08-20 20:38 UTC (permalink / raw)


[-- Attachment #1: Type: text/plain, Size: 1727 bytes --]

On Wed, 20 Aug 2025, Dmitry A. Kazakov wrote:
|------------------------------------------------------------------------|
|"On 2025-08-20 19:18, Niocláisín Cóilín de Ghlostéir wrote:             |
|                                                                        |
|> So Ada is not an OOP language. Cf. Professor Alan Curtis Kay says:    |
|                                                                        |
|To be clear, I don't care what Prof. Kay says."                         |
|------------------------------------------------------------------------|

Please stop misusing a term which Prof. Kay coined. If you do not care 
about what Prof. Kay says, then you do not care about object orientation. 
It is fair enough for some person to not care about object orientation. 
Instead, incorrectly boasting about being an OO expert who writes in an OO 
language when this languague - Ada - is not an OO language is a bad idea, 
so please stop so.

|-------------------------------------------------------------------------|
|"> Cf. a Smalltalk superclass can receive a subclass message for which no|
|> superclass counterpart exists, so causing a crash. OOP is poop!        |
|                                                                         |
|I care even less about Smalltalk. It is about Ada. I explained that your |
|suggestion about Ada subclasses evidently wrong."                        |
|-------------------------------------------------------------------------|

I made no "suggestion about Ada subclasses" in this thread, as I clearly 
referred to an OOP language so clearly excluding Ada. Indeed, you actually 
quote me saying: "So Ada is not an OOP language."!

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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  1:31                     ` Keith Thompson
  1 sibling, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-20 21:59 UTC (permalink / raw)


On Wed, 20 Aug 2025 22:38:25 +0200, Niocláisín Cóilín de Ghlostéir wrote:

> Please stop misusing a term which Prof. Kay coined.

Did he trademark the term? Or does he own the copyright on it? Did he even 
invent the concept?

No, no and no.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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
  0 siblings, 1 reply; 125+ messages in thread
From: Niocláisín Cóilín de Ghlostéir @ 2025-08-20 23:37 UTC (permalink / raw)


The person who invented the word that is "square" did not trademark it; 
did not copyright it; and did not invent the first square. Another thing 
which he did not do is wanting persons to call circles "squares". If 
persons want to talk about circles, then they must not call them 
"squares".

Cf.
HTTPS://WWW.JewishLearningMatters.com/Lesson2-The-Holocaust-The-Role-of-Propaganda-1778.aspx
(but I fail to find any plausible evidence that Goebbels ever really did 
say any such thing about circles and squares).

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-20 20:38                   ` Niocláisín Cóilín de Ghlostéir
  2025-08-20 21:59                     ` Lawrence D’Oliveiro
@ 2025-08-21  1:31                     ` Keith Thompson
  1 sibling, 0 replies; 125+ messages in thread
From: Keith Thompson @ 2025-08-21  1:31 UTC (permalink / raw)


Niocláisín Cóilín de Ghlostéir <Spamassassin@irrt.De> writes:
> On Wed, 20 Aug 2025, Dmitry A. Kazakov wrote:
> |------------------------------------------------------------------------|
> |"On 2025-08-20 19:18, Niocláisín Cóilín de Ghlostéir wrote:             |
> |                                                                        |
> |> So Ada is not an OOP language. Cf. Professor Alan Curtis Kay says:    |
> |                                                                        |
> |To be clear, I don't care what Prof. Kay says."                         |
> |------------------------------------------------------------------------|
>
> Please stop misusing a term which Prof. Kay coined. If you do not care 
> about what Prof. Kay says, then you do not care about object orientation. 

Nonsense.  Alan Kay has his own definition of "OOP", but that
definition is not binding on the rest of us.

Smalltalk-style and Simula-style models can both reasonably be
called OOP.

If you happen not to like languages that claim to be OOP but don't
conform to Alan Kay's definition, that's fine, but I don't see
that there's a lot more to say about it.  If you want to discuss
the benefits of one flavor of OOP over another, I suggest that
comp.lang.ada is not the best place for that discussion.

You don't think Ada is OOP.  That's fine.  You're entitled to
your opinion.  But demanding that others must agree with you (and,
I suppose, with Alan Kay) is not useful.  You're not going to change
anyone's minds with appeals to authority.

> It is fair enough for some person to not care about object orientation. 
> Instead, incorrectly boasting about being an OO expert who writes in an OO 
> language when this languague - Ada - is not an OO language is a bad idea, 
> so please stop so.

No.

And please learn to use your newsreader properly.  Quoted text is
conventionally prefixed with "> ", not surrounded by ugly ASCII
boxes.  Using a radically different format for your posts just
makes them more difficult to read.

> |-------------------------------------------------------------------------|
> |"> Cf. a Smalltalk superclass can receive a subclass message for which no|
> |> superclass counterpart exists, so causing a crash. OOP is poop!        |
> |                                                                         |
> |I care even less about Smalltalk. It is about Ada. I explained that your |
> |suggestion about Ada subclasses evidently wrong."                        |
> |-------------------------------------------------------------------------|
>
> I made no "suggestion about Ada subclasses" in this thread, as I clearly 
> referred to an OOP language so clearly excluding Ada. Indeed, you actually 
> quote me saying: "So Ada is not an OOP language."!

This is comp.lang.ada.  If you want to compare Ada to other languages,
that's fine.  If you want to talk about other languages to the
exclusion of Ada, this is not the place.

-- 
Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com
void Void(void) { Void(); } /* The recursive call of the void */

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-20 23:37                       ` Niocláisín Cóilín de Ghlostéir
@ 2025-08-21 21:37                         ` Lawrence D’Oliveiro
  0 siblings, 0 replies; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-21 21:37 UTC (permalink / raw)


On Thu, 21 Aug 2025 01:37:37 +0200, Niocláisín Cóilín de Ghlostéir wrote:

> Another thing which he did not do is wanting persons to call circles
> "squares".

How did you know? Did you ask?

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-20 18:54         ` Kevin Chadwick
@ 2025-08-22  1:27           ` Alastair Hogge
  2025-08-22 12:49             ` Kevin Chadwick
  0 siblings, 1 reply; 125+ messages in thread
From: Alastair Hogge @ 2025-08-22  1:27 UTC (permalink / raw)


On Wed, 20 Aug 2025 18:54:50 +0000, Kevin Chadwick wrote:


>>Some people called Ada 83 an "object-based" language, perhaps because
>>Ada programs typically modelled the real application objects (as
>>abstract data types) even before tagged types were available.
>>
>>
> This guy researched the origins of OOP with a focus on C++ apparently
>  botching it up. I'm not sure how interesting anyone might find it to
>  be.
> 
> "https://youtu.be/wo84LFzx5nI"

It is with increasing frequency that video presentations, or plain-old 
written articles are making these assertions about OOP, and it's origins, 
and obvious problems in the context of C++. They all ignore Ada, and the 
Lisps, and their contributions, and their sound design in the context of 
OOP. This is a deliberate, disingenuous attack on the viewer's intellect, 
it is an extremely low quality of pedagogy, the only aim of which, is to 
increase the author's social capital.

Casey's presentation is part of a longer history of their critique on C++ 
"OOP" (and good on them, because C++ is a stain on the construction of 
computer science), unfortunately, Casey and the rest stopped being 
humorous years ago, and their over-confident conviction, based on a fad to 
reject critical thinking, and substituting history with their own "modes 
of truth", or their "play on words, and meaning" now become insufferable 
to observe (mostly because of their emphasis on rhetoric, over reason and 
logic, draw too many parallels with conservatism, bordering on proto-
fascism)—the post-modern condition, what an absurd load of shit the world 
now produces.

-- 
To health and anarchy

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-22  1:27           ` Alastair Hogge
@ 2025-08-22 12:49             ` Kevin Chadwick
  2025-08-22 22:13               ` Lawrence D’Oliveiro
  0 siblings, 1 reply; 125+ messages in thread
From: Kevin Chadwick @ 2025-08-22 12:49 UTC (permalink / raw)



>
>It is with increasing frequency that video presentations, or plain-old 
>written articles are making these assertions about OOP, and it's origins, 
>and obvious problems in the context of C++. They all ignore Ada, and the 
>Lisps, and their contributions, and their sound design in the context of 
>OOP.

The ignorance of Ada is frustrating but certainly a lot of the newer
 languages are avoiding atleast inheritance (Go, Rust, Odin and Zig).
 Personally I have only used any OOP features in Dart and Ada. In Dart I
 hate the seemingly excessive boiler plate. In Ada I rarely use tagged types
 as they are incompatible with sized record representation which I love
 (perhaps that has changed recently but I don't think so). I therefore know
 little about OOP and I haven't liked inheritance when I have used it. I
 also actually found myself disagreeing with Grady Booch objects are a
 better way diagrams in his Ada books to be honest though. So the point
 about OOP being incompatible with systems thinking might stand.

-- 
Regards, Kc

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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  0:26                 ` Kevin Chadwick
  0 siblings, 2 replies; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-22 22:13 UTC (permalink / raw)


On Fri, 22 Aug 2025 12:49:54 -0000 (UTC), Kevin Chadwick wrote:

> Personally I have only used any OOP features in Dart and Ada. In Dart I
> hate the seemingly excessive boiler plate.

Try Python. Both functions and classes are first-class objects, so there 
is little or no “boilerplate”.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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-23  0:26                 ` Kevin Chadwick
  1 sibling, 1 reply; 125+ messages in thread
From: Niocláisín Cóilín de Ghlostéir @ 2025-08-22 23:21 UTC (permalink / raw)


[-- Attachment #1: Type: text/plain, Size: 2614 bytes --]

On Fri, 22 Aug 2025, Lawrence D’Oliveiro wrote:
|-------------------------------------------------------------------------|
|"On Fri, 22 Aug 2025 12:49:54 -0000 (UTC), Kevin Chadwick wrote:         |
|                                                                         |
|> Personally I have only used any OOP features in Dart and Ada. In Dart I|
|> hate the seemingly excessive boiler plate.                             |
|                                                                         |
|Try Python. Both functions and classes are first-class objects, so there |
|is little or no “boilerplate”."                                          |
|-------------------------------------------------------------------------|

"How Python and Rust handle errors is entirely different. Python will 
throw an exception when an error is encountered. Rust will return a value 
when an error is found, while Python will simply throw an error without 
providing any suggestions on how to fix it. Meanwhile, Rust will provide 
some recommendations to easily pinpoint and fix the issues."
alleges
Victor Lvovich Porton, "Python vs Rust: Choosing Your Language - Teach 
Sector", 2022,
HTTPS://TeachSector.com/python-vs-rust-choosing-your-language

"Switch your mind from nervous mode of finding bugs in your Python 
software (Have you ever mistyped an identifier?) to calm mode of 
multiparadigm programming language of increased reliability."
says
Victor Lvovich Porton, "Learn D Programming Language for Python 
programmers", 2025,
HTTPS://TeachSector.com/dforpython

Cf.
"The dynamic nature of Python usually leads to many programming errors in 
Python code, while D usually catches such errors in the compilation 
stage. This makes it easier to write correct code in D."
alleges
Victor Lvovich Porton, "The Best Python Alternative You Can Find – Course 
and Certifications - Teach Sector", 2025,
HTTPS://TeachSector.com/the-best-python-alternative-you-can-find-course-and-certifications

Cf.
"For OO paradigm it might be important, assuming Python 
implements them correctly, which I honestly doubt."
says
Dmitry A. Kazakov, "Re: Is Python higher level than Ada?",
HTTPS://Usenet.Ada-Lang.IO/comp.lang.ada/o0h7tt$1o9f$1@gioia.aioe.org

Also cf.
Jeffrey R. Carter, "Re: Is Python higher level than Ada?",
Wed, 16 Nov 2016 09:08:37 -0700
Message-ID: <o0i099$fg8$1@dont-email.me>
and
Nasser M. Abbasi, "Java and Python have just discovered 
"record" type finally after 40 years.",
Fri, 12 May 2023 12:50:14 -0500
Message-ID: <u3lu8o$1p3li$1@dont-email.me>

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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  0:26                 ` Kevin Chadwick
  2025-08-23 22:59                   ` Lawrence D’Oliveiro
  1 sibling, 1 reply; 125+ messages in thread
From: Kevin Chadwick @ 2025-08-23  0:26 UTC (permalink / raw)


\r>Try Python.

No thank you. Very happy with Ada. In fact I plan to run Ada as the business
 logic within Flutter via FFI assuming the boiler plate of that isn't too
 bad.

-- 
Regards, Kc

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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
  0 siblings, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-23 22:58 UTC (permalink / raw)


On Sat, 23 Aug 2025 01:21:56 +0200, Niocláisín Cóilín de Ghlostéir
wrote:

> "... while Python will simply throw an error without providing any
> suggestions on how to fix it."

    ldo@theon:~> python3
    Python 3.13.7 (main, Aug 20 2025, 22:17:40) [GCC 14.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import math
    >>> print(math.arcsin(1))
    Traceback (most recent call last):
      File "<python-input-1>", line 1, in <module>
        print(math.arcsin(1))
              ^^^^^^^^^^^
    AttributeError: module 'math' has no attribute 'arcsin'. Did you mean: 'asin'?

> Cf.
> "For OO paradigm it might be important, assuming Python implements them
> correctly, which I honestly doubt."
> says Dmitry A. Kazakov, "Re: Is Python higher level than Ada?",
> HTTPS://Usenet.Ada-Lang.IO/comp.lang.ada/o0h7tt$1o9f$1@gioia.aioe.org

Really?? Trying to say Ada is better than OO than Python, a language
that has classes as first-class objects?

(More obviously rubbish ones omitted.)

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-23  0:26                 ` Kevin Chadwick
@ 2025-08-23 22:59                   ` Lawrence D’Oliveiro
  2025-08-23 23:58                     ` Kevin Chadwick
  0 siblings, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-23 22:59 UTC (permalink / raw)


On Sat, 23 Aug 2025 00:26:11 -0000 (UTC), Kevin Chadwick wrote:

>> Try Python. Both functions and classes are first-class objects, so
>> there is little or no “boilerplate”.
> 
> No thank you. Very happy with Ada.

And all its boilerplate?

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-23 22:59                   ` Lawrence D’Oliveiro
@ 2025-08-23 23:58                     ` Kevin Chadwick
  2025-08-24 21:49                       ` Lawrence D’Oliveiro
  0 siblings, 1 reply; 125+ messages in thread
From: Kevin Chadwick @ 2025-08-23 23:58 UTC (permalink / raw)


On 23/08/2025 23:59, Lawrence D\x19Oliveiro wrote:
>On Sat, 23 Aug 2025 00:26:11 -0000 (UTC), Kevin Chadwick wrote:
>
>>> Try Python. Both functions and classes are first-class objects, so
>>> there is little or no “boilerplate”.
>> 
>> No thank you. Very happy with Ada.
>
>And all its boilerplate?

There isn't any boilerplate if you don't use tagged types. Though to be fair
 Darts boilerplate dissapears if you use it procedurally without OOP too.
 However Darts OOP has a lot more than Adas e.g. access type to avoid issues
 with size variations and composites etc.. Adas C interfacing has far less
 boilerplate than Darts FFI too. I don't know Python and don't want to.
 Micropython is C and some say Python is C too.

-- 
Regards, Kc

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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 21:50                       ` Lawrence D’Oliveiro
  0 siblings, 2 replies; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-24  8:37 UTC (permalink / raw)


On 2025-08-24 00:58, Lawrence D’Oliveiro wrote:

>> "For OO paradigm it might be important, assuming Python implements them
>> correctly, which I honestly doubt."
>> says Dmitry A. Kazakov, "Re: Is Python higher level than Ada?",
>> HTTPS://Usenet.Ada-Lang.IO/comp.lang.ada/o0h7tt$1o9f$1@gioia.aioe.org
> 
> Really?? Trying to say Ada is better than OO than Python, a language
> that has classes as first-class objects?

Well, I maintain Ada Python bindings. When I looked at Python "derived" 
types in its API, I was astounded by a total lack of inheritance. The 
base type representation gets overridden by the new. Nothing is 
inherited at all!

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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:50                       ` Lawrence D’Oliveiro
  1 sibling, 1 reply; 125+ messages in thread
From: Niocláisín Cóilín de Ghlostéir @ 2025-08-24 11:05 UTC (permalink / raw)


On Sun, 24 Aug 2025, Dmitry A. Kazakov wrote:
|---------------------------------------------------------|
|"When I looked at Python "derived" types in              |
|its API, I was astounded by a total lack of inheritance."|
|---------------------------------------------------------|

Cf. the Java Compiler Compiler makes switch statements.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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
  0 siblings, 1 reply; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-24 12:59 UTC (permalink / raw)


On 2025-08-24 13:05, Niocláisín Cóilín de Ghlostéir wrote:
> On Sun, 24 Aug 2025, Dmitry A. Kazakov wrote:
> |---------------------------------------------------------|
> |"When I looked at Python "derived" types in              |
> |its API, I was astounded by a total lack of inheritance."|
> |---------------------------------------------------------|
> 
> Cf. the Java Compiler Compiler makes switch statements.

The Burmese python (Python bivittatus) is found on the island of Java in 
Indonesia...

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-23 23:58                     ` Kevin Chadwick
@ 2025-08-24 21:49                       ` Lawrence D’Oliveiro
  2025-08-25  8:19                         ` Dmitry A. Kazakov
  0 siblings, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-24 21:49 UTC (permalink / raw)


On Sat, 23 Aug 2025 23:58:12 -0000 (UTC), Kevin Chadwick wrote:

> Micropython is C and some say Python is C too.

Python is Python, not C. It has strong dynamic typing and lexical binding, 
and functions and classes are first-class objects.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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 21:50                       ` Lawrence D’Oliveiro
  2025-08-25  8:19                         ` Dmitry A. Kazakov
  1 sibling, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-24 21:50 UTC (permalink / raw)


On Sun, 24 Aug 2025 10:37:53 +0200, Dmitry A. Kazakov wrote:

> Well, I maintain Ada Python bindings. When I looked at Python "derived"
> types in its API, I was astounded by a total lack of inheritance.

Don’t know what you mean. Python not only has inheritance, it has full 
multiple inheritance with C3 linearization. It also has metaclasses. 
Because classes, like functions, are first-class objects.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-24 12:59                         ` Dmitry A. Kazakov
@ 2025-08-24 21:51                           ` Lawrence D’Oliveiro
  0 siblings, 0 replies; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-24 21:51 UTC (permalink / raw)


On Sun, 24 Aug 2025 14:59:30 +0200, Dmitry A. Kazakov wrote:

> The Burmese python (Python bivittatus) is found on the island of Java in
> Indonesia...

Fun fact: the name of the language “Python” has nothing to do with snakes.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-24 21:49                       ` Lawrence D’Oliveiro
@ 2025-08-25  8:19                         ` Dmitry A. Kazakov
  2025-08-25 20:58                           ` Lawrence D’Oliveiro
  0 siblings, 1 reply; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-25  8:19 UTC (permalink / raw)


On 2025-08-24 23:49, Lawrence D’Oliveiro wrote:
> On Sat, 23 Aug 2025 23:58:12 -0000 (UTC), Kevin Chadwick wrote:
> 
>> Micropython is C and some say Python is C too.
> 
> Python is Python, not C. It has strong dynamic typing and lexical binding,
> and functions and classes are first-class objects.

Python is a C front-end... (:-))

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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 21:10                           ` Lawrence D’Oliveiro
  0 siblings, 2 replies; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-25  8:19 UTC (permalink / raw)


On 2025-08-24 23:50, Lawrence D’Oliveiro wrote:
> On Sun, 24 Aug 2025 10:37:53 +0200, Dmitry A. Kazakov wrote:
> 
>> Well, I maintain Ada Python bindings. When I looked at Python "derived"
>> types in its API, I was astounded by a total lack of inheritance.
> 
> Don’t know what you mean.

https://docs.python.org/3/c-api/type.html

PyType_FromSpec etc.

> Python not only has inheritance, it has full
> multiple inheritance with C3 linearization.

No members are inherited. E.g. in Ada

type T is tagged record
    M : Integer;
end record;

type S is new T with record -- S is derived from T
    N : Float;
end record;

declare
    X : S;
begin
    X.M := 1; -- M is inherited

https://stackoverflow.com/questions/10064688/cant-access-parent-member-variable-in-python

Not to say that nothing is checked etc. Expecting that from an untyped 
language would be silly anyway.

But in OO it is incorrect to inherit covariant methods with arguments in 
the out or in-out mode, for example methods returning the type from the 
class:

function Covariant return T;

This would be broken for obvious reasons. So in a properly typed OO 
language, like Ada, you will be required to override Covariant upon 
derivation from T:

overriding
    function Covariant return S;

> It also has metaclasses.
> Because classes, like functions, are first-class objects.

A useless thing in an untyped language and in general one should first 
question what could be the purpose of a set of a set of types? Provided 
one could implement that thing (let's ignore pitiful Python), What 
algorithmic problems one could solve with that?

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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 21:10                           ` Lawrence D’Oliveiro
  1 sibling, 1 reply; 125+ messages in thread
From: Paul Rubin @ 2025-08-25  8:51 UTC (permalink / raw)


"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> writes:
>> It also has metaclasses.
>> Because classes, like functions, are first-class objects.
>
> A useless thing in an untyped language and in general one should first
> question what could be the purpose of a set of a set of types?

Python metaclasses let you specify what is supposed to happen when you
instantiate a class, and that sort of thing.  I.e. it's about runtime
behaviour.

> Provided one could implement that thing (let's ignore pitiful Python),
> What algorithmic problems one could solve with that?

Types in general aren't for solving algorithmic problems.  Thus the
Turing tarpit.  Types are for being able to enforce rules about program
behaviour.

This is still worth reading:

https://cdsmith.wordpress.com/2011/01/09/an-old-article-i-wrote/

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-25  8:51                           ` Paul Rubin
@ 2025-08-25 10:41                             ` Dmitry A. Kazakov
  2025-08-25 17:12                               ` Paul Rubin
  0 siblings, 1 reply; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-25 10:41 UTC (permalink / raw)


On 2025-08-25 10:51, Paul Rubin wrote:
> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> writes:
>>> It also has metaclasses.
>>> Because classes, like functions, are first-class objects.
>>
>> A useless thing in an untyped language and in general one should first
>> question what could be the purpose of a set of a set of types?
> 
> Python metaclasses let you specify what is supposed to happen when you
> instantiate a class, and that sort of thing.  I.e. it's about runtime
> behaviour.

Why do I need to instantiate a class? Provided that it is obviously 
impossible since the class is an open set of types. I simply cannot know 
what is in it. E.g. I can load a DLL at run-time and derive new types there.

The run-time behavior is not defined by "instantiation." It is partly by 
the root type specification and partly by the implementations of the 
class members = specific types.

>> Provided one could implement that thing (let's ignore pitiful Python),
>> What algorithmic problems one could solve with that?
> 
> Types in general aren't for solving algorithmic problems.  Thus the
> Turing tarpit.  Types are for being able to enforce rules about program
> behaviour.

... and the program behavior is about solving algorithmic problems.

In the hierarchy:

value
type (a set of values)
class (a set of types)
metaclass (a set of classes)

What sort of problems metaclass is supposed to help solving, describing, 
abstracting. What is a closure operation of. E.g. dynamically 
polymorphic classes are closed upon type derivation. What would be the 
type algebraic operation to construct a set of sets of types? What are 
the typical properties shared by the members of a metaclass?

You can continue the above hierarchy ad infinitum and beyond. But what for?

> This is still worth reading:
> 
> https://cdsmith.wordpress.com/2011/01/09/an-old-article-i-wrote/

It does not mention types of types.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-25 10:41                             ` Dmitry A. Kazakov
@ 2025-08-25 17:12                               ` Paul Rubin
  2025-08-25 20:09                                 ` Dmitry A. Kazakov
  0 siblings, 1 reply; 125+ messages in thread
From: Paul Rubin @ 2025-08-25 17:12 UTC (permalink / raw)


"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> writes:
> Why do I need to instantiate a class? Provided that it is obviously
> impossible since the class is an open set of types.

You aren't using the term "class" the way Python or the rest of the OOP
world does.  You also aren't in charge of which usage is "correct".  The
term is used in many different ways.

You can read more about metaclasses here:

   https://en.wikipedia.org/wiki/Metaclass

The article gives a Python example.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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-25 21:27                                   ` Paul Rubin
  0 siblings, 2 replies; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-25 20:09 UTC (permalink / raw)


On 2025-08-25 19:12, Paul Rubin wrote:
> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> writes:
>> Why do I need to instantiate a class? Provided that it is obviously
>> impossible since the class is an open set of types.
> 
> You aren't using the term "class" the way Python or the rest of the OOP
> world does.

Call the thing (a set of types closed under derivation) the way you want.

If class means type, fine. The question remains why should I need to 
instantiate it beyond declaring an object of? E.g. FORTRAN-IV

    REAL*8 X

works fine without classes, metaclasses etc.

> You also aren't in charge of which usage is "correct".  The
> term is used in many different ways.

Can you provide a citation where I said anything about correct wording?

I merely asked you what were a practical purpose of having metaclasses 
in programming without buzz words.

> You can read more about metaclasses here:
> 
>     https://en.wikipedia.org/wiki/Metaclass

 From the text:

"In object-oriented programming, a metaclass is a class whose instances 
are classes themselves"

How is that, except for sloppiness "class is ... a class", different 
from a set of sets of types?

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-25  8:19                         ` Dmitry A. Kazakov
@ 2025-08-25 20:58                           ` Lawrence D’Oliveiro
  2025-08-27  9:01                             ` Kevin Chadwick
  0 siblings, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-25 20:58 UTC (permalink / raw)


On Mon, 25 Aug 2025 10:19:43 +0200, Dmitry A. Kazakov wrote:

> On 2025-08-24 23:49, Lawrence D’Oliveiro wrote:
>>
>> On Sat, 23 Aug 2025 23:58:12 -0000 (UTC), Kevin Chadwick wrote:
>> 
>>> Micropython is C and some say Python is C too.
>> 
>> Python is Python, not C. It has strong dynamic typing and lexical
>> binding, and functions and classes are first-class objects.

With Python, you don’t even need to write C code to interface to C code
<https://docs.python.org/3/library/ctypes.html>.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-25  8:19                         ` Dmitry A. Kazakov
  2025-08-25  8:51                           ` Paul Rubin
@ 2025-08-25 21:10                           ` Lawrence D’Oliveiro
  2025-08-26  8:14                             ` Dmitry A. Kazakov
  2025-08-26  9:06                             ` Dmitry A. Kazakov
  1 sibling, 2 replies; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-25 21:10 UTC (permalink / raw)


On Mon, 25 Aug 2025 10:19:50 +0200, Dmitry A. Kazakov wrote:

> On 2025-08-24 23:50, Lawrence D’Oliveiro wrote:
>>
>> Python not only has inheritance, it has full multiple inheritance
>> with C3 linearization.
> 
> No members are inherited.

    from enum import \
        Enum

    class MYENUM(int, Enum) :
        VAL1 = 1
        VAL3 = 3
    #end MYENUM

    print(isinstance(MYENUM.VAL1, int), isinstance(MYENUM.VAL1, MYENUM))

    True True

    print(MYENUM.VAL1 + 1)

    2

    print(MYENUM(3))

    MYENUM.VAL3

    print(MYENUM(2))

    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)

    [detailed traceback omitted]

    ValueError: 2 is not a valid MYENUM

> Not to say that nothing is checked etc. Expecting that from an untyped
> language would be silly anyway.

Python is strongly typed.

> But in OO it is incorrect to inherit covariant methods with arguments in
> the out or in-out mode ...

That’s OK, because Python only has “in” mode.

>> It also has metaclasses. Because classes, like functions, are
>> first-class objects.
>
> A useless thing in an untyped language ...

Except Python is strongly typed.

> ... and in general one should first question what could be the
> purpose of a set of a set of types?

It does away with the need for generics and a separate compile-time
language for working with them. Instead, you use the same run-time
language as you would for everything else.

Also, this
<https://gitlab.com/ldo/python_topics_notebooks/-/blob/master/Uses%20For%20Metaclasses.ipynb>.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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-25 21:27                                   ` Paul Rubin
  1 sibling, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-25 21:13 UTC (permalink / raw)


On Mon, 25 Aug 2025 22:09:14 +0200, Dmitry A. Kazakov wrote:

> The question remains why should I need to instantiate it beyond
> declaring an object of?

Because in Python a class, like all objects, is created at runtime, not 
compile time.

Think of a class definition, like a function definition, as just a special 
form of assignment statement. It’s not a declaration: every time it is 
executed (“elaborated” if you prefer the Ada term), it creates a new 
object.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-25 20:09                                 ` Dmitry A. Kazakov
  2025-08-25 21:13                                   ` Lawrence D’Oliveiro
@ 2025-08-25 21:27                                   ` Paul Rubin
  2025-08-26  7:27                                     ` Lawrence D’Oliveiro
  1 sibling, 1 reply; 125+ messages in thread
From: Paul Rubin @ 2025-08-25 21:27 UTC (permalink / raw)


"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> writes:
> Call the thing (a set of types closed under derivation) the way you want.

Classes in Python aren't sets of types.  For example, 3 isn't a type,
but in Python 3 it's a member of class 'int'.

    >>> a = 3
    >>> a.__class__
    <class 'int'>

Classes in Python are analogous to types in type theory, but Python
isn't lambda calculus.

    How is that, except for sloppiness "class is ... a class", different
    from a set of sets of types?

Metaclasses in Python are used to control the runtime semantics of newly
created classes.  E.g. what happens when you create a class instance.

It's not really useful to think of Python types as sets.  Python isn't
that mathematical.  You could think of them as sorts, in the sense of
multi-sorted logic.  Each Python value has a label attached to it (the
type tag) that can be inspected at runtime.  Those types are also
sometimes called latent types.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-25 21:27                                   ` Paul Rubin
@ 2025-08-26  7:27                                     ` Lawrence D’Oliveiro
  0 siblings, 0 replies; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-26  7:27 UTC (permalink / raw)


On Mon, 25 Aug 2025 14:27:55 -0700, Paul Rubin wrote:

> It's not really useful to think of Python types as sets.  Python isn't
> that mathematical.

Duck-typing, on the other hand, does make sense in terms of grouping 
Python objects into (possibly overlapping) sets. E.g. a function that 
wants to write to what is nominally an output text file might happily 
accept any object that has a “.write()” method that takes a string 
argument.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-25 21:13                                   ` Lawrence D’Oliveiro
@ 2025-08-26  7:59                                     ` Dmitry A. Kazakov
  2025-08-27  0:13                                       ` Lawrence D’Oliveiro
  0 siblings, 1 reply; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-26  7:59 UTC (permalink / raw)


On 2025-08-25 23:13, Lawrence D’Oliveiro wrote:
> On Mon, 25 Aug 2025 22:09:14 +0200, Dmitry A. Kazakov wrote:
> 
>> The question remains why should I need to instantiate it beyond
>> declaring an object of?
> 
> Because in Python a class, like all objects, is created at runtime, not
> compile time.

You mean type objects:

https://docs.python.org/3/c-api/type.html

so what?

> Think of a class definition, like a function definition, as just a special
> form of assignment statement.

Both are not.

> It’s not a declaration: every time it is
> executed (“elaborated” if you prefer the Ada term), it creates a new
> object.

Definition /= declaration. Executing definition creates an object, just 
like in any language.

You still did not explain what the buzz. If "metaclass" is merely a 
definition then OK. Nothing new, nothing interesting.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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  9:06                             ` Dmitry A. Kazakov
  1 sibling, 1 reply; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-26  8:14 UTC (permalink / raw)


On 2025-08-25 23:10, Lawrence D’Oliveiro wrote:
> On Mon, 25 Aug 2025 10:19:50 +0200, Dmitry A. Kazakov wrote:

>> Not to say that nothing is checked etc. Expecting that from an untyped
>> language would be silly anyway.
> 
> Python is strongly typed.

Yep, as you can pass everything to anything:

def F(X):
    X = X + 1
F(F)

Very, very strong typing!

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-25 21:10                           ` Lawrence D’Oliveiro
  2025-08-26  8:14                             ` Dmitry A. Kazakov
@ 2025-08-26  9:06                             ` Dmitry A. Kazakov
  1 sibling, 0 replies; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-26  9:06 UTC (permalink / raw)


On 2025-08-25 23:10, Lawrence D’Oliveiro wrote:
> On Mon, 25 Aug 2025 10:19:50 +0200, Dmitry A. Kazakov wrote:

>> But in OO it is incorrect to inherit covariant methods with arguments in
>> the out or in-out mode ...
> 
> That’s OK, because Python only has “in” mode.

You must be joking. I cannot return a value from a function?

Ah, yes, in a "strongly" typed Python you cannot tell if there is a 
result nor can you dispatch on it...

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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:36                                 ` Dmitry A. Kazakov
  0 siblings, 2 replies; 125+ messages in thread
From: Paul Rubin @ 2025-08-26 16:48 UTC (permalink / raw)


"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> writes:
> Yep, as you can pass everything to anything:
>
> def F(X):
>    X = X + 1
> F(F)

> Very, very strong typing!

==>  TypeError: unsupported operand type(s) for +: 'function' and 'int'

The typechecking is done at runtime, just like it says on the tin.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-26 16:48                               ` Paul Rubin
@ 2025-08-26 17:01                                 ` Kevin Chadwick
  2025-08-26 19:43                                   ` Dmitry A. Kazakov
                                                     ` (2 more replies)
  2025-08-26 19:36                                 ` Dmitry A. Kazakov
  1 sibling, 3 replies; 125+ messages in thread
From: Kevin Chadwick @ 2025-08-26 17:01 UTC (permalink / raw)


On 26/08/2025 17:48, Paul Rubin wrote:
>"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> writes:
>> Yep, as you can pass everything to anything:
>>
>> def F(X):
>>    X = X + 1
>> F(F)
>
>> Very, very strong typing!
>
>==>  TypeError: unsupported operand type(s) for +: 'function' and 'int'
>
>The typechecking is done at runtime, just like it says on the tin.

Wouldn't that make Python slow and unreliable?

One of the reasons I switched to Ada from Go was all the potential stdlib
 panics.

Regards, Kc

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-26 16:48                               ` Paul Rubin
  2025-08-26 17:01                                 ` Kevin Chadwick
@ 2025-08-26 19:36                                 ` Dmitry A. Kazakov
  2025-08-27  0:10                                   ` Lawrence D’Oliveiro
  1 sibling, 1 reply; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-26 19:36 UTC (permalink / raw)


On 2025-08-26 18:48, Paul Rubin wrote:
> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> writes:
>> Yep, as you can pass everything to anything:
>>
>> def F(X):
>>     X = X + 1
>> F(F)
> 
>> Very, very strong typing!
> 
> ==>  TypeError: unsupported operand type(s) for +: 'function' and 'int'
> 
> The typechecking is done at runtime, just like it says on the tin.

The error occurred inside the body of F. F itself was successfully 
called, because it is untyped. Just as I said.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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:09                                   ` Lawrence D’Oliveiro
  2 siblings, 0 replies; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-26 19:43 UTC (permalink / raw)


On 2025-08-26 19:01, Kevin Chadwick wrote:

> Wouldn't that make Python slow and unreliable?

Python is incredibly slow, but that is not the point. It is untyped and 
thus unsafe. One simply cannot talk about reliability because there is 
no types to be checked, no interfaces, no contracts, nothing. In no way 
you could reason about program correctness without running it.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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
                                                       ` (2 more replies)
  2025-08-27  0:09                                   ` Lawrence D’Oliveiro
  2 siblings, 3 replies; 125+ messages in thread
From: Paul Rubin @ 2025-08-27  0:00 UTC (permalink / raw)


Kevin Chadwick <kc-usenet@chadwicks.me.uk> writes:
> Wouldn't that make Python slow and unreliable?

It's slow but that's due to the rather simple implementation.  SBCL
Common Lisp is reasonably fast.  Python is reasonably reliable in the
sense that programs with errors will probably crash instead of going off
into the weeds.  The saying is that correct code is great, code that
crashes could use improvement, but incorrect code that keeps running and
delivering wrong results is a disaster.

Joe Armstrong (inventor of Erlang) also liked to say that there is no
such thing as a reliable non-distributed system, since the power cord is
a single point of failure By that standard, Ada isn't so reliable
either.

[Dmitry A. Kazakov writes:]

> The error occurred inside the body of F. F itself was successfully
> called, because it is untyped. Just as I said.

F didn't encounter a type error until it tried to do arithmetic on its
argument.  If it instead called its argument based on some decision,
that wouldn't have been a type error.  You don't get to decide whether
that counts as a type system or not.  It's just a coarser version of Ada
doing runtime checks on array subscripts and integer overflow, instead
of statically verifying that they are in range (a proof system like Agda
would consider those to also be type errors).

Same article I posted before, "What to know before debating type
systems":

https://blogs.perl.org/users/ovid/2010/08/what-to-know-before-debating-type-systems.html

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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:09                                   ` Lawrence D’Oliveiro
  2025-08-27  9:06                                     ` Kevin Chadwick
  2 siblings, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-27  0:09 UTC (permalink / raw)


On Tue, 26 Aug 2025 17:01:08 -0000 (UTC), Kevin Chadwick wrote:

> On 26/08/2025 17:48, Paul Rubin wrote:
>>
>> The typechecking is done at runtime, just like it says on the tin.
>
> Wouldn't that make Python slow and unreliable?

It is slower than C code, but remember, it is a very-high-level
language, so for many purposes it saves a lot on development time.
This is why it has come to dominate the field for data science, ETL,
that kind of thing.

Consider this file format
<https://manpages.debian.org/proc_pid_mountinfo(5)>: how much C (or
Ada) code would you need to write to parse it? I wrote a
general-purpose Python function to do it: including a custom class for
representing each result line, and a utility function for decoding
those pesky octal escapes, the total came to 82 lines (including
blanks).

You can see my Python code here
<https://gitlab.com/ldo/python_linuxfs/-/blob/master/linuxfs.py#L724>.
For its purposes, it is plenty fast.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-26 19:36                                 ` Dmitry A. Kazakov
@ 2025-08-27  0:10                                   ` Lawrence D’Oliveiro
  2025-08-27  7:57                                     ` Dmitry A. Kazakov
  0 siblings, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-27  0:10 UTC (permalink / raw)


On Tue, 26 Aug 2025 21:36:29 +0200, Dmitry A. Kazakov wrote:

> On 2025-08-26 18:48, Paul Rubin wrote:
>> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> writes:
>>
>>> Yep, as you can pass everything to anything:
>>>
>>> def F(X):
>>>     X = X + 1
>>> F(F)
>> 
>>> Very, very strong typing!
>> 
>> ==>  TypeError: unsupported operand type(s) for +: 'function' and 'int'
>> 
>> The typechecking is done at runtime, just like it says on the tin.
> 
> The error occurred inside the body of F. F itself was successfully 
> called, because it is untyped. Just as I said.

No, it was successfully entered, not successfully left. Remember, “call” 
means both “transfer” to and “return from” (otherwise it becomes “goto”, 
not “call”). That was not a “successful call”.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-26  7:59                                     ` Dmitry A. Kazakov
@ 2025-08-27  0:13                                       ` Lawrence D’Oliveiro
  2025-08-27  7:39                                         ` Dmitry A. Kazakov
  0 siblings, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-27  0:13 UTC (permalink / raw)


On Tue, 26 Aug 2025 09:59:48 +0200, Dmitry A. Kazakov wrote:

> On 2025-08-25 23:13, Lawrence D’Oliveiro wrote:
>>
>> On Mon, 25 Aug 2025 22:09:14 +0200, Dmitry A. Kazakov wrote:
>> 
>>> The question remains why should I need to instantiate it beyond
>>> declaring an object of?
>> 
>> Because in Python a class, like all objects, is created at runtime, not
>> compile time.
> 
> You mean type objects:

Types are objects in Python, I thought we already said that.

>> Think of a class definition, like a function definition, as just a
>> special form of assignment statement.
> 
> Both are not.
> 
>> It’s not a declaration: every time it is executed (“elaborated” if you
>> prefer the Ada term), it creates a new object.
> 
> Definition /= declaration. Executing definition creates an object, just
> like in any language.

No. In Ada, C or C++, definitions are not “executable”. They do not 
“create objects”.

Think of a function that is a class factory: each time it is called, it 
creates and returns a new class as the function result. This depends 
crucially on a) classes as first-class objects, and also b) lexical 
binding.

Can you do that in Ada, C or C++? No you cannot. You can do it in Python.

> You still did not explain what the buzz.

See my posting elsewhere about the metaclass example.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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-28 12:25                                     ` Björn Persson
  2 siblings, 0 replies; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-27  0:14 UTC (permalink / raw)


On Tue, 26 Aug 2025 17:00:58 -0700, Paul Rubin wrote:

> Joe Armstrong (inventor of Erlang) also liked to say that there is no
> such thing as a reliable non-distributed system, since the power cord is
> a single point of failure

Did he not know about laptops?

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-27  0:13                                       ` Lawrence D’Oliveiro
@ 2025-08-27  7:39                                         ` Dmitry A. Kazakov
  2025-08-27 23:10                                           ` Lawrence D’Oliveiro
  0 siblings, 1 reply; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-27  7:39 UTC (permalink / raw)


On 2025-08-27 02:13, Lawrence D’Oliveiro wrote:
> On Tue, 26 Aug 2025 09:59:48 +0200, Dmitry A. Kazakov wrote:
> 
>> On 2025-08-25 23:13, Lawrence D’Oliveiro wrote:
>>>
>>> On Mon, 25 Aug 2025 22:09:14 +0200, Dmitry A. Kazakov wrote:
>>>
>>>> The question remains why should I need to instantiate it beyond
>>>> declaring an object of?
>>>
>>> Because in Python a class, like all objects, is created at runtime, not
>>> compile time.

Not true, because in Python there exist types created before the 
interpreter starts. But it is irrelevant.

In Ada types can be created dynamically:

    declare
       type T is ...
    begin
       ...
    end;

The difference is that the semantics of such types is static in Ada and 
undefined in Python.

> No. In Ada, C or C++, definitions are not “executable”. They do not
> “create objects”.

Of course they are executable. They may or may not produce objects.
> Think of a function that is a class factory: each time it is called, it
> creates and returns a new class as the function result. This depends
> crucially on a) classes as first-class objects, and also b) lexical
> binding.
> 
> Can you do that in Ada, C or C++? No you cannot.

Yes I can. It is actively used in software design. E.g. for plug-ins, 
library implementing a driver derives  a type from the base type.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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-27 23:16                                       ` Lawrence D’Oliveiro
  2025-08-28 12:25                                     ` Björn Persson
  2 siblings, 2 replies; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-27  7:51 UTC (permalink / raw)


On 2025-08-27 02:00, Paul Rubin wrote:

> F didn't encounter a type error until it tried to do arithmetic on its
> argument.

It didn't encounter error before executing erroneous code... (:-))

> If it instead called its argument based on some decision,
> that wouldn't have been a type error.

Sure. But this is not a type error, it is untyped.

> You don't get to decide whether
> that counts as a type system or not.  It's just a coarser version of Ada
> doing runtime checks on array subscripts and integer overflow,

Wrong. Checking constraints is a defined behavior. The type is defined 
so that exception is a part of the operation's contract. The operation 
is bounded by that contract. In Python the contract of an operation (if 
Python were typed) is an open ended and thus non-existent as such.

> instead
> of statically verifying that they are in range (a proof system like Agda
> would consider those to also be type errors).

Nope, these are not type errors. In a strongly typed language that thing 
does not exist per definition because all type errors are detected at 
compile time.

The discussion was whether this would require weakening the type system 
strength. Python here is really of zero interest.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-27  0:10                                   ` Lawrence D’Oliveiro
@ 2025-08-27  7:57                                     ` Dmitry A. Kazakov
  2025-08-27 23:12                                       ` Lawrence D’Oliveiro
  0 siblings, 1 reply; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-27  7:57 UTC (permalink / raw)


On 2025-08-27 02:10, Lawrence D’Oliveiro wrote:

> No, it was successfully entered,

And that is all one need to know.

> not successfully left.

Of course it left successfully. The interpreted did not crashed!

Hint: You cannot define the type semantics of a function in an untyped 
language. That is just what untyped means.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-25 20:58                           ` Lawrence D’Oliveiro
@ 2025-08-27  9:01                             ` Kevin Chadwick
  2025-08-27  9:24                               ` Dmitry A. Kazakov
  0 siblings, 1 reply; 125+ messages in thread
From: Kevin Chadwick @ 2025-08-27  9:01 UTC (permalink / raw)


On 25/08/2025 21:58, Lawrence D\x19Oliveiro wrote:
>On Mon, 25 Aug 2025 10:19:43 +0200, Dmitry A. Kazakov wrote:
>
>> On 2025-08-24 23:49, Lawrence D’Oliveiro wrote:
>>>
>>> On Sat, 23 Aug 2025 23:58:12 -0000 (UTC), Kevin Chadwick wrote:
>>> 
>>>> Micropython is C and some say Python is C too.
>>> 
>>> Python is Python, not C. It has strong dynamic typing and lexical
>>> binding, and functions and classes are first-class objects.
>
>With Python, you don’t even need to write C code to interface to C code
><https://docs.python.org/3/library/ctypes.html>.

You don't in Ada either. Maybe to get around some issues with C++

-- 
Regards, Kc

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-27  0:09                                   ` Lawrence D’Oliveiro
@ 2025-08-27  9:06                                     ` Kevin Chadwick
  0 siblings, 0 replies; 125+ messages in thread
From: Kevin Chadwick @ 2025-08-27  9:06 UTC (permalink / raw)


On 27/08/2025 01:09, Lawrence D\x19Oliveiro wrote:
>On Tue, 26 Aug 2025 17:01:08 -0000 (UTC), Kevin Chadwick wrote:
>
>> On 26/08/2025 17:48, Paul Rubin wrote:
>>>
>>> The typechecking is done at runtime, just like it says on the tin.
>>
>> Wouldn't that make Python slow and unreliable?
>
>It is slower than C code, but remember, it is a very-high-level
>language, so for many purposes it saves a lot on development time.
>This is why it has come to dominate the field for data science, ETL,
>that kind of thing.
>
>Consider this file format
><https://manpages.debian.org/proc_pid_mountinfo(5)>: how much C (or
>Ada) code would you need to write to parse it? I wrote a
>general-purpose Python function to do it: including a custom class for
>representing each result line, and a utility function for decoding
>those pesky octal escapes, the total came to 82 lines (including
>blanks).
>
>You can see my Python code here
><https://gitlab.com/ldo/python_linuxfs/-/blob/master/linuxfs.py#L724>.
>For its purposes, it is plenty fast.

I'm not sure what I'm looking at in that link but sounds about right. I'm
 getting the impression that some responders here have hardly used Ada.

-- 
Regards, Kc

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-27  9:01                             ` Kevin Chadwick
@ 2025-08-27  9:24                               ` Dmitry A. Kazakov
  2025-08-27 23:07                                 ` Lawrence D’Oliveiro
  0 siblings, 1 reply; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-27  9:24 UTC (permalink / raw)


On 2025-08-27 11:01, Kevin Chadwick wrote:
> On 25/08/2025 21:58, Lawrence D\x19Oliveiro wrote:
>> On Mon, 25 Aug 2025 10:19:43 +0200, Dmitry A. Kazakov wrote:
>>
>>> On 2025-08-24 23:49, Lawrence D’Oliveiro wrote:
>>>>
>>>> On Sat, 23 Aug 2025 23:58:12 -0000 (UTC), Kevin Chadwick wrote:
>>>>
>>>>> Micropython is C and some say Python is C too.
>>>>
>>>> Python is Python, not C. It has strong dynamic typing and lexical
>>>> binding, and functions and classes are first-class objects.
>>
>> With Python, you don’t even need to write C code to interface to C code
>> <https://docs.python.org/3/library/ctypes.html>.
> 
> You don't in Ada either. Maybe to get around some issues with C++

Actually in Python they use a C library to call C. So it illustrates the 
opposite: you cannot call C or be called from C in Python. You need some 
FFI layer. But in Ada you can, because of an ability to specify 
conventions in Ada.

This is an unfair comparison, because Ada is a general purpose language. 
Direct hardware access is a part of Ada's functionality. Python is a 
mere command-line interpreter that cannot deal with machine specifics.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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-27 23:16                                       ` Lawrence D’Oliveiro
  1 sibling, 1 reply; 125+ messages in thread
From: Keith Thompson @ 2025-08-27 20:45 UTC (permalink / raw)


"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> writes:
[...]
> The discussion was whether this would require weakening the type
> system strength. Python here is really of zero interest.

Then why do you keep talking about Python here?

-- 
Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com
void Void(void) { Void(); } /* The recursive call of the void */

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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:11                                   ` Kevin Chadwick
  0 siblings, 2 replies; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-27 23:07 UTC (permalink / raw)


On Wed, 27 Aug 2025 11:24:18 +0200, Dmitry A. Kazakov wrote:

> Actually in Python they use a C library to call C. So it illustrates
> the opposite: you cannot call C or be called from C in Python. You
> need some FFI layer. But in Ada you can, because of an ability to
> specify conventions in Ada.

But the most common Ada compiler, GNAT, is part of GCC, which is written 
in C and C++, is it not? So Ada cannot actually specify those 
“conventions” without the help of C/C++ code.

> This is an unfair comparison, because Ada is a general purpose
> language. Direct hardware access is a part of Ada's functionality.

It does it in such a clumsy way compared to C, or even Python.

> Python is a mere command-line interpreter that cannot deal with
> machine specifics.

I posted that example of some machine specifics (the mountinfo API). Feel 
free to offer your comparable Ada code, just to see if it’s better or 
(more likely) worse than the Python version.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-27  7:39                                         ` Dmitry A. Kazakov
@ 2025-08-27 23:10                                           ` Lawrence D’Oliveiro
  2025-08-27 23:49                                             ` Dmitry A. Kazakov
  0 siblings, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-27 23:10 UTC (permalink / raw)


On Wed, 27 Aug 2025 09:39:59 +0200, Dmitry A. Kazakov wrote:

> On 2025-08-27 02:13, Lawrence D’Oliveiro wrote:
>>
>> On Tue, 26 Aug 2025 09:59:48 +0200, Dmitry A. Kazakov wrote:
>> 
>>> On 2025-08-25 23:13, Lawrence D’Oliveiro wrote:
>>>>
>>>> On Mon, 25 Aug 2025 22:09:14 +0200, Dmitry A. Kazakov wrote:
>>>>
>>>>> The question remains why should I need to instantiate it beyond
>>>>> declaring an object of?
>>>>
>>>> Because in Python a class, like all objects, is created at runtime,
>>>> not compile time.
> 
> Not true, because in Python there exist types created before the
> interpreter starts.

No. Builtins are created as part of interpreter startup, not before. Prove 
me wrong.

> In Ada types can be created dynamically:
> 
>     declare
>        type T is ...
>     begin
>        ...
>     end;
> 
> The difference is that the semantics of such types is static in Ada and
> undefined in Python.

Please show us Python code demonstrating how they are “undefined in 
Python”.

>> No. In Ada, C or C++, definitions are not “executable”. They do not
>> “create objects”.
> 
> Of course they are executable.

So I can do something like

    function F ... is
    declare
       type T is ...
    begin
       ...
       return T;
    end;

in Ada?

>> Think of a function that is a class factory: each time it is called, it
>> creates and returns a new class as the function result. This depends
>> crucially on a) classes as first-class objects, and also b) lexical
>> binding.
>> 
>> Can you do that in Ada, C or C++? No you cannot.
> 
> Yes I can. It is actively used in software design. E.g. for plug-ins,
> library implementing a driver derives  a type from the base type.

Show us.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-27  7:57                                     ` Dmitry A. Kazakov
@ 2025-08-27 23:12                                       ` Lawrence D’Oliveiro
  2025-08-28  0:07                                         ` Dmitry A. Kazakov
  0 siblings, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-27 23:12 UTC (permalink / raw)


On Wed, 27 Aug 2025 09:57:28 +0200, Dmitry A. Kazakov wrote:

> On 2025-08-27 02:10, Lawrence D’Oliveiro wrote:
> 
>> No, it was successfully entered,
> 
> And that is all one need to know.
>>
> Remember, “call” means both “transfer” to and “return from”
> (otherwise it becomes “goto”, not “call”). That was not a
> “successful call”.

>> not successfully left.
> 
> Of course it left successfully. The interpreted did not crashed!

Python does not allow resume semantics for exceptions. Otherwise the 
function would have continued executing, which it did not.

> Hint: You cannot define the type semantics of a function in an untyped
> language. That is just what untyped means.

Not sure why that’s relevant, since Python is very much typed, and quite 
strongly typed too.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-27  7:51                                     ` Dmitry A. Kazakov
  2025-08-27 20:45                                       ` Keith Thompson
@ 2025-08-27 23:16                                       ` Lawrence D’Oliveiro
  2025-08-28  8:48                                         ` Dmitry A. Kazakov
  1 sibling, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-27 23:16 UTC (permalink / raw)


On Wed, 27 Aug 2025 09:51:30 +0200, Dmitry A. Kazakov wrote:

> On Tue, 26 Aug 2025 17:00:58 -0700, Paul Rubin wrote:
>>
>> If it instead called its argument based on some decision,
>> that wouldn't have been a type error.
> 
> Sure. But this is not a type error, it is untyped.
>
> On Tue, 26 Aug 2025 09:48:51 -0700, Paul Rubin wrote:
>
>> ==>  TypeError: unsupported operand type(s) for +: 'function' and 'int'

Need I say more?

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-27 23:10                                           ` Lawrence D’Oliveiro
@ 2025-08-27 23:49                                             ` Dmitry A. Kazakov
  2025-08-28  0:35                                               ` Lawrence D’Oliveiro
  0 siblings, 1 reply; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-27 23:49 UTC (permalink / raw)


On 2025-08-28 01:10, Lawrence D’Oliveiro wrote:

> So I can do something like
> 
>      function F ... is
>      declare
>         type T is ...
>      begin
>         ...
>         return T;
>      end;
> 
> in Ada?

No, you cannot spell such a function. Ada is a typed language:

   function F return T is -- T is undefined
      type T is ...;
   begin

>> Yes I can. It is actively used in software design. E.g. for plug-ins,
>> library implementing a driver derives  a type from the base type.
> 
> Show us.
It is a proprietary code. You can write it yourself.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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
  1 sibling, 1 reply; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-28  0:00 UTC (permalink / raw)


On 2025-08-28 01:07, Lawrence D’Oliveiro wrote:
> On Wed, 27 Aug 2025 11:24:18 +0200, Dmitry A. Kazakov wrote:
> 
>> Actually in Python they use a C library to call C. So it illustrates
>> the opposite: you cannot call C or be called from C in Python. You
>> need some FFI layer. But in Ada you can, because of an ability to
>> specify conventions in Ada.
> 
> But the most common Ada compiler, GNAT, is part of GCC, which is written
> in C and C++, is it not?

No. GNAT is written in Ada.

> So Ada cannot actually specify those
> “conventions” without the help of C/C++ code.

Wrong. These are a part of the language standard ARM B. No C code involved.

>> This is an unfair comparison, because Ada is a general purpose
>> language. Direct hardware access is a part of Ada's functionality.
> 
> It does it in such a clumsy way compared to C, or even Python.

Example?

>> Python is a mere command-line interpreter that cannot deal with
>> machine specifics.
> 
> I posted that example of some machine specifics (the mountinfo API).

Machine specifics means machine data types, addresses, interrupts etc. 
As an example consider programming a bare board, writing an OS etc.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-27 23:12                                       ` Lawrence D’Oliveiro
@ 2025-08-28  0:07                                         ` Dmitry A. Kazakov
  2025-08-28  0:38                                           ` Lawrence D’Oliveiro
  0 siblings, 1 reply; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-28  0:07 UTC (permalink / raw)


On 2025-08-28 01:12, Lawrence D’Oliveiro wrote:
> On Wed, 27 Aug 2025 09:57:28 +0200, Dmitry A. Kazakov wrote:
> 
>> On 2025-08-27 02:10, Lawrence D’Oliveiro wrote:
>>
>>> No, it was successfully entered,
>>
>> And that is all one need to know.
>>>
>> Remember, “call” means both “transfer” to and “return from”
>> (otherwise it becomes “goto”, not “call”). That was not a
>> “successful call”.
> 
>>> not successfully left.
>>
>> Of course it left successfully. The interpreted did not crashed!
> 
> Python does not allow resume semantics for exceptions. Otherwise the
> function would have continued executing, which it did not.

It continued. The function returned Null_Object and flagged an active 
exception state. See

https://docs.python.org/3/c-api/exceptions.html

for how Python works.

And no Python does not support proper zero overhead exceptions like Ada.

>> Hint: You cannot define the type semantics of a function in an untyped
>> language. That is just what untyped means.
> 
> Not sure why that’s relevant,

It is, because typed means in particular definite types of subprogram 
arguments and results.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-27 23:07                                 ` Lawrence D’Oliveiro
  2025-08-28  0:00                                   ` Dmitry A. Kazakov
@ 2025-08-28  0:11                                   ` Kevin Chadwick
  2025-08-28  0:20                                     ` Kevin Chadwick
  2025-08-28  0:30                                     ` Lawrence D’Oliveiro
  1 sibling, 2 replies; 125+ messages in thread
From: Kevin Chadwick @ 2025-08-28  0:11 UTC (permalink / raw)



>
>> This is an unfair comparison, because Ada is a general purpose
>> language. Direct hardware access is a part of Ada's functionality.
>
>It does it in such a clumsy way compared to C, or even Python.
>

Ada is the best language by far for mapping registers to hardware or data
 packets via representation clauses. I have found many bugs in STs svd files
 and C code because of Adas type system.

-- 
Regards, Kc

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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  0:30                                     ` Lawrence D’Oliveiro
  1 sibling, 1 reply; 125+ messages in thread
From: Kevin Chadwick @ 2025-08-28  0:20 UTC (permalink / raw)


\r>>> This is an unfair comparison, because Ada is a general purpose
>>> language. Direct hardware access is a part of Ada's functionality.
>>
>>It does it in such a clumsy way compared to C, or even Python.
>>
>
>Ada is the best language by far for mapping registers to hardware or data
> packets via representation clauses. I have found many bugs in STs svd files
> and C code because of Adas type system.

The reason it's so good aside from Gnats excellent size checks etc. is due
 to precision types :-)

-- 
Regards, Kc

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-28  0:00                                   ` Dmitry A. Kazakov
@ 2025-08-28  0:22                                     ` Lawrence D’Oliveiro
  0 siblings, 0 replies; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-28  0:22 UTC (permalink / raw)


On Thu, 28 Aug 2025 02:00:44 +0200, Dmitry A. Kazakov wrote:

> Machine specifics means machine data types, addresses, interrupts etc.
> As an example consider programming a bare board, writing an OS etc.

Like MicroPython?

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-28  0:11                                   ` Kevin Chadwick
  2025-08-28  0:20                                     ` Kevin Chadwick
@ 2025-08-28  0:30                                     ` Lawrence D’Oliveiro
  1 sibling, 0 replies; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-28  0:30 UTC (permalink / raw)


On Thu, 28 Aug 2025 00:11:37 -0000 (UTC), Kevin Chadwick wrote:

>>> This is an unfair comparison, because Ada is a general purpose
>>> language. Direct hardware access is a part of Ada's functionality.
>>
>> It does it in such a clumsy way compared to C, or even Python.
>>
> Ada is the best language by far for mapping registers to hardware or
> data packets via representation clauses.

Python has standard library modules to aid with that.

For data packets, I wrote a script for a client once which processed video 
files recorded on GoPro cameras and extracted the instrumentation streams 
containing GPS and accelerometer data.

I used the ffprobe command (part of the FFmpeg suite) to locate the 
positions and PTS values for the packets, then decoded them with the 
struct <https://docs.python.org/3/library/struct.html> module.

Details on the format (a bit incomplete and out of date, last I checked): 
<https://github.com/gopro/gpmf-parser>.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-28  0:20                                     ` Kevin Chadwick
@ 2025-08-28  0:33                                       ` Lawrence D’Oliveiro
  2025-08-28  1:17                                         ` Alex // nytpu
                                                           ` (2 more replies)
  0 siblings, 3 replies; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-28  0:33 UTC (permalink / raw)


On Thu, 28 Aug 2025 00:20:38 -0000 (UTC), Kevin Chadwick wrote:

>> Ada is the best language by far for mapping registers to hardware
>> or data packets via representation clauses. I have found many bugs
>> in STs svd files and C code because of Adas type system.
>
> The reason it's so good aside from Gnats excellent size checks etc.
> is due to precision types :-)

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.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-27 23:49                                             ` Dmitry A. Kazakov
@ 2025-08-28  0:35                                               ` Lawrence D’Oliveiro
  2025-08-28  7:54                                                 ` Dmitry A. Kazakov
  0 siblings, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-28  0:35 UTC (permalink / raw)


On Thu, 28 Aug 2025 01:49:18 +0200, Dmitry A. Kazakov wrote:

> On 2025-08-28 01:10, Lawrence D’Oliveiro wrote:
> 
>> So I can do something like
>> 
>>      function F ... is declare
>>         type T is ...
>>      begin
>>         ...
>>         return T;
>>      end;
>> 
>> in Ada?
> 
> No, you cannot spell such a function. Ada is a typed language:

But I thought you said “In Ada types can be created dynamically”? So it 
turns out that’s wrong? Because I can do that in Python.

>>> Yes I can. It is actively used in software design. E.g. for plug-ins,
>>> library implementing a driver derives  a type from the base type.
>> 
>> Show us.
>
> It is a proprietary code. You can write it yourself.

So you can’t actually show us any example of such a feature, to prove it 
exists? Too bad ...

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-28  0:07                                         ` Dmitry A. Kazakov
@ 2025-08-28  0:38                                           ` Lawrence D’Oliveiro
  2025-08-28  8:00                                             ` Dmitry A. Kazakov
  0 siblings, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-28  0:38 UTC (permalink / raw)


On Thu, 28 Aug 2025 02:07:58 +0200, Dmitry A. Kazakov wrote:

> On 2025-08-28 01:12, Lawrence D’Oliveiro wrote:
>>
>> Python does not allow resume semantics for exceptions. Otherwise the
>> function would have continued executing, which it did not.
> 
> It continued. The function returned Null_Object and flagged an active
> exception state.

You are confusing the internal workings of the implementation with the 
actual language semantics.

> See
> 
> https://docs.python.org/3/c-api/exceptions.html
> 
> for how Python works.

Think of that as the dumbed-down explanation, for those who can only think 
in terms of conventional languages like C, C++ or Ada. If that’s all you 
can handle ... well, you do you.

>>> Hint: You cannot define the type semantics of a function in an untyped
>>> language. That is just what untyped means.
>> 
>> Not sure why that’s relevant,
> 
> It is, because typed means in particular definite types of subprogram
> arguments and results.

Python arguments and results are always of a definite type.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-28  0:33                                       ` Lawrence D’Oliveiro
@ 2025-08-28  1:17                                         ` Alex // nytpu
  2025-08-28  1:45                                           ` Lawrence D’Oliveiro
  2025-08-28  9:04                                         ` Kevin Chadwick
  2025-08-28  9:05                                         ` Kevin Chadwick
  2 siblings, 1 reply; 125+ messages in thread
From: Alex // nytpu @ 2025-08-28  1:17 UTC (permalink / raw)


On 8/27/25 6:33 PM, Lawrence D’Oliveiro wrote:
> On Thu, 28 Aug 2025 00:20:38 -0000 (UTC), Kevin Chadwick wrote:
> 
>>> Ada is the best language by far for mapping registers to hardware
>>> or data packets via representation clauses. I have found many bugs
>>> in STs svd files and C code because of Adas type system.
>>
>> The reason it's so good aside from Gnats excellent size checks etc.
>> is due to precision types :-)
> 
> 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.

To be clear, for nearly all of this thread I've strongly agreed with you 
(mostly seems like Dmitry is just being willfully ignorant about basic 
computer science facts like "what dynamic typing is and how it's 
orthogonal to strong/weak typing").  But in the specific case of 
interacting directly with hardware[1], Ada is far and away the best 
language in existence for it.  And I'm a weird-ass language connoisseur 
and like doing weird-ass things with them, so I have lots of experience 
with everything all over the map.  Ada 2012, with its representation 
clauses and useful set of aspects, is really just the best for working 
with memory-mapped I/O and such.

~nytpu

[1]: as in, directly interacting with it in an embedded context; not 
using an OS abstraction, not binding to an existing C HLL, etc., 
specifically writing the bindings yourself.  If you're dealing with 
existing software abstractions it's much more up in the air and comes 
mostly down to personal preference (I'm partial to Common Lisp when in 
hosted environments myself, but in this case I assume the benefits are 
mostly equivalent to Python other than Lisp's macro stuff)

-- 
Alex // nytpu
https://nytpu.com/ - gemini://nytpu.com/ - gopher://nytpu.com/

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-28  1:17                                         ` Alex // nytpu
@ 2025-08-28  1:45                                           ` Lawrence D’Oliveiro
  2025-08-28  8:24                                             ` Dmitry A. Kazakov
  2025-08-28  9:17                                             ` Kevin Chadwick
  0 siblings, 2 replies; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-28  1:45 UTC (permalink / raw)


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.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-28  0:35                                               ` Lawrence D’Oliveiro
@ 2025-08-28  7:54                                                 ` Dmitry A. Kazakov
  2025-08-28  8:50                                                   ` Kevin Chadwick
  0 siblings, 1 reply; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-28  7:54 UTC (permalink / raw)


On 2025-08-28 02:35, Lawrence D’Oliveiro wrote:
> On Thu, 28 Aug 2025 01:49:18 +0200, Dmitry A. Kazakov wrote:
> 
>> On 2025-08-28 01:10, Lawrence D’Oliveiro wrote:
>>
>>> So I can do something like
>>>
>>>       function F ... is declare
>>>          type T is ...
>>>       begin
>>>          ...
>>>          return T;
>>>       end;
>>>
>>> in Ada?
>>
>> No, you cannot spell such a function. Ada is a typed language:
> 
> But I thought you said “In Ada types can be created dynamically”? So it
> turns out that’s wrong? Because I can do that in Python.

You cannot refer to a type before you created it, except specific cases 
of incomplete declarations.

In Python you cannot do that either. What you can in Python is to 
declare a function that returns nobody knows what, because Python is 
untyped.

> So you can’t actually show us any example of such a feature, to prove it
> exists? Too bad ...

I can explain how it works. When a DLL is loaded its library level gets 
elaborated. So if you have:

package P is
    type T is tagged ...
end P;

in the main program or DLL and

with P;
package Q is
    type S is new T with ...
    function F return T'Class;
end Q;

in the DLL being loaded, then in the process of elaboration S will be 
created which in particular means extending of the dispatching table. 
You can return a class-wide object from there and dispatch on the newly 
created type's operation.

Clear?

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-28  0:38                                           ` Lawrence D’Oliveiro
@ 2025-08-28  8:00                                             ` Dmitry A. Kazakov
  0 siblings, 0 replies; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-28  8:00 UTC (permalink / raw)


On 2025-08-28 02:38, Lawrence D’Oliveiro wrote:
> On Thu, 28 Aug 2025 02:07:58 +0200, Dmitry A. Kazakov wrote:
> 
>> On 2025-08-28 01:12, Lawrence D’Oliveiro wrote:
>>>
>>> Python does not allow resume semantics for exceptions. Otherwise the
>>> function would have continued executing, which it did not.
>>
>> It continued. The function returned Null_Object and flagged an active
>> exception state.
> 
> You are confusing the internal workings of the implementation with the
> actual language semantics.

What semantics? F is called. F is returned. Where in the code any 
semantics was stated?

>> See
>>
>> https://docs.python.org/3/c-api/exceptions.html
>>
>> for how Python works.
> 
> Think of that as the dumbed-down explanation, for those who can only think
> in terms of conventional languages like C, C++ or Ada. If that’s all you
> can handle ... well, you do you.

There is nothing unconventional in command line interpreters, except for 
extremely ugly syntax, e.g. Python, Bash, Windows Cmd. But that seems to 
be a kind of convention, isn't it? (:-))

>>>> Hint: You cannot define the type semantics of a function in an untyped
>>>> language. That is just what untyped means.
>>>
>>> Not sure why that’s relevant,
>>
>> It is, because typed means in particular definite types of subprogram
>> arguments and results.
> 
> Python arguments and results are always of a definite type.

Can you name them in the example given? It seems that you confuse 
objects with formal arguments.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-28  1:45                                           ` Lawrence D’Oliveiro
@ 2025-08-28  8:24                                             ` Dmitry A. Kazakov
  2025-08-29  3:53                                               ` Lawrence D’Oliveiro
  2025-08-28  9:17                                             ` Kevin Chadwick
  1 sibling, 1 reply; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-28  8:24 UTC (permalink / raw)


On 2025-08-28 03:45, Lawrence D’Oliveiro wrote:

> But the function has to return the base class type, it cannot have
> different return types dynamically.

Of course you can. That is the meaning of the term "class" and "class 
type" as a type which values are the values of the class members.

In Ada class type is denoted as T'Class. T'Class values are values of T 
or any type derived from T. The operations declared on T'Class are 
called class-wide, so

    function F (...) return T'Class;

> 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.

That is not much OO as you have all alternatives static. An Ada 
programmer might tend to use a variant record and enumeration for the case.

But for the OO approach:

    function F return Abstract_Packet'Class is
    begin
       case Kind_Of is
          when Foo =>
             return Foo_Packet; -- Derived from Abstract_Packet
          when Bar =>
             return Bar_Packet; -- Derived from Abstract_Packet
       ...

Note also that one can return instances not knowing the specific type at 
all. E.g. you can dispatch on the bare tag or an argument. In the latter 
case the derived type registers itself in a mapping value -> 
constructing function. The client simply calls the function from the 
mapping and gets a class-wide object.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-27 20:45                                       ` Keith Thompson
@ 2025-08-28  8:38                                         ` Dmitry A. Kazakov
  2025-08-28  9:00                                           ` Von Ottone
  0 siblings, 1 reply; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-28  8:38 UTC (permalink / raw)


On 2025-08-27 22:45, Keith Thompson wrote:
> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> writes:
> [...]
>> The discussion was whether this would require weakening the type
>> system strength. Python here is really of zero interest.
> 
> Then why do you keep talking about Python here?

Because Python fans hijacked the discussion.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-27 23:16                                       ` Lawrence D’Oliveiro
@ 2025-08-28  8:48                                         ` Dmitry A. Kazakov
  2025-08-29  3:57                                           ` Lawrence D’Oliveiro
  0 siblings, 1 reply; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-28  8:48 UTC (permalink / raw)


On 2025-08-28 01:16, Lawrence D’Oliveiro wrote:
> On Wed, 27 Aug 2025 09:51:30 +0200, Dmitry A. Kazakov wrote:
> 
>> On Tue, 26 Aug 2025 17:00:58 -0700, Paul Rubin wrote:
>>>
>>> If it instead called its argument based on some decision,
>>> that wouldn't have been a type error.
>>
>> Sure. But this is not a type error, it is untyped.
>>
>> On Tue, 26 Aug 2025 09:48:51 -0700, Paul Rubin wrote:
>>
>>> ==>  TypeError: unsupported operand type(s) for +: 'function' and 'int'
> 
> Need I say more?

Yes:

def F(X):
    raise TypeError ("?")
F(1)

Hint: Type errors and errors in general cannot be checked at run-time. 
Errors are bugs. Dynamic checking and raising exception is not a bug, it 
is a behavior.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-28  7:54                                                 ` Dmitry A. Kazakov
@ 2025-08-28  8:50                                                   ` Kevin Chadwick
  2025-08-28  9:02                                                     ` Dmitry A. Kazakov
  0 siblings, 1 reply; 125+ messages in thread
From: Kevin Chadwick @ 2025-08-28  8:50 UTC (permalink / raw)



>
>I can explain how it works. When a DLL is loaded its library level gets 
>elaborated. So if you have:
>
>package P is
>    type T is tagged ...
>end P;
>
>in the main program or DLL and
>
>with P;
>package Q is
>    type S is new T with ...
>    function F return T'Class;
>end Q;
>
>in the DLL being loaded, then in the process of elaboration S will be 
>created which in particular means extending of the dispatching table. 
>You can return a class-wide object from there and dispatch on the newly 
>created type's operation.
>
>Clear?

Interesting, better than the shape examples but I guess you have to get that
 in the first instance.

-- 
Regards, Kc

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-28  8:38                                         ` Dmitry A. Kazakov
@ 2025-08-28  9:00                                           ` Von Ottone
  0 siblings, 0 replies; 125+ messages in thread
From: Von Ottone @ 2025-08-28  9:00 UTC (permalink / raw)


On Thu, 28 Aug 2025 10:38:46 +0200, "Dmitry A. Kazakov"
<mailbox@dmitry-kazakov.de> wrote:

>On 2025-08-27 22:45, Keith Thompson wrote:
>> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> writes:
>> [...]
>>> The discussion was whether this would require weakening the type
>>> system strength. Python here is really of zero interest.
>> 
>> Then why do you keep talking about Python here?
>
>Because Python fans hijacked the discussion.

Don't mind Keith Thompson, he is the pedantic one of the whole galaxy
of programming-languages newsgroups.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-28  8:50                                                   ` Kevin Chadwick
@ 2025-08-28  9:02                                                     ` Dmitry A. Kazakov
  0 siblings, 0 replies; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-28  9:02 UTC (permalink / raw)


On 2025-08-28 10:50, Kevin Chadwick wrote:
> 
>>
>> I can explain how it works. When a DLL is loaded its library level 
>> gets elaborated. So if you have:
>>
>> package P is
>>    type T is tagged ...
>> end P;
>>
>> in the main program or DLL and
>>
>> with P;
>> package Q is
>>    type S is new T with ...
>>    function F return T'Class;
>> end Q;
>>
>> in the DLL being loaded, then in the process of elaboration S will be 
>> created which in particular means extending of the dispatching table. 
>> You can return a class-wide object from there and dispatch on the 
>> newly created type's operation.
>>
>> Clear?
> 
> Interesting, better than the shape examples but I guess you have to get 
> that in the first instance.

Dynamic polymorphism is an extremely powerful mechanism, but it kind of 
bends out of traditional typing.

It is like the relativity theory. Everything is relative, position, 
velocity, but up to the point. Acceleration is not anymore. Same is with 
typing: value->type, so far so good, but one more step up: 
value->type->class and something happens. Primitive operations become 
reachable even if you do not see them, you cannot hide them. Multiple 
inheritance, OK, but what about conflicts, is it additive or idempotent? 
Multiple dispatch is a total dark hole.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-28  0:33                                       ` Lawrence D’Oliveiro
  2025-08-28  1:17                                         ` Alex // nytpu
@ 2025-08-28  9:04                                         ` Kevin Chadwick
  2025-08-29  3:55                                           ` Lawrence D’Oliveiro
  2025-08-28  9:05                                         ` Kevin Chadwick
  2 siblings, 1 reply; 125+ messages in thread
From: Kevin Chadwick @ 2025-08-28  9:04 UTC (permalink / raw)


On 28/08/2025 01:33, Lawrence D\x19Oliveiro wrote:
>On Thu, 28 Aug 2025 00:20:38 -0000 (UTC), Kevin Chadwick wrote:
>
>>> Ada is the best language by far for mapping registers to hardware
>>> or data packets via representation clauses. I have found many bugs
>>> in STs svd files and C code because of Adas type system.
>>
>> The reason it's so good aside from Gnats excellent size checks etc.
>> is due to precision types :-)
>
>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.

To any degree that is sensible and secure yes as you should always validate
 the packet even from behind a cryptographic protection. Cobs crate helps.

https://alire.ada.dev/crates/cobs

Or you can use Streams on anything above a light runtime.

-- 
Regards, Kc

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-28  0:33                                       ` Lawrence D’Oliveiro
  2025-08-28  1:17                                         ` Alex // nytpu
  2025-08-28  9:04                                         ` Kevin Chadwick
@ 2025-08-28  9:05                                         ` Kevin Chadwick
  2025-08-28  9:43                                           ` Dmitry A. Kazakov
  2 siblings, 1 reply; 125+ messages in thread
From: Kevin Chadwick @ 2025-08-28  9:05 UTC (permalink / raw)



>
>But can you do type checking dynamically, at run-time?
>

'Valid

-- 
Regards, Kc

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-28  1:45                                           ` Lawrence D’Oliveiro
  2025-08-28  8:24                                             ` Dmitry A. Kazakov
@ 2025-08-28  9:17                                             ` Kevin Chadwick
  2025-08-29  3:51                                               ` Lawrence D’Oliveiro
  1 sibling, 1 reply; 125+ messages in thread
From: Kevin Chadwick @ 2025-08-28  9:17 UTC (permalink / raw)



>
>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.

Perhaps you are trolling but you can literally twiddle any number of bits in
 Ada by assignment. I often change svd files by adding enumerations to have
 type protected register access generated by svd2ada that C does not protect
 the engineer from.

I2C1.Address := 7_Bit_Address;
I2C1.Protocol := Motorola;

-- 
Regards, Kc

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-28  9:05                                         ` Kevin Chadwick
@ 2025-08-28  9:43                                           ` Dmitry A. Kazakov
  2025-08-29  3:54                                             ` Lawrence D’Oliveiro
  0 siblings, 1 reply; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-28  9:43 UTC (permalink / raw)


On 2025-08-28 11:05, Kevin Chadwick wrote:

>> But can you do type checking dynamically, at run-time?
>>
> 
> 'Valid

Except that this is not checking of the type, which is not possible on 
fundamental grounds.

It is checking a value of an object for constraints. That a value might 
violate the constraints is itself a result of type violation when the 
value was coerced to the type by an operation not defined on the type, 
e.g. per Unchecked_Conversion or memory mapping.

But the point you make is correct it is same as Python's "type 
checking," namely lets take something apparently untyped and see if that 
thing could pass for the given type.

In Python everything is untyped even when type annotations are used.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  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-28 12:25                                     ` Björn Persson
  2025-08-28 22:14                                       ` Lawrence D’Oliveiro
  2 siblings, 1 reply; 125+ messages in thread
From: Björn Persson @ 2025-08-28 12:25 UTC (permalink / raw)


Paul Rubin wrote:
> Python is reasonably reliable in the
> sense that programs with errors will probably crash instead of going off
> into the weeds.  The saying is that correct code is great, code that
> crashes could use improvement, but incorrect code that keeps running and
> delivering wrong results is a disaster.

Then let me tell you about a disaster.

I once worked with a team of testers who wrote their testcases in
Python. Each testcase was supposed to return True or False to report
whether the test had succeeded or failed. Some testcases returned the
string "true" or "false" instead. When an if statement is applied to a
string in Python, "" is considered false but "false" is considered true.
Thus the test framework kept running and reported the failing test as
successful. The testers didn't notice. They didn't have tests to test
their testcases.

Whether that's reasonably reliable depends on one's opinion on what's
reasonable, I suppose.

As you guys are arguing – or rather talking past each other – about
Python in comp.lang.ada, can I assume that you all know what an Ada
compiler would do with such code?

Björn Persson

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-28 12:25                                     ` Björn Persson
@ 2025-08-28 22:14                                       ` Lawrence D’Oliveiro
  2025-08-29 15:30                                         ` Björn Persson
  0 siblings, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-28 22:14 UTC (permalink / raw)


On Thu, 28 Aug 2025 14:25:57 +0200, Björn Persson wrote:

> I once worked with a team of testers who wrote their testcases in
> Python. Each testcase was supposed to return True or False to report
> whether the test had succeeded or failed. Some testcases returned
> the string "true" or "false" instead.

Shouldn’t your test harness have had something like

    result_of_test = test_routine(*test_args, **test_kwargs)
    assert isinstance(result_of_test, bool), \
        "unexpected test result %s" % result_of_test
    if result_of_test :
        ... chalk up another success ..
    else :
        ... chalk up another failure ..
    #end if

It only takes one extra line of code to do that typecheck.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-28  9:17                                             ` Kevin Chadwick
@ 2025-08-29  3:51                                               ` Lawrence D’Oliveiro
  2025-08-29  9:27                                                 ` Kevin Chadwick
  0 siblings, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-29  3:51 UTC (permalink / raw)


On Thu, 28 Aug 2025 09:17:10 -0000 (UTC), Kevin Chadwick wrote:

> Perhaps you are trolling but you can literally twiddle any number of
> bits in Ada by assignment.

So can you in Python. You can also access I/O registers (i.e. not
memory-mapped I/O) via assignment. Can Ada manage that?

Who’s trolling now?
Who’s trolling now?
Who’s telling porkies, so dorky, and how?

(To the tune of “Who’s Sorry Now?”)

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-28  8:24                                             ` Dmitry A. Kazakov
@ 2025-08-29  3:53                                               ` Lawrence D’Oliveiro
  2025-08-29  8:07                                                 ` Dmitry A. Kazakov
  0 siblings, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-29  3:53 UTC (permalink / raw)


On Thu, 28 Aug 2025 10:24:54 +0200, Dmitry A. Kazakov wrote:

> On 2025-08-28 03:45, Lawrence D’Oliveiro wrote:
> 
>> But the function has to return the base class type, it cannot have
>> different return types dynamically.
> 
> Of course you can. That is the meaning of the term "class" and "class
> type" as a type which values are the values of the class members.

Assigning the result to a variable of type subclass involves dynamic type 
checking. Which you have been insisting so far is “untyped”.

>> 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.
> 
> That is not much OO as you have all alternatives static.

No, they are dynamic, not static. See below.

> But for the OO approach:
> 
>     function F return Abstract_Packet'Class is begin
>        case Kind_Of is
>           when Foo =>
>              return Foo_Packet; -- Derived from Abstract_Packet
>           when Bar =>
>              return Bar_Packet; -- Derived from Abstract_Packet
>        ...
> 
> Note also that one can return instances not knowing the specific type at
> all.

But they are still of that same “Abstract_Packet'Class”, which is the base 
class. You cannot specify “Foo_Packet'Class” as the return type on one 
call, “Bar_Packet'Class” on another call, etc.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-28  9:43                                           ` Dmitry A. Kazakov
@ 2025-08-29  3:54                                             ` Lawrence D’Oliveiro
  2025-08-29  8:15                                               ` Dmitry A. Kazakov
  0 siblings, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-29  3:54 UTC (permalink / raw)


On Thu, 28 Aug 2025 11:43:15 +0200, Dmitry A. Kazakov wrote:

> In Python everything is untyped even when type annotations are used.

    Python 3.13.7 (main, Aug 20 2025, 22:17:40) [GCC 14.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> 2 + "2"
    Traceback (most recent call last):
      File "<python-input-0>", line 1, in <module>
        2 + "2"
        ~~^~~~~
    TypeError: unsupported operand type(s) for +: 'int' and 'str'

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-28  9:04                                         ` Kevin Chadwick
@ 2025-08-29  3:55                                           ` Lawrence D’Oliveiro
  2025-08-29  9:41                                             ` Kevin Chadwick
  0 siblings, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-29  3:55 UTC (permalink / raw)


On Thu, 28 Aug 2025 09:04:06 -0000 (UTC), Kevin Chadwick wrote:

> On 28/08/2025 01:33, Lawrence D’Oliveiro wrote:
>>
>> But can you do type checking dynamically, at run-time?
>
> To any degree that is sensible and secure yes as you should always
> validate the packet even from behind a cryptographic protection.
> Cobs crate helps.
>
> https://alire.ada.dev/crates/cobs
>
> Or you can use Streams on anything above a light runtime.

That’s not a “yes” though, is it.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-28  8:48                                         ` Dmitry A. Kazakov
@ 2025-08-29  3:57                                           ` Lawrence D’Oliveiro
  2025-08-29  7:53                                             ` Dmitry A. Kazakov
  0 siblings, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-29  3:57 UTC (permalink / raw)


On Thu, 28 Aug 2025 10:48:13 +0200, Dmitry A. Kazakov wrote:

> Hint: Type errors and errors in general cannot be checked at run-time.

They most certainly can.

> Errors are bugs.

Possibly. But the bug might be at the other end of a comms connection in 
somebody else’s code, not at my end. Their end might even be written in 
Ada, for all I know.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-29  3:57                                           ` Lawrence D’Oliveiro
@ 2025-08-29  7:53                                             ` Dmitry A. Kazakov
  2025-08-30 22:29                                               ` Lawrence D’Oliveiro
  0 siblings, 1 reply; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-29  7:53 UTC (permalink / raw)


On 2025-08-29 05:57, Lawrence D’Oliveiro wrote:

> But the bug might be at the other end of a comms connection in
> somebody else’s code, not at my end.

That is not an error in your code. You confuse errors with exceptional 
states. No program can check correctness of itself.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-29  3:53                                               ` Lawrence D’Oliveiro
@ 2025-08-29  8:07                                                 ` Dmitry A. Kazakov
  2025-08-30 22:27                                                   ` Lawrence D’Oliveiro
  0 siblings, 1 reply; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-29  8:07 UTC (permalink / raw)


On 2025-08-29 05:53, Lawrence D’Oliveiro wrote:

> But they are still of that same “Abstract_Packet'Class”, which is the base
> class.

Yes, because it was designed so. This is what being typed is.

> You cannot specify “Foo_Packet'Class” as the return type on one
> call, “Bar_Packet'Class” on another call, etc.

Why should I? The return type is equivalent (not is!) to Foo_Packet in 
one call and Bar_Packet in another.

A value of Abstract_Packet'Class can be viewed as a value of Foo_Packet, 
if the type tag specifies Foo_Packet as the specific type. You can check 
the tag dynamically or use it indirectly in dispatching calls = calls to 
methods (in Ada terminology "primitive operations").

The caller expects a value of a class member = a value of a descendant 
of Abstract_Packet.

This paradigm in literature is called "generic programming" when a 
program is written in terms of a class (class Abstract_Packet) = a set 
of types derived from Abstract_Packet = {Foo_Packet, Bar_Packet, ...}. 
The program does not know the specific type and need not to know.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-29  3:54                                             ` Lawrence D’Oliveiro
@ 2025-08-29  8:15                                               ` Dmitry A. Kazakov
  2025-08-30 22:25                                                 ` Lawrence D’Oliveiro
  0 siblings, 1 reply; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-29  8:15 UTC (permalink / raw)


On 2025-08-29 05:54, Lawrence D’Oliveiro wrote:
> On Thu, 28 Aug 2025 11:43:15 +0200, Dmitry A. Kazakov wrote:
> 
>> In Python everything is untyped even when type annotations are used.
> 
>      Python 3.13.7 (main, Aug 20 2025, 22:17:40) [GCC 14.3.0] on linux
>      Type "help", "copyright", "credits" or "license" for more information.
>      >>> 2 + "2"
>      Traceback (most recent call last):
>        File "<python-input-0>", line 1, in <module>
>          2 + "2"
>          ~~^~~~~
>      TypeError: unsupported operand type(s) for +: 'int' and 'str'

"+" is implemented to raise an exception named TypeError. So? How is 
that a type check?

How do I know if that happens without executing "+"?

It is just untyped as no types of "+" are specified anywhere.

It is an undefined behavior, because nobody knows a-priory if "+" would 
return and which type or bomb the program.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-29  3:51                                               ` Lawrence D’Oliveiro
@ 2025-08-29  9:27                                                 ` Kevin Chadwick
  2025-08-29  9:33                                                   ` Kevin Chadwick
  0 siblings, 1 reply; 125+ messages in thread
From: Kevin Chadwick @ 2025-08-29  9:27 UTC (permalink / raw)



>So can you in Python. You can also access I/O registers (i.e. not
>memory-mapped I/O) via assignment. Can Ada manage that?
>

Yes if I understand you correctly but I don't believe you understand what
 I'm talking about as I believe Python

-- 
Regards, Kc

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-29  9:27                                                 ` Kevin Chadwick
@ 2025-08-29  9:33                                                   ` Kevin Chadwick
  2025-08-30  6:21                                                     ` Lawrence D’Oliveiro
  0 siblings, 1 reply; 125+ messages in thread
From: Kevin Chadwick @ 2025-08-29  9:33 UTC (permalink / raw)


On 29/08/2025 10:27, Kevin Chadwick wrote:
>
>>So can you in Python. You can also access I/O registers (i.e. not
>>memory-mapped I/O) via assignment. Can Ada manage that?
>>
>

Yes if I understand you correctly but I don't believe you understand what
 I'm talking about as I believe Python does not have the ability for easily
 creating e.g. Unsigned_2, Unsigned_4 or Unsigned_15 and writing just those
 bits by assignment to wherever the programmer wants.


-- 
Regards, Kc

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-29  3:55                                           ` Lawrence D’Oliveiro
@ 2025-08-29  9:41                                             ` Kevin Chadwick
  2025-08-30  3:31                                               ` Lawrence D’Oliveiro
  0 siblings, 1 reply; 125+ messages in thread
From: Kevin Chadwick @ 2025-08-29  9:41 UTC (permalink / raw)


On 29/08/2025 04:55, Lawrence D\x19Oliveiro wrote:
>On Thu, 28 Aug 2025 09:04:06 -0000 (UTC), Kevin Chadwick wrote:
>
>> On 28/08/2025 01:33, Lawrence D’Oliveiro wrote:
>>>
>>> But can you do type checking dynamically, at run-time?
>>
>> To any degree that is sensible and secure yes as you should always
>> validate the packet even from behind a cryptographic protection.
>> Cobs crate helps.
>>
>> https://alire.ada.dev/crates/cobs
>>
>> Or you can use Streams on anything above a light runtime.
>
>That’s not a “yes” though, is it.

Ada was designed to be cost effective as a common language for large and
 realtime systems.

Full dynamic typing is not cost effective except maybe like C for
 prototyping.

"https://www.wirekat.com/python-a-loved-but-eternally-flawed-language/"

-- 
Regards, Kc

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-28 22:14                                       ` Lawrence D’Oliveiro
@ 2025-08-29 15:30                                         ` Björn Persson
  2025-08-30  3:34                                           ` Lawrence D’Oliveiro
  0 siblings, 1 reply; 125+ messages in thread
From: Björn Persson @ 2025-08-29 15:30 UTC (permalink / raw)


Lawrence D’Oliveiro wrote:
> Shouldn’t your test harness have had something like
> 
>     assert isinstance(result_of_test, bool), \

Nope. The Python interpreter should, at a minimum, have done that as
part of its implementation of the if statement. But you already
understood that much; you're just wilfully refusing to get the point.

A better design would have checked the type at compile time. Then the
tester who wrote "false" would have fixed their mistake right away, and
learned from it. I mean, you do know which newsgroup it is you're
promoting Python in.

Programmers are human. Humans make mistakes. A well-designed
programming language helps the programmer avoid mistakes as much as
possible, and to discover their mistakes as early as possible.
Languages that go out of their way to interpret an obvious mistake as a
valid program are prone to what Paul called disaster.

Björn Persson

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-29  9:41                                             ` Kevin Chadwick
@ 2025-08-30  3:31                                               ` Lawrence D’Oliveiro
  0 siblings, 0 replies; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-30  3:31 UTC (permalink / raw)


On Fri, 29 Aug 2025 09:41:52 -0000 (UTC), Kevin Chadwick wrote:

> Ada was designed to be cost effective as a common language for large and
> realtime systems.
> 
> Full dynamic typing is not cost effective except maybe like C for
> prototyping.

Remember Alan Kay’s dictum: “Simple things should be simple, and complex 
things should be possible”.

Ada may be helpful with keeping complex things manageable, but Python 
helps keep simple things simple.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-29 15:30                                         ` Björn Persson
@ 2025-08-30  3:34                                           ` Lawrence D’Oliveiro
  2025-08-30  8:49                                             ` Kevin Chadwick
  0 siblings, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-30  3:34 UTC (permalink / raw)


On Fri, 29 Aug 2025 17:30:21 +0200, Björn Persson wrote:

> Lawrence D’Oliveiro wrote:
>>
>> Shouldn’t your test harness have had something like
>> 
>>     assert isinstance(result_of_test, bool), \
> 
> Nope. The Python interpreter should, at a minimum, have done that as
> part of its implementation of the if statement.

Yes, the issue with the if-statement condition not being required to be of 
a boolean type.

Python types are dynamic. So you need to check them at run-time. That goes 
with the territory.

> But you already understood that much; you're just wilfully refusing to
> get the point.

Now you’re trying to make this into some kind of personal thing. Stop it.

> A better design would have checked the type at compile time.

Remember Alan Kay’s dictum: “Simple things should be simple, and complex 
things should be possible”.

Ada may be helpful with keeping complex things manageable. But Python 
helps keep simple things simple, in a way that Ada cannot.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-29  9:33                                                   ` Kevin Chadwick
@ 2025-08-30  6:21                                                     ` Lawrence D’Oliveiro
  2025-08-31  0:43                                                       ` Kevin Chadwick
  0 siblings, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-30  6:21 UTC (permalink / raw)


On Fri, 29 Aug 2025 09:33:27 -0000 (UTC), Kevin Chadwick wrote:

> ... I don't believe you understand what I'm talking about as I
> believe Python does not have the ability for easily creating e.g.
> Unsigned_2, Unsigned_4 or Unsigned_15 and writing just those bits by
> assignment to wherever the programmer wants.

Something like the following? (Details of the BitVector class
omitted, but I can supply them if you’re interested):

+*In[2]:*+
[source, ipython3]
----
# constructor: v = BitVector(«width»[, «init»])
# «init» defaults to all zeroes if omitted
v1 = BitVector(3, 2)
v2 = BitVector(5)
v1, v2, int(v1), int(v2)
----

+*Out[2]:*+
----(BitVector(3, [False, True, False]),
 BitVector(5, [False, False, False, False, False]),
 2,
 0)----

+*In[3]:*+
[source, ipython3]
----
# access can be single bits, or use standard Python slice notation
v1[0:2], v1[2], v1[1:3], v2[2:5]
----

+*Out[3]:*+
----(BitVector(2, [False, True]),
 False,
 BitVector(2, [True, False]),
 BitVector(3, [False, False, False]))----

+*In[4]:*+
[source, ipython3]
----
v1[1:3] = [False, True]
v2[:] = 13
----

+*In[5]:*+
[source, ipython3]
----
v1, v2, int(v1), int(v2)
----

+*Out[5]:*+
----(BitVector(3, [False, False, True]),
 BitVector(5, [True, False, True, True, False]),
 4,
 13)----

+*In[6]:*+
[source, ipython3]
----
# “+” does concatenation of BitVectors; note little-endian ordering.
v1 + v2, int(v1 + v2)
----

+*Out[6]:*+
----(BitVector(8, [False, False, True, True, False, True, True, False]), 108)----

+*In[7]:*+
[source, ipython3]
----
# shifts produce results with same number of bits
v2, v2 >> 3, v2 << 3, v2[:3] << 3, (v2 + BitVector(3)) << 3
----

+*Out[7]:*+
----(BitVector(5, [True, False, True, True, False]),
 BitVector(5, [True, False, False, False, False]),
 BitVector(5, [False, False, False, True, False]),
 BitVector(3, [False, False, False]),
 BitVector(8, [False, False, False, True, False, True, True, False]))----

+*In[8]:*+
[source, ipython3]
----
v1[1:3]
----

+*Out[8]:*+
----BitVector(2, [False, True])----

Following all raise errors

+*In[9]:*+
[source, ipython3]
----
v2[:1] = v1
----

+*Out[9]:*+
----
    ---------------------------------------------------------------------------

    ValueError                                Traceback (most recent call last)

    Cell In[9], line 1
    ----> 1 v2[:1] = v1

    [traceback details omitted]

    ValueError: value has 3 bits, only allowed 1 for this usage
----

+*In[10]:*+
[source, ipython3]
----
v1[:] = 8
----

+*Out[10]:*+
----
    ---------------------------------------------------------------------------

    ValueError                                Traceback (most recent call last)

    Cell In[10], line 1
    ----> 1 v1[:] = 8

    [traceback details omitted]

    ValueError: value has 4 bits, only allowed 3 for this usage
----

+*In[11]:*+
[source, ipython3]
----
v2[0] = 2
----

+*Out[11]:*+
----
    ---------------------------------------------------------------------------

    ValueError                                Traceback (most recent call last)

    Cell In[11], line 1
    ----> 1 v2[0] = 2

    [traceback details omitted]

    ValueError: value has 2 bits, only allowed 1 for this usage
----

+*In[12]:*+
[source, ipython3]
----
v1[:] = v2[:]
----

+*Out[12]:*+
----
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)

    Cell In[12], line 1
    ----> 1 v1[:] = v2[:]

    [traceback details omitted]

    ValueError: value has 5 bits, only allowed 3 for this usage
----

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-30  3:34                                           ` Lawrence D’Oliveiro
@ 2025-08-30  8:49                                             ` Kevin Chadwick
  2025-08-30 22:34                                               ` Lawrence D’Oliveiro
  0 siblings, 1 reply; 125+ messages in thread
From: Kevin Chadwick @ 2025-08-30  8:49 UTC (permalink / raw)



>
>Ada may be helpful with keeping complex things manageable. But Python 
>helps keep simple things simple, in a way that Ada cannot.

I don't know if there is *ANY* truth to that as I do not use Python but your
 example seems to suggest Python has complicated gotchas where Ada is
 simple. The code you linked didn't seem anywhere near as readable as Ada
 either.

-- 
Regards, Kc

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-29  8:15                                               ` Dmitry A. Kazakov
@ 2025-08-30 22:25                                                 ` Lawrence D’Oliveiro
  2025-08-31  9:26                                                   ` Dmitry A. Kazakov
  0 siblings, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-30 22:25 UTC (permalink / raw)


On Fri, 29 Aug 2025 10:15:56 +0200, Dmitry A. Kazakov wrote:

> On 2025-08-29 05:54, Lawrence D’Oliveiro wrote:
>>
>> On Thu, 28 Aug 2025 11:43:15 +0200, Dmitry A. Kazakov wrote:
>> 
>>> In Python everything is untyped even when type annotations are used.
>> 
>>      Python 3.13.7 (main, Aug 20 2025, 22:17:40) [GCC 14.3.0] on linux
>>      Type "help", "copyright", "credits" or "license" for more information.
>>      >>> 2 + "2"
>>      Traceback (most recent call last):
>>        File "<python-input-0>", line 1, in <module>
>>          2 + "2"
>>          ~~^~~~~
>>      TypeError: unsupported operand type(s) for +: 'int' and 'str'
> 
> "+" is implemented to raise an exception named TypeError. So? How is 
> that a type check?

You mean it doesn’t do type checking in Ada??

> How do I know if that happens without executing "+"?

Look at the definitions of the classes involved.

> It is just untyped as no types of "+" are specified anywhere.

They are in the classes that implement that operator.

> It is an undefined behavior ...

It is defined in the classes that implement that operator.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-29  8:07                                                 ` Dmitry A. Kazakov
@ 2025-08-30 22:27                                                   ` Lawrence D’Oliveiro
  2025-08-31  9:15                                                     ` Dmitry A. Kazakov
  0 siblings, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-30 22:27 UTC (permalink / raw)


On Fri, 29 Aug 2025 10:07:45 +0200, Dmitry A. Kazakov wrote:

> On 2025-08-29 05:53, Lawrence D’Oliveiro wrote:
>
>> But they are still of that same “Abstract_Packet'Class”, which is
>> the base class.
>
> Yes, because it was designed so. This is what being typed is.

That is what “being statically typed” is.

>> You cannot specify “Foo_Packet'Class” as the return type on one
>> call, “Bar_Packet'Class” on another call, etc.
>
> Why should I?

Because that’s what dynamic typing means.

Remember, if a language is not typed (e.g. BLISS, BCPL), then you
don’t specify any types at all.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-29  7:53                                             ` Dmitry A. Kazakov
@ 2025-08-30 22:29                                               ` Lawrence D’Oliveiro
  2025-08-31  8:56                                                 ` Dmitry A. Kazakov
  0 siblings, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-30 22:29 UTC (permalink / raw)


On Fri, 29 Aug 2025 09:53:42 +0200, Dmitry A. Kazakov wrote:

> On 2025-08-29 05:57, Lawrence D’Oliveiro wrote:
> 
>> But the bug might be at the other end of a comms connection in somebody
>> else’s code, not at my end.
> 
> That is not an error in your code.

You were the one saying “errors are bugs”. Not changing your mind now, are 
you?

> You confuse errors with exceptional states.

Exceptions are a great way to handle a lot of error cases.

> No program can check correctness of itself.

Not sure what this is supposed to be relevant to, but surely a language as 
heavily used in safety-critical applications as Ada would typically see a 
lot of cross-checking happening in real-world programs.

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-30  8:49                                             ` Kevin Chadwick
@ 2025-08-30 22:34                                               ` Lawrence D’Oliveiro
  0 siblings, 0 replies; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-30 22:34 UTC (permalink / raw)


On Sat, 30 Aug 2025 08:49:22 -0000 (UTC), Kevin Chadwick wrote:

>> Ada may be helpful with keeping complex things manageable. But Python
>> helps keep simple things simple, in a way that Ada cannot.
>
> I don't know if there is *ANY* truth to that as I do not use Python
> but your example seems to suggest Python has complicated gotchas
> where Ada is simple. The code you linked didn't seem anywhere near
> as readable as Ada either.

You mean the BitVector example? That was a dump from a Jupyter
notebook, in “asciidoc” format, with various indicators as to what was
input source and what was program output. Here’s what the code looks
like without that:

    # constructor: v = BitVector(«width»[, «init»])
    # «init» defaults to all zeroes if omitted
    v1 = BitVector(3, 2)
    v2 = BitVector(5)
    v1, v2, int(v1), int(v2)

    # access can be single bits, or use standard Python slice notation
    v1[0:2], v1[2], v1[1:3], v2[2:5]

    v1[1:3] = [False, True]
    v2[:] = 13

    v1, v2, int(v1), int(v2)

    # “+” does concatenation of BitVectors; note little-endian ordering.
    v1 + v2, int(v1 + v2)

    # shifts produce results with same number of bits
    v2, v2 >> 3, v2 << 3, v2[:3] << 3, (v2 + BitVector(3)) << 3

    v1[1:3]

    Following all raise errors

    v2[:1] = v1

    v1[:] = 8

    v2[0] = 2

    v1[:] = v2[:]

I’ll leave you to go back and reread the other posting, to see how the
output relates to that ...

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-30  6:21                                                     ` Lawrence D’Oliveiro
@ 2025-08-31  0:43                                                       ` Kevin Chadwick
  2025-08-31  7:30                                                         ` Lawrence D’Oliveiro
  0 siblings, 1 reply; 125+ messages in thread
From: Kevin Chadwick @ 2025-08-31  0:43 UTC (permalink / raw)



>
>Something like the following? (Details of the BitVector class
>omitted, but I can supply them if you’re interested):
>

I'm surprised Python can do some of what you have shown but it's a long way
 from what would be required.


-- 
Regards, Kc

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-31  0:43                                                       ` Kevin Chadwick
@ 2025-08-31  7:30                                                         ` Lawrence D’Oliveiro
  2025-08-31  8:51                                                           ` Kevin Chadwick
  0 siblings, 1 reply; 125+ messages in thread
From: Lawrence D’Oliveiro @ 2025-08-31  7:30 UTC (permalink / raw)


On Sun, 31 Aug 2025 00:43:18 -0000 (UTC), Kevin Chadwick wrote:

>> Something like the following? (Details of the BitVector class
>> omitted, but I can supply them if you’re interested):
>>
> I'm surprised Python can do some of what you have shown but it's a long way
> from what would be required.

What’s missing?

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-31  7:30                                                         ` Lawrence D’Oliveiro
@ 2025-08-31  8:51                                                           ` Kevin Chadwick
  0 siblings, 0 replies; 125+ messages in thread
From: Kevin Chadwick @ 2025-08-31  8:51 UTC (permalink / raw)


On 31/08/2025 08:30, Lawrence D\x19Oliveiro wrote:
>On Sun, 31 Aug 2025 00:43:18 -0000 (UTC), Kevin Chadwick wrote:
>
>>> Something like the following? (Details of the BitVector class
>>> omitted, but I can supply them if you’re interested):
>>>
>> I'm surprised Python can do some of what you have shown but it's a long way
>> from what would be required.
>
>What’s missing?

Complete size controls and things like vomatile_full_access and proper type
 protections (though Python/C users might be quite happy with the ability to
 slice between completely different registers that could be dangerous and
 breaks separation of concerns).

https://learn.adacore.com/courses/intro-to-embedded-sys-prog/chapters/low_level_programming.html#separation-principle


-- 
Regards, Kc

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-30 22:29                                               ` Lawrence D’Oliveiro
@ 2025-08-31  8:56                                                 ` Dmitry A. Kazakov
  0 siblings, 0 replies; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-31  8:56 UTC (permalink / raw)


On 2025-08-31 00:29, Lawrence D’Oliveiro wrote:
> On Fri, 29 Aug 2025 09:53:42 +0200, Dmitry A. Kazakov wrote:
> 
>> On 2025-08-29 05:57, Lawrence D’Oliveiro wrote:
>>
>>> But the bug might be at the other end of a comms connection in somebody
>>> else’s code, not at my end.
>>
>> That is not an error in your code.
> 
> You were the one saying “errors are bugs”. Not changing your mind now, are
> you?

Are you aware that there may exist more than one program? (:-))

>> You confuse errors with exceptional states.
> 
> Exceptions are a great way to handle a lot of error cases.

Bugs are handled by text editor. Exceptions are a program control flow 
mechanism.

>> No program can check correctness of itself.
> 
> Not sure what this is supposed to be relevant to, but surely a language as
> heavily used in safety-critical applications as Ada would typically see a
> lot of cross-checking happening in real-world programs.

None of which is a correctness check.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-30 22:27                                                   ` Lawrence D’Oliveiro
@ 2025-08-31  9:15                                                     ` Dmitry A. Kazakov
  0 siblings, 0 replies; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-31  9:15 UTC (permalink / raw)


On 2025-08-31 00:27, Lawrence D’Oliveiro wrote:
> On Fri, 29 Aug 2025 10:07:45 +0200, Dmitry A. Kazakov wrote:
> 
>> On 2025-08-29 05:53, Lawrence D’Oliveiro wrote:
>>
>>> But they are still of that same “Abstract_Packet'Class”, which is
>>> the base class.
>>
>> Yes, because it was designed so. This is what being typed is.
> 
> That is what “being statically typed” is.

No, being able to specify a set of types is neither static nor dynamic. 
Nothing in dynamic typing prevents you from doing that and checking at 
run-time if the constraint satisfied.

But when the behavior is defined as WHATEVER as in Python that is 
untyped. It is equivalent to having a single proper type with some tag 
called "dynamic type." All dynamically typed languages are statically 
typed in that sense, which is why they are uninteresting from the type 
system point of view.

>>> You cannot specify “Foo_Packet'Class” as the return type on one
>>> call, “Bar_Packet'Class” on another call, etc.
>>
>> Why should I?
> 
> Because that’s what dynamic typing means.

Dynamic typing means that the type of an object is not statically 
determinable and that it can change. In a statically typed language the 
type is determinable and cannot be changed. Any dynamically typed 
language can be reduced to an equivalent statically typed one.

> Remember, if a language is not typed (e.g. BLISS, BCPL), then you
> don’t specify any types at all.

Just like in Python where types of arguments and results are not specified.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

* Re: In precision typing we trust
  2025-08-30 22:25                                                 ` Lawrence D’Oliveiro
@ 2025-08-31  9:26                                                   ` Dmitry A. Kazakov
  0 siblings, 0 replies; 125+ messages in thread
From: Dmitry A. Kazakov @ 2025-08-31  9:26 UTC (permalink / raw)


On 2025-08-31 00:25, Lawrence D’Oliveiro wrote:
> On Fri, 29 Aug 2025 10:15:56 +0200, Dmitry A. Kazakov wrote:
> 
>> On 2025-08-29 05:54, Lawrence D’Oliveiro wrote:
>>>
>>> On Thu, 28 Aug 2025 11:43:15 +0200, Dmitry A. Kazakov wrote:
>>>
>>>> In Python everything is untyped even when type annotations are used.
>>>
>>>       Python 3.13.7 (main, Aug 20 2025, 22:17:40) [GCC 14.3.0] on linux
>>>       Type "help", "copyright", "credits" or "license" for more information.
>>>       >>> 2 + "2"
>>>       Traceback (most recent call last):
>>>         File "<python-input-0>", line 1, in <module>
>>>           2 + "2"
>>>           ~~^~~~~
>>>       TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>
>> "+" is implemented to raise an exception named TypeError. So? How is
>> that a type check?
> 
> You mean it doesn’t do type checking in Ada??

I mean that no type check is made in Python. Naming exception TypeError 
does not mean type error.

>> How do I know if that happens without executing "+"?
> 
> Look at the definitions of the classes involved.

What "look" does formally mean and why Python didn't do it?

>> It is just untyped as no types of "+" are specified anywhere.
> 
> They are in the classes that implement that operator.

Can you list them? No? Then see above "no types of "+" are specified 
anywhere."

>> It is an undefined behavior ...
> 
> It is defined in the classes that implement that operator.

q.e.d.

It is undefined in the classes that do not implement that operator => On 
all classes it is undefined.

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

^ permalink raw reply	[flat|nested] 125+ messages in thread

end of thread, other threads:[~2025-08-31  9:26 UTC | newest]

Thread overview: 125+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
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

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