There are a few advantages to being completely managed, rather than using native code. Portability (eg. mobile devices, different OSes), and functional code access security are two reasons that come to mind for me.
Very interesting! I'm curious about the parser's error reporting for malformed input -- does it use Irony's default error reporting, or a custom solution? Are error reports good, bad, or lacking in any way?
Very interesting. If you don't mind me asking, how difficult was it to parse the grammar of Lua? I see you mention "Irony", but I've never heard of it. Is it a parser generator?
That's not correct. Unmanaged code, by it's definition, is not run on the CLR. It's run natively by the OS, and is compiled to machine code, not IL.
Managed code, on the other hand, by MS' own definition: "All of these languages share a unified set of class libraries and can be encoded into an Intermediate Language (IL). A runtime-aware compiler compiles the IL into native executable code within a managed execution environment that ensures type safety, array bound and index checking, exception handling, and garbage collection." [0]
To expand on this... "So no native code is used." was probably somewhat misleading.
More specifically, no native code is explicitly used. IL may be compiled down to e.g. x86-64, but you won't have a C DLL being PInvoked from your C# (or other .NET language), nor a C++/CLI DLL compiled against x86-64 specifically.
Among other advantages, this usually implies:
- Less interop overhead (unmanaged <-> managed transitions are expensive)
- Easier dependency management (just include the assembly instead of assembly + native DLLs via installer or whatever)
- Portable (more likely to run on e.g. the Mono Runtime on a Linux box with an ARM processor without requiring a build specific to ARM and possibly to Linux)