× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Hi Steve!

>But if your product was modular, that is
>each module is self contained, does
>not depend on the other modules ... your
>v8 database module would provide interfaces
>that could be used by a v7 code module.

Right on!  v8 servers provides interfaces to older clients as well as
exposing new interfaces to v8 clients.  The deal here isn't a v8 server
facilitating a v7 client, it's the other way round.  I have v7 servers and a
v8 client.  How can the v7 server know what the v8 client is going to want?
I need to write a pseudo-v7 client that makes a number of calls to existing
v7 functions and compile the information that way, instead of making the
simple, single v8 client call that the v8 code can do.  But what if the v7
database does not store the information I need to get at.  There's simply no
way to write a v7-compliant client.

I suspect the compiler is the same way.  It isn't like an assembler,
grinding out machine code.  It's more like C, calling system runtime
routines.  I'm The Boss in Toronto, and I decide to have the team build a
bif to decode a CSV string.  I set one group working on the runtime API and
another group working on the compiler to change the parsing routine to
recognise the new BIF, extract it's parameters, call that API and handle the
results.  I get two teams working in parallel.

So the implementation of my fictitious parsecsv is that a compile-time
parser creates CALLs to a runtime API, rather than creating machine code
targeted to a particular machine architecture (MI/NMI/RISC/CISC...)  This
way I can write the v5.2 runtime API and add support via PTF to prior
releases if I have to.

Then v5.3 comes along and somebody figures out a way to double the
performance of that BIF API, but it takes a new operation that only v5.3
has.  Now I can't PTF support back, because there's no place to get that
service, that machine operation.  So I can't compile my source code with the
new BIF to *PRV because there isn't a way for the compiler to call an
unavailable API (or even to emit machine code that uses the non-existent
machine operation.)

That's one reason I think the *PRV support simply calls the previous version
compiler.  Another reason is probably the 'if tree' they'd have to build
around every BIF, opcode and function in order to call the proper interface
for the proper target release.  eeeeeeeeeeee.

That's my guess, based on the problems I have supporting multiple releases.
I'd love to see George or Phil do an article on 'Inside The Lab: Anatomy of
a new BIF'.
  --buck


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.