To date we've seen examples where some simple F# code maps to something horrid in the C# view we get from Reflector.
Now for something completely different...
Simple properties like
map quite directly from F# into IL, even in debug build
where set_Points
just assigns straight into the field, and get_Points
just returns it, roughly as expected.
The corresponding C#
becomes
The set_Points
code is the same, modulo the maxstack -- but what are that temporary and that branch doing in get_Points
?
This is a bit of a "lolwut!?" discovery!
Reassuringly, the release build of the C# get_Points
is almost a nop
-free version of the F# debug code
but as the debug version is the one for doing code analysis on, that's less useful.
This is unchanged with the Feb 2010 CTP (1.9.9.9).
The added IL instructions are meant to better support debugging (the jump makes it easier to set breakpoints, and the temp local makes it possible to add a watch on the value and change it).
ReplyDeleteThere's a lot of fluff added to a C# debug build to support these kind of scenarios. Not so much in F#, it seems.