comp.lang.ada
 help / color / mirror / Atom feed
* Disallowing Pre-Defined Operations
@ 2000-03-10  0:00 Charles H. Sampson
  2000-03-09  0:00 ` Samuel T. Harris
                   ` (5 more replies)
  0 siblings, 6 replies; 66+ messages in thread
From: Charles H. Sampson @ 2000-03-10  0:00 UTC (permalink / raw)


     During the deliberations that led to Ada 95, was a mechanism for 
disallowing the pre-defined operations of a type considered?  By "disal-
lowing" I mean some way of informing the compiler that an attempt to use 
a certain pre-defined operation is a compile-time error.  Did anyone 
even ask for it?  (Obviously I didn't, even though I've thought since 
the mid-eighties that it would be a useful capability to have.)

     As an example of what I'm talking about, consider a package that 
implements three distinct floating-points types for measuring length, 
area, and volume.  The pre-defined "+" and "-" are acceptable and there 
are obvious redefinitions of "*" and "/" in some cases.  However, the 
pre-defined "/" for operands of the same type don't make sense and it 
would be nice to get a compile-time warning if one of them is used.  
Yes, a redefinition that raises an exception can be written, but that's
not the same thing.

     In the case that's bothering me at the moment, my project has a 
type called Time_Type.  (We can't be assured that Ada's built-in time 
types are adequate for our purposes.)  We've already had one fairly dif-
ficult bug because a variable of this type was used to hold the differ-
ence between two values of the type, known in our environment as a 
delta-time.  Now defining a new type Delta_Time_Type and the set of Cal- endar-like operations is no big deal, but I have no way of telling the 
compiler to flag such things as the pre-defined

          function "-" (L, R : Time_Type) return Time_Type;

and the "*", "/", and "**" operations on values of these types.

     Declaring the types as private doesn't work.  The types are inher-
ently (and obviously) numeric and nobody on my project would want to 
lose the ability to use numeric literals when appropriate.  (Every time 
this issue has popped up for me over the last 15+ years, it's been in 
the context of numeric types.)  Whenever time I come up with a way of
pluging one hole, it opens another.  For example, overloading "-" as

    function "-" (L : Time_Type; R : Float) return Delta_Time_Type;

would allow any value of type Float to be subtracted, not just literals.

     Does it tell you something about my project when I say that if the 
above definition of "-" were used, I'm sure somebody would discover the 
hole and figure out some "clever" way of exploiting it?

				Charlie

--
******

     For an email response, my user name is "sampson" and my host
is "spawar.navy.mil".




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

end of thread, other threads:[~2000-04-15  0:00 UTC | newest]

Thread overview: 66+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2000-03-10  0:00 Disallowing Pre-Defined Operations Charles H. Sampson
2000-03-09  0:00 ` Samuel T. Harris
2000-03-12  0:00   ` Steven Hovater
2000-03-09  0:00 ` Keith Thompson
2000-03-10  0:00 ` mark_biggar
2000-03-10  0:00 ` Jean-Pierre Rosen
2000-03-11  0:00   ` Tarjei Tj�stheim Jensen
2000-03-11  0:00     ` James S. Rogers
2000-03-13  0:00       ` Tarjei T. Jensen
2000-03-13  0:00     ` Robert Dewar
2000-03-13  0:00       ` Keith Thompson
2000-03-15  0:00         ` Robert Dewar
2000-03-13  0:00     ` dmitry6243
2000-03-15  0:00     ` Charles H. Sampson
2000-03-15  0:00       ` Robert Dewar
2000-03-21  0:00         ` Charles H. Sampson
2000-03-21  0:00           ` Robert Dewar
2000-03-21  0:00           ` Robert A Duff
2000-03-12  0:00   ` claveman
2000-03-12  0:00     ` Robert A Duff
2000-03-13  0:00       ` Tarjei T. Jensen
2000-03-13  0:00         ` Robert A Duff
2000-03-13  0:00         ` Robert Dewar
2000-03-15  0:00       ` Charles H. Sampson
2000-03-15  0:00         ` Tucker Taft
2000-03-15  0:00           ` Paul Graham
2000-03-16  0:00             ` Robert Dewar
2000-03-16  0:00             ` Charles Hixson
2000-03-17  0:00               ` Paul Graham
2000-03-17  0:00                 ` Charles Hixson
2000-03-18  0:00                   ` Robert Dewar
2000-03-20  0:00                     ` Charles Hixson
2000-03-20  0:00                       ` Robert Dewar
2000-03-16  0:00           ` Tarjei T. Jensen
2000-03-16  0:00             ` mark_biggar
2000-03-16  0:00             ` Dale Stanbrough
2000-03-16  0:00           ` Bryce Bardin
2000-03-17  0:00         ` Robert A Duff
2000-03-13  0:00     ` Ted Dennison
2000-03-14  0:00 ` Nick Roberts
2000-03-15  0:00   ` Robert Dewar
2000-03-17  0:00 ` William A Whitaker
2000-03-18  0:00   ` Robert Dewar
2000-03-18  0:00   ` Robert Dewar
2000-03-18  0:00   ` Robert Dewar
2000-03-22  0:00     ` William A Whitaker
2000-03-23  0:00       ` Robert Dewar
2000-04-06  0:00         ` Robert I. Eachus
2000-04-05  0:00           ` Marin D. Condic
2000-04-06  0:00             ` Robert Dewar
2000-04-06  0:00               ` Marin D. Condic
2000-04-07  0:00                 ` Robert Dewar
2000-04-07  0:00                   ` Marin D. Condic
2000-04-07  0:00                 ` dale
2000-04-07  0:00                   ` Marin D. Condic
2000-04-07  0:00                     ` Tarjei T. Jensen
2000-04-07  0:00                       ` Marin D. Condic
2000-04-07  0:00                         ` tmoran
2000-04-07  0:00                           ` Marin D. Condic
2000-04-08  0:00                             ` Vladimir Olensky
2000-04-08  0:00                             ` Vladimir Olensky
2000-04-08  0:00                         ` Dale Stanbrough
2000-04-10  0:00                         ` Tarjei T. Jensen
2000-04-15  0:00                         ` Niklas Holsti
2000-04-15  0:00                           ` Marin D. Condic
2000-04-09  0:00               ` Robert I. Eachus

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