CVS difference for ais/ai-00365.txt

Differences between 1.1 and version 1.2
Log of other versions for file ais/ai-00365.txt

--- ais/ai-00365.txt	2003/12/05 02:29:45	1.1
+++ ais/ai-00365.txt	2003/12/07 05:00:34	1.2
@@ -292,3 +292,52 @@
 the ARM.
 
 ****************************************************************
+
+From: Randy Brukardt
+Sent: Thursday, December  4, 2003  7:18 PM
+
+(The following is a condensation of some private mail between Pascal Leroy and
+myself:)
+
+>> I don't think user-defined
+>> stuff belongs under Ada unless there is no alternative (for
+>> performance reasons, for instance). And I think it is fine to
+>> let vendors decide what to allow. Otherwise, we'll have a
+>> real mess, because we don't want to get into the business of
+>> defining which units a compiler is allowed to build-in, and
+>> which have to be replacable.
+
+>I believe that the topic is worth discussing.  I have never understood
+>the purpose of A.2(4), even though Bob Duff tried to explain to me once
+>that it was a brilliant idea.  Why does it apply only to children, and
+>not to any descendant?  Why Ada and not System or Interfaces?  It seems
+>to me that we should either (1) let the user compile any unit they like
+>or (2) prevent them from compiling any descendant of any
+>language-defined unit.
+
+It was a compromise rule. The original Ada 9x rule was that it was illegal to
+compile a language-defined unit. But that had a very bad consequence that a
+compiler had to keep a list of language-defined units and check every
+compilation unit name against it. So the rule was split into A(4) (which lets
+implementations reject anything they want having to do with predefined units)
+and A.2(4) (which says implementations have to reject children of Ada, which is
+an easy check).
+
+A(4) comes very close to your (2). Since an implementation can restrict
+compilation of children of any language-defined unit, the effect is to restrict
+any descendants. (Of course, if the implementation allows
+Ada.Containers.Eachus, it better allow Ada.Containers.Eachus.Stack.)
+
+In any case, Eachus referenced the wrong paragraph. He doesn't care about
+A.2(4), he cares about A(4), which says that implementations can restrict
+children of language-defined units. He wants to be able to compile children of
+Ada.Containers, and the language currently says that implementations can (but
+don't have to) restrict that. Thus what he wants to do wouldn't be portable. I
+would be very against requiring implementations to be able to replace
+language-defined units (I don't want to get into deciding which ones
+implementors can build in, and which ones have to be Ada code). I don't care as
+much about children (those are allowed in Janus/Ada, because it was too much
+work to prevent), but it is methodologically a bad idea, so I see no need to
+make a change.
+
+****************************************************************

Questions? Ask the ACAA Technical Agent