From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM autolearn=unavailable autolearn_force=no version=3.4.4 X-Received: by 10.224.110.68 with SMTP id m4mr10485870qap.2.1364351249676; Tue, 26 Mar 2013 19:27:29 -0700 (PDT) X-Received: by 10.50.41.67 with SMTP id d3mr710725igl.4.1364351249621; Tue, 26 Mar 2013 19:27:29 -0700 (PDT) Path: border1.nntp.ams3.giganews.com!border2.nntp.ams3.giganews.com!border2.nntp.ams2.giganews.com!border4.nntp.ams.giganews.com!border2.nntp.ams.giganews.com!nntp.giganews.com!proxad.net!feeder2-2.proxad.net!nx02.iad01.newshosting.com!newshosting.com!news-out.readnews.com!transit3.readnews.com!209.85.216.88.MISMATCH!ca1no10843984qab.0!news-out.google.com!k8ni11100qas.0!nntp.google.com!ca1no10843979qab.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: comp.lang.ada Date: Tue, 26 Mar 2013 19:27:29 -0700 (PDT) In-Reply-To: Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=69.20.190.126; posting-account=lJ3JNwoAAAAQfH3VV9vttJLkThaxtTfC NNTP-Posting-Host: 69.20.190.126 References: User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <60c750f9-8d76-41a0-b1f2-f43f93c46d6a@googlegroups.com> Subject: Re: Runtime startup code for the GNAT Runtime...and a bit of humble pie. From: Shark8 Injection-Date: Wed, 27 Mar 2013 02:27:29 +0000 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Original-Bytes: 3507 Xref: number.nntp.dca.giganews.com comp.lang.ada:180795 Date: 2013-03-26T19:27:29-07:00 List-Id: On Tuesday, March 26, 2013 6:28:51 PM UTC-6, Diogenes wrote: >=20 > So I figure I might just be better off writing my own implementations of = these things that have NO circular dependencies. Circularity can certainly be a bad thing, the problem is likely that they (= GNAT) didn't explain the circularity well. {And it's perfectly possible to = have two package bodies dependent on the other's spec w/o a circularity in = the spec structure.} There is, however, one spot that I've used it to a goo= d degree to simplify things: in my LISP interpreter (made as an an intro to= Ada 2012) I have two packages branching out from the base LISP which are m= utually dependent: LISP.Lists and LISP.Elements -- each defining their resp= ective objects and the operations on them. {List.Head returns an element an= d Element.As_List/To_List return lists.} Though what I've found really useful in that project is private packages. {= I use it to handle strings internally, keeping that from being exposed to t= he user.} > One specific goal of my runtime is a clear hierarchy that progress direct= ly from ada.ads out to the leaf packages(nodes). No circular deps. No packa= ge should depend on another package that depends on the first package. >=20 > This structure should take about %60 of the teeth gnashing out of the por= ting process. I like that idea. One thing that might prove interesting is using generic p= ackages: say for holding the definitions of those primitive/overridable fun= ctions you mentioned {clone(), futex(), etc} in its formal-parameters. That= might also be an interesting way to handle different instruction-sets -- h= aving the parameter link a lowish-level idea to the instruction [or several= instructions]. It might be a way to achieve a compiler that's easier to re= target.