[Mono-list] Static CIL Libraries

Fergus Henderson fjh@cs.mu.oz.au
Fri, 18 Oct 2002 21:46:24 +1000


On 17-Oct-2002, Daniel Morgan <danmorg@sc.rr.com> wrote:
> Can mono/mcs create and use static CIL libraries?
> 
> If so, how do you create the static CIL libraries?
> How do you link these static CIL libraries with something you are bulding?
> 
> What about Microsoft .NET, Rotor, or Portable.Net?

Portable.Net has some support for that kind of thing, I believe.

> If not, can we persuade the Mono team, the Microsoft .NET team, the Rotor
> team, the Portable.Net team, the ECMA standards people, and others to
> include standard static CIL libraries support in their C# compiler and CLR
> runtime?

Here is some of the feedback that we gave Microsoft about a closely
related issue:

 | 3.  Assembly resolution at static link time.
 | 
 | .NET assumes a particular model of symbol resolution where the
 | decision of which assembly (the .NET unit of distribution)
 | each symbol belongs to is determined *at compile time*.
 | Mercury has a different model, where at compile time we only resolve
 | which *compilation unit* (which in Mercury are called "modules")
 | each symbol belongs to.  Then at *static link time*, compilation
 | units are grouped into "libraries"  (the Mercury unit of distribution).
 | Only then, at static link time rather than at compile time,
 | can it be determined which distribution unit (i.e. assembly)
 | each symbol reference refers to.
 | 
 | The model that Mercury uses is more flexible.  And of course this
 | model is not specific to Mercury; the same thing is supported by
 | traditional linkers for Unix and Windows.  But it is not supported
 | by .NET.
 | 
 | Currently if the assembly part of a symbol reference in a .NET
 | component is null, it is assumed to be in the current assembly.
 | But .NET should allow the assembly part of a symbol to be null, and
 | should provide a "static link" tool to resolve such null assembly
 | references.  This tool should take as input an assembly, and a set of
 | other assemblies to link the first assembly against, and should output
 | a modified version of the first assembly in which any symbol reference
 | with null assembly part have had their assembly part filled in.  The
 | assembly chosen should be the unique assembly among the set of
 | assemblies to link against which contains a symbol that matches the
 | symbol reference.  If there is more than one such symbol, the tool
 | should instead issue an error message and not produce any output.

-- 
Fergus Henderson <fjh@cs.mu.oz.au>  |  "I have always known that the pursuit
The University of Melbourne         |  of excellence is a lethal habit"
WWW: <http://www.cs.mu.oz.au/~fjh>  |     -- the last words of T. S. Garp.