From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on ip-172-31-91-241.ec2.internal X-Spam-Level: X-Spam-Status: No, score=0.0 required=3.0 tests=none autolearn=ham autolearn_force=no version=4.0.1 Path: nntp.eternal-september.org!eternal-september.org!feeder.eternal-september.org!.POSTED!not-for-mail From: Alex // nytpu Newsgroups: comp.lang.ada Subject: Re: In precision typing we trust Date: Wed, 27 Aug 2025 19:17:43 -0600 Organization: A noiseless patient Spider Message-ID: <108oann$115to$1@dont-email.me> References: <107uv9g$3019a$1@dont-email.me> <107v1ji$303of$1@dont-email.me> <336fbb5f-a279-ea8e-67fd-f62bb00d6a89@irrt.De> <107vfb9$34cpj$1@dont-email.me> <10855lq$gj8l$1@dont-email.me> <1088h1a$19635$1@dont-email.me> <1089p1i$1ig1d$1@dont-email.me> <108aq2p$1qo9o$1@dont-email.me> <108b1r3$1sj3c$1@dont-email.me> <108dh4t$2f5h3$2@dont-email.me> <108dkik$2g20p$1@dont-email.me> <108g1cg$32gqg$2@dont-email.me> <108h6b0$3a75k$2@dont-email.me> <108iiq5$3lihe$3@dont-email.me> <108mhhk$j2jt$1@dont-email.me> <108mis1$j4cj$1@dont-email.me> <108o33p$vok4$5@dont-email.me> <108o6rp$10njb$1@dont-email.me> <108o7cm$10qct$1@dont-email.me> <108o845$10pj9$3@dont-email.me> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Thu, 28 Aug 2025 01:17:45 +0000 (UTC) Injection-Info: dont-email.me; posting-host="73580d5762be5c28419a9335b061e78a"; logging-data="1087416"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+CDiYe8Ywv/7AlzHJLrWWN" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:WUOAkeI+ZxWXLVp4GI1u8Q7QtjI= Content-Language: en-US, en-US-large In-Reply-To: <108o845$10pj9$3@dont-email.me> Xref: feeder.eternal-september.org comp.lang.ada:66958 List-Id: 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/