Skip to main content

MEP-48 research notes

These twelve notes are the deep research that fed MEP 48 (Mochi-to-.NET/CLR transpiler). They are informative; the MEP body, once landed, will be normative. Each note is self-contained and can be read independently. Cross-references use [[note-slug]] markers.

#TitleTopic
01Language surfaceMochi features mapped onto .NET lowering obligations
02Design philosophyWhy .NET, why .NET 8 LTS floor + .NET 10 LTS ceiling, why Roslyn as IR
03Prior-art transpilersC#, F#, VB.NET, Roslyn, Reflection.Emit, ILGenerator, Mono, IL2CPP, NativeAOT, ReadyToRun, Bridge.NET, Blazor, MAUI, Unity, Godot
04Runtime building blocks.NET 8 / 10 LTS, Channels, IAsyncEnumerable, BCL, System.Text.Json, ImmutableCollections, FrozenDictionary
05Codegen designC# source via Roslyn SyntaxFactory + Reflection.Emit PersistedAssemblyBuilder fallback
06Type-system loweringType-by-type mapping to CLR reified generics, value types, sealed-record unions, Span/Memory
07.NET target and portabilityTFM matrix, RID matrix, Mono/Unity/IL2CPP positions, MAUI/Blazor/Unity/Godot
08Dataset pipelineQuery DSL lowering via LINQ + PLINQ, hash-join, value-type specialisation
09Agents and streamsChannels for mailboxes, async/await colouring, IAsyncEnumerable for streams
10Build systemdotnet CLI, NuGet, MSBuild, packages.lock.json, NativeAOT publish, single-file
11Testing gatesPer-phase Go test gates, TFM matrix (net8.0/net10.0), Roslyn-clean gate, NativeAOT gate
12Risks and alternativesRisk register, F# / VB.NET / Bridge.NET / direct IL emit rejected and why

Each note's filename uses the NN-slug.md convention; the leading NN- is stripped by Docusaurus for the URL path, so cross-links inside the notes use the unprefixed slug (e.g. [[language-surface]]).

The companion MEP body lives at /docs/mep/mep-0048.