comp.lang.ada
 help / color / mirror / Atom feed
From: "Jed" <jehdiah@orbitway.net>
Subject: Re: Why use C++?
Date: Fri, 12 Aug 2011 14:06:55 -0500
Date: 2011-08-12T14:06:55-05:00	[thread overview]
Message-ID: <j23tkh$gqa$1@dont-email.me> (raw)
In-Reply-To: fwnlcp4mgj03$.1tjeqjtos00o8$.dlg@40tude.net


"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message 
news:fwnlcp4mgj03$.1tjeqjtos00o8$.dlg@40tude.net...
> On Fri, 12 Aug 2011 08:26:26 -0500, Jed wrote:
>
>> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message
>> news:1vn800hbyx8k4$.1lsveclj56197$.dlg@40tude.net...
>
>>> I think you get me wrong. It is rather about an ability to state the
>>> contracts than about flexibility. If any type is needed in your 
>>> design, you
>>> should be able to describe the behavior of that type [by the language
>>> means!] in a way the program reader would understand without looking 
>>> into
>>> the implementation or compiler/machine documentation.
>>
>> In another post in this thread, I wondered if you just want a higher
>> level of abstraction, and then noted that I consider that at a higher
>> level than "close to the machine" like C and C++ are. So, is that what
>> you want?
>
> I want the type semantics specified. C/C++ int is neither lower level 
> nor
> closer to the machine it is just ill-defined. The concern is this, not 
> its
> relation to the machine, of which I (as a programmer) just do not care.

What more definition do you want? Size guarantee? Other than that, what 
is ambiguous (platform-specific) about C++ int?

>
>>>>> That depends. In Ada integer types are constructed from ranges.
>>>>
>>>> Oh, I thought ranges in Ada were "subtype ranges", hence being based
>>>> upon
>>>> the built-ins.
>>>
>>> Both:
>>>
>>>   type Tiny is range -100..100;  -- A new type
>>>   subtype Nano is Tiny range 0..2; -- A subtype
>>
>> What underlies those "new" types though?
>
> That is up to the compiler.

Do you care about the size of the type ever?

>
>> Aren't they just "syntactic" sugar over some well-defined primitives?
>
> What are "well-defined primitives"?

The built-in things that are closest to the machine, with consistent 
representation across machines that can be relied on, that other things 
are built on top of. (That's a stab at it, anywho).

>
>> Wouldn't they have to be? I.e.,
>> at some point, the hardware has to be interfaced.
>
> Yes. Consider a that the target is a pile of empty bier cans maintained 
> by
> a robot. I presume that somehow the position of the cans or maybe their
> colors in that pile must reflect values of the type. Why should I (as a
> programmer) worry about that?

Because you know it isn't beer cans (call it, say, "a simplifying 
assumption") and you may want to (probably will want to) send some of 
those integers to another machine across the internet or to disk.

>
>>>>>  In order to
>>>>> specify the range you need literals. The type of a literal
>>>>> (Universal_Integer) is not the type of the result. So technically 
>>>>> the
>>>>> type is not built on Universal_Integer.
>>>>
>>>> But the "subrange" is meant as "subrange of some existing type", 
>>>> yes?
>>>> If so, what existing type?
>>>
>>> Mathematically there is no need to have a supertype containing the
>>> ranged one.
>>
>> I'm only concerned about pragmatics (implementation).
>
> It is simple to implement such a type based on an integer machine type 
> when
> values of the language type correspond to the values of the machine 
> type
> (injection). It is less simple but quite doable to implement this type 
> on a
> array of machine values. The algorithms are well known and well 
> studied. I
> see no problem with that.

Just another layer of abstraction. So it's as simple as that (another 
layer of abstraction), yes?

>
>>> (The way compiler would implement that type is uninteresting,
>>
>> Ha! To me that is KEY.
>
> This is not a language design question. It is a matter of compiler 
> design
> targeting given machine.

Oh? I've been having a language design discussion (primarily). You've 
been having a compiler implementation discussion?

>
>>>>> The language shall distinguish the interface, the contract the
>>>>> type fulfills, and the implementation of that type. "raw" turns 
>>>>> this
>>>>> picture upside down. First comes an implementation and then, 
>>>>> frequently
>>>>> never, consideration whether this implementation is right for the 
>>>>> needs.
>>>>
>>>> You meant "application" instead of "language", right? So you would 
>>>> prefer
>>>> to have a special "loop counter integer" instead of using a general
>>>> unsigned integer?
>>>
>>> Sure. In fact in Ada it is much in this way:
>>>
>>>   for Index in A'Range loop
>>>
>>> I don't care about the type of Index, it is just the type suitable to 
>>> index
>>> the array A.
>>
>> In loop control, I wouldn't care either, but given that it's a 
>> compiler
>> thing then, it wouldn't have to be a special type at all, for the
>> compiler can guarantee that the use of the standard primitive type 
>> would
>> be used appropriately for it is the one to generate the code from the
>> loop.
>
> This is an implementation detail which shall not be exposed.

Sure, it doesn't matter in the case of the loop variable.

>  Because Index
> is a subtype of the array index the compiler can omit any range checks.
> Contracts are useful for both the programmer and the compiler.
>
>> I care in data structs though what the "physical" type is.
>
> Why should you? Again, considering design by contract, and attempt to
> reveal the implementation behind the contract is a design error.
> You shall
> not rely on anything except the contract, that is a fundamental 
> principle.

While that paradigm does have a place, that place is not "everywhere". 
That would be throwing the baby out with the bath water.

The comments being made in this thread are really suggesting 4GL. While 
that is fine, there is a place for 3GLs and hybrids. One size fits all, 
really doesn't.

>
>>>>>> Are you suggesting that a language have NO types?
>>>>>
>>>>> I suggest a minimal possible set of given types and as wide as
>>>>> possible set of types constructed.
>>>>
>>>> And do you reject wrapping an existing integer types to get desired
>>>> semantics?
>>>
>>> Not at all.
>>
>> But you do think it is inadequate, clearly.
>
> No.

Well then, if wrapping is OK, what else is needed and why?

> Inadequate would be to expose such integer types in the contracts.

What contracts?

> Implementations based on existing types are possible, but you would 
> need
> much language support (e.g. reflection) in order to ensure that the
> implementation fulfills the contract. As an example, consider an
> implementation of
>
>   type I is range -200_000_000..100_000; -- This is the contract, which
>      -- includes the range and the behavior of +,-,*/,**,mod,rem, 
> overflow
>      -- checks etc
>
> on top of C's int.
>

Oh, THAT "contract". (I reserve that term for function calls, just to 
avoid overloading it, but I actually prefer "specification" as I 
associate "contract" with Eiffel).

I'm don't know what you are suggesting the ideal implementation would be 
of the ranged type above.

>>>>> The point is that it is the application domain
>>>>> requirements to drive the design, and the choice of types in
>>>>> particular.
>>>>
>>>> Can that be achieved? At what degree of complexity?
>>>
>>> We probably are close to the edge.
>>
>> Meaning "highly complex"?
>
> Enough complex to make unsustainable the ways programs are designed 
> now.

Explain please.

>
>>>> Can it/should it be hardware-supported?
>>>
>>> No. Hardware becomes less and less relevant as the software 
>>> complexity
>>> increases.
>>
>> OK, so another layer of abstraction is what you want. The syntax of, 
>> say,
>> Ada's ranged types, for example. So your call is just for more 
>> syntactic
>> sugar then, yes?
>
> Rather more support to contract driven design and static analysis.

That doesn't appear to be a lot of complexity to introduce into a 
compiler. It seems like common sense. So, what am I missing here?

The new enums in C++11 are a step in the right direction, yes? Maybe in 
the next iteration we'll get ranges.





  reply	other threads:[~2011-08-12 19:06 UTC|newest]

Thread overview: 87+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <fb9f787c-af06-427a-82b6-b0684e8dcbc5@s2g2000vby.googlegroups.com>
     [not found] ` <j1kaj8$dge$1@adenine.netfront.net>
     [not found]   ` <1e292299-2cbe-4443-86f3-b19b8af50fff@c29g2000yqd.googlegroups.com>
     [not found]     ` <j1tha5$11q5$1@adenine.netfront.net>
     [not found]       ` <1fd0cc9b-859d-428e-b68a-11e34de84225@gz10g2000vbb.googlegroups.com>
2011-08-10 19:05         ` Why use C++? Niklas Holsti
2011-08-10 22:37           ` Randy Brukardt
2011-08-10 22:49             ` Ludovic Brenta
2011-08-12  4:54               ` Randy Brukardt
2011-08-11  7:54             ` Dmitry A. Kazakov
2011-08-11  8:20               ` Jed
2011-08-11  9:13                 ` Dmitry A. Kazakov
2011-08-11 10:57                   ` Jed
2011-08-11 11:43                     ` Georg Bauhaus
2011-08-12  5:07                       ` Jed
2011-08-11 13:11                     ` Nomen Nescio
2011-08-11 15:11                       ` Paul
2011-08-12  5:15                       ` Jed
2011-08-12 21:39                         ` Fritz Wuehler
2011-08-14  6:52                           ` Jed
2011-08-14  8:13                             ` Nomen Nescio
2011-08-11 15:09                     ` Dmitry A. Kazakov
2011-08-12  5:03                       ` Jed
2011-08-12  8:32                         ` Georg Bauhaus
2011-08-12 13:15                           ` Hyman Rosen
2011-08-12 22:09                             ` Randy Brukardt
2011-08-12 15:14                           ` Jed
2011-08-12 17:20                             ` Georg Bauhaus
2011-08-12 19:51                               ` Jed
2011-08-12 21:22                                 ` Ludovic Brenta
2011-08-14  7:00                                   ` Jed
2011-08-16 13:06                                     ` Ludovic Brenta
2011-08-13  9:37                                 ` Georg Bauhaus
2011-08-14  5:22                                   ` Jed
2011-08-13 10:27                                 ` Georg Bauhaus
2011-08-14  5:35                                   ` Jed
2011-08-14 20:13                                     ` Georg Bauhaus
2011-08-15 11:38                                     ` Georg Bauhaus
2011-08-13 11:02                                 ` Georg Bauhaus
2011-08-14  5:56                                   ` Jed
2011-08-12  9:21                         ` Dmitry A. Kazakov
2011-08-12 13:26                           ` Jed
2011-08-12 14:30                             ` Dmitry A. Kazakov
2011-08-12 19:06                               ` Jed [this message]
2011-08-12 20:05                                 ` Dmitry A. Kazakov
2011-08-13  7:53                                   ` Jed
2011-08-13  9:15                                     ` Dmitry A. Kazakov
2011-08-13  9:29                                       ` Ian Collins
2011-08-13  9:52                                         ` Dmitry A. Kazakov
2011-08-13 11:10                                           ` Ian Collins
2011-08-13 11:46                                             ` Georg Bauhaus
2011-08-13 20:30                                               ` Ian Collins
2011-08-13 11:54                                             ` Brian Drummond
2011-08-13 13:12                                               ` Simon Wright
2011-08-14 11:01                                                 ` Brian Drummond
2011-08-14  4:54                                             ` Jed
2011-08-14  4:35                                           ` Jed
2011-08-14  6:46                                             ` Dmitry A. Kazakov
2011-08-14  4:49                                           ` Jed
2011-08-14  6:51                                             ` Dmitry A. Kazakov
2011-08-14  4:29                                       ` Jed
2011-08-14  7:29                                         ` Dmitry A. Kazakov
2011-08-16  8:18                                       ` Nick Keighley
2011-08-16  8:47                                         ` Dmitry A. Kazakov
2011-08-16  9:52                                           ` Nick Keighley
2011-08-16 10:39                                             ` Dmitry A. Kazakov
2011-08-16 10:23                                           ` Georg Bauhaus
2011-08-16 10:58                                             ` Dmitry A. Kazakov
2011-08-16 11:44                                               ` Georg Bauhaus
2011-08-16 14:51                                               ` Bill Findlay
2011-08-16 19:13                                                 ` Dmitry A. Kazakov
2011-08-16 19:23                                                   ` Bill Findlay
2011-08-12 11:48                 ` Stuart Redmann
2011-08-12 13:12                   ` Vinzent Hoefler
2011-08-12 15:50                     ` Stuart Redmann
2011-08-12 17:02                       ` Bill Findlay
2011-08-15 12:59                       ` Vinzent Hoefler
2011-08-12  5:02               ` Randy Brukardt
2011-08-12  5:16                 ` Robert Wessel
2011-08-12 16:39                   ` Adam Beneschan
2011-08-12  5:24                 ` Jed
2011-08-12  6:51                   ` Paavo Helde
2011-08-12  7:41                     ` Georg Bauhaus
2011-08-12 15:50                   ` Fritz Wuehler
2011-08-12 19:59                     ` Jed
2011-08-13  8:06                     ` Stephen Leake
2011-08-12  9:40                 ` Dmitry A. Kazakov
2011-08-12  9:45                   ` Ludovic Brenta
2011-08-12 10:48                     ` Georg Bauhaus
2011-08-12 15:56                       ` Ludovic Brenta
2011-08-13  8:08                   ` Stephen Leake
2011-08-18 13:39               ` Louisa
replies disabled

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