extent strings

Simon Marlow simonmar at microsoft.com
Tue May 15 07:48:31 EDT 2001


> Hmmm, that's an opinion, but not a technical reason. What I 
> was hoping for
> is a real rationale for the extent string, i.e. why neither 
> the one extreme
> 
>    topdecl : 'foreign' string var '::' type
> 
> nor my last suggestion (the opposite extreme) would fit. 
> Currently we seem
> to draw a rather arbitrary line between "real" Haskell syntax and the
> extent string, while my last suggestion only used strings for entities
> where nothing Haskell-like would fit syntactically, i.e. C identifiers
> and #include paths. So I'm with Alastair and Fergus, but I'm 
> still ready
> to be convinced otherwise...

I think the rule of thumb which we've been using so far is

   * the information outside the string is enough for a compiler
     to statically analyse and typecheck the foreign declaration,
     which includes checking whether the type of a f.e.d. has the
     right form, etc.

   * the information inside the string is required only by a 
     compiler back-end that needs to generate the actual call
     (in the case of an import) or definition (in the case of an
     export).

One reason for keeping the back-end info inside a string is because it
is likely to be specified using syntax from the foreign language: eg. C
identifiers don't have the same lexical syntax as Haskell identifiers,
and C++/Java identifiers have to include a type to be uniquely
specified.  

It's hard to say how well this generalises without working though all
the issues for 2 or 3 different languages, but I guess we already know
that ceratin foreign declarations don't make sense for Java (f.i.d.), so
the upshot seems to be that each language will need its own foreign
declaration syntax.

I buy the argument that introducing new syntax for each new language is
OK as long as it generalises to a list of vars/strings, for tools that
don't need to understand any more than that.  This looks like a
reasonable compromise that should keep everyone happy.

Cheers,
	Simon




More information about the FFI mailing list