Home

Awesome

XamlX

General purpose pluggable XAML compiler with no runtime dependencies. Currently being used by Avalonia project as the XAML engine.

The compiler isn't tied to Avalonia in any way, shape or form and can be used for any purposes by configuring XamlLanguageTypeMappings to match the needs of your particular framework. Further customization can be done by AST manipulations, see examples of those in Avalonia repository.

default

Implemented features

T ProvideValue();
T ProvideValue(IServiceProvider provider);
object ProvideValue();
object ProvideValue(IServiceProvider provider);

If strongly typed markup extension overload is available, it's used to avoid unnecessary casts and boxing

Architecture

The flow looks like this:

  1. Parse XAML into some basic AST (we can use different language markup parser at this point, like C#/VB in Roslyn)
  2. Transform AST via visitors. At this stage types get resolved, property values get transformed either in setting properties or collection access, etc
  3. Emit IL code

Features to implement (TODO)

Features marked with [dontneed] aren't required for the Avalonia project, but might be implemented later if the need arises. Features marked with [opt] are considered optional and will be implemented after non-optional features

These are questinable due to heavy reliance on reflection:

These are framework-specific and can be implemented via custom transformers/emitters or custom IServiceProvider

Won't fix:

Future: x:Code Intrinsic XAML Type (probably use Roslyn to inline C# code)

Possible optimizations (TODO):