Dmitry, these questions are a good starting point.

To design (or select) an interface, you must start with a solid idea of who the 
users will be, their skill level, how they will use it, and where you want to 
go with the product.

For example, the original interface targeted two classes of usage:  Language 
preprocessors and 4GLs (e.g. Datatrieve).  It was never intended that any 
application level program would ever use the API directly.  Later, it was used 
for the dynamic SQL layer that is now the primary interface (again, I apologize 
for the really crappy DSQL interface -- I picked an existing interface with a 
pure heart but bad taste).

Right now, the Firebird project is clearly split between those who want to 
server the installed base (Delphi mostly) and those who want to attract 
significant number of new users.  Until there is some agreement here there is 
very little purpose to even discussing an interface.  I know that there are 
many who will disagree strongly, but in my opinion Delphi is a dead end, one of 
many worthy languages that didn't prevail like Algol-60, PL/I, Lisp, and Bliss. 
 Support Delphi users, by all means, but they neither need nor want a new 
interface.  Extensions, sure, but something new and different for a dying 
language and declining base, I don't think so.

There is no reason that the primary interface needs to be programmer friendly 
as long as language specific wrappers are easy and cheap to write and incur 
almost no overhead.  So you can think of the real API as assembler used by 
higher level languages.

The best way to study interfaces is to first implement them as a proper layer 
on the existing interface.  This allows cheap implementation and fast 
iteration.  When the interface matures, move it into the y-valve and eventually 
into the protocol.

And once I again I urge Firebird to adopt a modern, industry standard, widely 
accepted SQL interface.  There is really only one candidate, which is JDBC.

Finally, take the big issues first.  If you don't know where the project is 
going, what is the point of fighting over quasi-language independent erzatz 
vtables?  Decide where you want to go then figure out how to get there and 
design (or select!!!!) an interface accordingly.





> On Aug 10, 2014, at 9:02 AM, Dmitry Yemanov <firebi...@yandex.ru> wrote:
> 
> 10.08.2014 14:10, Jim Starkey wrote:
> 
>> It is a fool's errand to try to build a OO interface that is call compatible 
>> across a wide range of OO languages.  If anyone is in doubt, look at 
>> Objective-C and weep.
> 
> If this is found being impossible (I'm not deeply involved, so I don't 
> have a strongly argumented opinion yet), then we have [at least] three 
> questions to answer:
> 
> 1) Do we keep the existing OO Y-valve API for internal purposes? E.g. 
> for engine plugins or for remote->engine calls. The same issues apply 
> but we can expect virtually zero practical risks here (I doubt we'll be 
> writing some parts of the server in FreePacal or Lua). Maybe some 
> interfaces could be simplified in this case.
> 
> 2) Do we offer the existing OO Y-valve API to other C++ users? It has to 
> be public and limitations (including binding issues) have to be documented.
> 
> 3) Do we keep using the legacy ISC API as the "plain C" wrapper for 
> non-C++ users or invent a better replacement?
> 
> 
> Dmitry
> 
> 
> ------------------------------------------------------------------------------
> Firebird-Devel mailing list, web interface at 
> https://lists.sourceforge.net/lists/listinfo/firebird-devel

------------------------------------------------------------------------------
Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to