[Mono-dev] Porting mcs to IKVM.Reflection

Marek Safar marek.safar at gmail.com
Thu May 6 10:00:05 EDT 2010


Hi,
>
> I'm trying to keep differences minimal, and I have no intention to 
> drop System.Reflection support:
>
> #if IKVM_REF_EMIT
> using IKVM.Reflection;
> using IKVM.Reflection.Emit;
> using Type = IKVM.Reflection.Type;
> #else
> using System.Reflection;
> using System.Reflection.Emit;
> #endif
I'd prefer not to go this route but it will require some gmcs 
refactoring to avoid it.
>
> My other modifications are around hacks for overcoming limitations of 
> System.Reflection[.Emit] that make mcs depend on the Mono runtime, so 
> actually I'm just trying to make the code hack free.
>
> My understanding is that basically we only have two compilers:
> - static:  mcs.exe, gmcs.exe, smcs.exe, dmcs.exe (for each profile)
> - dynamic: Mono.CSharp.dll, that is used by Microsoft.CSharp.dll and
>            csharp.exe
That's not entirely accurate. We have REPL mode which is another dynamic 
version of all *mcs.exe running on top of SRE and there is possibility 
in near future for MD to plug-in with it's own type system mostly based 
on Cecil and most likely another type system is coming with .NET v-next 
which should expose C# DOM via .NET interfaces.
>
> As I see (based on your explanation) only the dynamic (as in the above 
> list) compiler is using MakeExpression methods that will have to use 
> System.Reflection anyway because they generate code that can be 
> executed without saving an assembly first that requires runtime 
> support. Because of conditional compilation and minimal code changes, 
> having support for both SRE implementations - in my opinion - is not 
> (significantly) increasing code maintenance requirements.
>
> If the above assumptations are correct then all the MakeExpression 
> methods can safely be #if-ed out when building the static compilers 
> and thus there are no features that cannot be implemented by using 
> IKVM.Reflection. Is this correct?
IKVM SRE like interface is quite disadvantage here. Presumably you could 
reference IKVM with extern alias to avoid System.Type conflicts 
otherwise we would have to alias every IKVM namespace.

Marek


More information about the Mono-devel-list mailing list