I’m trying to find definitive detailed documentation on the innards of the .Net Micro Framework. For example after learning of the “LLILUM” project I discovered that the current design (of the CLR I guess?) is more of an IL interpreter rather than a JIT based system. But in the various books I’ve seen and articles and examples no mention is made of this.

I’d like to gain more insight into this so I can appreciate the goals of LLILUM a little more.


Here’s a brief summary of what happens when you deploy a NETMF app to the device.

Taken from…

EDIT: Updated slide to call step #6 “IL translator” per discussion here.



@ ianlee74 - Step 6 says “App is executed via JIT compiler”. Can you clarify this a bit? Compilers don’t execute code, and there’s no JIT compiler in NETMF…

Well, that’s the problem with showing slides and not the talk that goes with them. That’s where I explain that its interpreted in real time and not compiled in the traditional .NET method. Poor choice of words, perhaps, but that list actually came directly from a conversation with Colin Miller from a couple years ago. I haven’t really thought about it in a while.

EDIT: Here’s the actual transcript from Colin from 4/9/2013…

[quote=“Colin Miller”]When you press F5 on a NETMF project, we compile the the code (C# compiler, then we use the MetaDataProcessor to transform every DLL into a PE form that MF can run. Then we calculated the closure on the assemblies that the app needs to run and then we poke the device to see which ones are already on the device (checking the version numbers). We deploy the difference. The we reboot the device and start the execution leaving the debug connection open.
There are essentially no assemblies on the device that are not downloaded although as you can see from above, there are some (MSCORLIB and Microsoft.SPOT.Native that probably never leave the device. By not assuming that there are any assemblies on the device, we only download the absolutely required ones.[/quote]

@ ianlee74 - Yeah, what Colin says makes sense, and it fits with my understanding. He doesn’t mention JIT or the compiler executing the app :wink:

So, what would you call it? “Realtime Translator”? I explain that its not JIT by the typical definition since it is translated upon every execution instead of just once. That was the best name I could come up with at the time that would remind me what to discuss.

I think you have to say something like “is executed by an interpreter”, or “is executed by a stack machine bytecode interpreter” as that’s what is really happening and there’s no JIT transformation occurring at all.

I would call it “IL interpreter”.


I like it and I’ve updated the slide accordingly. Thanks, all.

Interpreter is exactly the correct name for it.