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=-0.3 required=5.0 tests=BAYES_00, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: 103376,2a34b7ad6c6a0774 X-Google-NewGroupId: yes X-Google-Attributes: gida07f3367d7,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII Path: g2news1.google.com!news2.google.com!news1.google.com!Xl.tags.giganews.com!border1.nntp.dca.giganews.com!nntp.giganews.com!local2.nntp.dca.giganews.com!nntp.bt.com!news.bt.com.POSTED!not-for-mail NNTP-Posting-Date: Sat, 14 Aug 2010 19:15:38 -0500 From: Brian Drummond Newsgroups: comp.lang.ada Subject: Re: Efficiency of code generated by Ada compilers Date: Sun, 15 Aug 2010 01:23:05 +0100 Reply-To: brian@shapes.demon.co.uk Message-ID: References: X-Newsreader: Forte Agent 1.7/32.534 MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit X-Usenet-Provider: http://www.giganews.com X-AuthenticatedUsername: NoAuthUser X-Trace: sv3-XPKpXyP1IHDT3HNB2KxSpJ03rIcrJUPCxOURBmGTMRw3eTJYFqtgmN6qUpz4jyFTCCFlaA2qZetQ77g!0UYqTioK1lgTGH1H9nnQhIQ/qcHFegIybPmisjk+FFy55CKoeg6i3qqVXFbqjrp6YAmdkR4Zv8p9!T1k= X-Complaints-To: abuse@btinternet.com X-DMCA-Complaints-To: abuse@btinternet.com X-Abuse-and-DMCA-Info: Please be sure to forward a copy of ALL headers X-Abuse-and-DMCA-Info: Otherwise we will be unable to process your complaint properly X-Postfilter: 1.3.40 Xref: g2news1.google.com comp.lang.ada:13311 Date: 2010-08-15T01:23:05+01:00 List-Id: On Sat, 14 Aug 2010 15:58:06 +0200, Yannick Duch�ne (Hibou57) wrote: >Le Sat, 14 Aug 2010 12:47:27 +0200, Brian Drummond > a �crit: >> In a single cycle, one small corner of the Rekursiv would perform both >> range >> checks and type checks, > >Range check... and type check. Just real vs integer or was their some kind >of typing in integers as well ? Also may be character, BCD and the like ? Integer was an object like anything else - you could ask 2 its class, size etc. The equivalent of fetching a word from memory was "paging" an object, by its object number, which would simultaneously fetch its type, size in words, address in memory (if it had one), and the first word of its representation - usually from a (155-bit wide) cache. Integers and other simple types encoded the (32-bit) value in the (40-bit) object number so didn't have a separate body in memory - the paging operation unpacked all the above data as though it had come from cache, so even microcode didn't see them as any different. Being an astronomer, David Harland named these "compact objects"! You could certainly subclass integers and impose other semantics - subranges, units, currency exchange rates - on them if desired, but without explicit microcode support, the subclasses would be memory-based objects and thus slower. Explicit microcode support was not so far fetched, either - it had a writable microcode store - though if there were ever a secure Rekursiv, I am convinced the microcode would have to be in ROM. It had a novel approach in many ways - the microcode could be arbitrarily complex, (recursive; hence the name) so garbage collection could be a single instruction, or even none - running in the background. In theory you could turn the nodes of a syntax tree into an instruction set, and execute parse trees directly. Page faults didn't interfere with complex instructions - instead of aborting them, they were suspended on stacks, and resumed after handling the fault. (To be fair, the Rekursiv didn't do all that itself; to keep the project size down, a separate "disk processor" handled the faults. Potentially an embedded processor, but a Sun-3 workstation in the prototypes) >> The entire Rekursiv was >> about 70k gates + memory, next to a contemporary RISC of around 20-30k. > >70 000 gates, that's light. Not so light in 1987... - Brian