From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.5-pre1 (2020-06-20) on ip-172-31-74-118.ec2.internal X-Spam-Level: X-Spam-Status: No, score=-1.9 required=3.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.5-pre1 Date: 12 Feb 93 23:57:56 GMT From: wdl39!mab@ford-wdl1.arpa (Mark A Biggar) Subject: Re: What's the difference between... Message-ID: <1993Feb12.235756.9782@wdl.loral.com> List-Id: In article <9302121052.aa23420@Paris.ics.uci.edu> kanderso@mabillon.ICS.UCI.EDU (Kenneth Anderson) writes: >What is the difference between >these two type declarations: > >type Placement is range 0 .. 10; > >subtype Placement is INTEGER range 0 .. 10; > >The reason I ask this, is that I have the duty here at U.C. Irvine of teaching >the students of an Intro to Software Engineering course enough Ada for them >to do their homework assignments. I get two 1.5 hour lectures to do this. Remember that in Ada all type names are really subtype names on an anonymous type. The second declaration above specifies that the type of Placement is the same type as that of INTEGER, or in other words Placement'BASE is the same as INTEGER'BASE. Therefore assignment between variables of subtype Placement and subtype INTEGER are legal with out any explisit type conversion. Of course a constraint check may be necessary. For the first declaration you are leaving it up to the compiler to select the type ('BASE) for Placement. (Note you still only get a subtype) The compiler may pick INTEGER'BASE or it may pick SHORT_INTEGER'BASE or even LONG_INTEGER'BASE. Most compiler pick the smallest type that contains all the values of the specified constraint. It then creates a new anonymous interger type with the same properties as the selected 'BASE type and uses it as the Placement'BASE. Now as Placement is a subtype of a different type than the the subtype INTEGER, you must use an explisit conversion when assigning from one to the other. -- Mark Biggar mab@wdl1.wdl.loral.com