comp.lang.ada
 help / color / mirror / Atom feed
From: Shark8 <onewingedshark@gmail.com>
Subject: Re: Type invariants and private extensions?
Date: Tue, 12 Sep 2017 15:34:22 -0700 (PDT)
Date: 2017-09-12T15:34:22-07:00	[thread overview]
Message-ID: <a0daf913-644d-4438-8acb-0df2ae84de1a@googlegroups.com> (raw)
In-Reply-To: <op9esv$1foj$1@gioia.aioe.org>

On Tuesday, September 12, 2017 at 2:09:08 PM UTC-6, Victor Porton wrote:
> Jeffrey R. Carter wrote:
> 
> > 
> > "I want to" is not the same as "there is no way to solve the problem in
> > current Ada". Ada has a feature that provides exactly what you need. It's
> > called a variant record.
> 
> It is a tagged type. AFAIK, a type cannot be both a variant record and 
> tagged.

You certainly can:

    Type Type_Enumeration is ( TInteger, TReal, TBoolean, Nothing );
    
    Type Example( Item_Type : Type_Enumeration ) is tagged record
	case Item_Type is
	    when TInteger => I : Integer;
	    when TReal    => R : Float range Float'Range;
	    when TBoolean => B : Boolean;
	    when Nothing  => Null;
	end case;
    end record;
    
> Moreover, the object in consideration is a wrapper over a certain C API. It 
> surely cannot be described in variant record terms.

Sure it can; there's a reason that there's a separation between specification and body, part of which is so you can hide something like an interface to C and present something sensible to your program/clients.

> Moreover, bindings may contain more than one row of values which can be 
> enumerated like an iterator. I am not sure if this can be expressed in terms 
> of a variant record.

Variant records can have discriminants, too. (In fact, discriminants are half of how variant-records do their thing, the other half being the "internal case statement/construct".)

> The proposed feature increases reliability of programming. It is undoubtful 
> that adding more type invariants increases reliability.

I fail to see how you couldn't achieve this by use of (a) variant records, and (b) constrained subtypes.

eg:
  SubType Integer_Example is Example( TInteger );
  Function X(Input : Integer) Return Integer_Example;


  reply	other threads:[~2017-09-12 22:34 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-11 19:51 Type invariants and private extensions? Victor Porton
2017-09-11 20:00 ` Egil H H
2017-09-11 20:48   ` Victor Porton
2017-09-11 21:19     ` Egil H H
2017-09-11 21:27       ` Victor Porton
2017-09-11 21:49         ` Egil H H
2017-09-11 22:00           ` Victor Porton
2017-09-11 22:06             ` Egil H H
2017-09-12  7:30             ` Dmitry A. Kazakov
2017-09-11 22:00         ` Jere
2017-09-11 22:02           ` Victor Porton
2017-09-12 18:26             ` Jeffrey R. Carter
2017-09-12 18:54               ` Victor Porton
2017-09-12 19:56                 ` Jeffrey R. Carter
2017-09-12 20:08                   ` Victor Porton
2017-09-12 22:34                     ` Shark8 [this message]
2017-09-12 22:59                       ` Victor Porton
2017-09-13  4:21                         ` Jere
2017-09-13  4:28                           ` Jere
2017-09-13  4:34                             ` Jere
2017-09-14 13:52                           ` Victor Porton
2017-09-15  0:48                             ` Jere
2017-09-16 14:22                               ` Victor Porton
2017-09-14  7:28                         ` Shark8
2017-09-14 13:56                           ` Victor Porton
2017-09-14 13:58                             ` Victor Porton
2017-09-11 22:48         ` Shark8
2017-10-02 23:16         ` Randy Brukardt
replies disabled

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