On Thu, 2006-09-07 at 22:00 -0400, Jonathan Pryor wrote: > beforefieldinit is a performance advantage: it allows the JIT inliner to > invoke the static constructor during JIT time, instead of needing to > delay static constructor invocation until just before a member is > accessed. It's also useful for --aot code, as the initialization > performed by the static constructor could be cached (in some principal) > within the AOT code.
The (sad) truth is that apparently the MS runtime does not take advantage of this fact. Our runtime did, but when inline was enabled by default in the Mono JIT, many programs which depended on the order in which .cctors were executed started showing a different behavior in the two runtimes. Of course, this different behavior was perceived as a Mono bug introduced by the inline optimization, even if it was perfectly standard compliant and it was the program that was at fault, using the wrong beforefieldinit setting. To make a long story short, we now behave like the MS runtime so that developers have their life easier... > If the `Pixbuf' constructor requires that Gtk# be initialized, this use > _may_ fail if the Foo static constructor is invoked before Gtk# is > initialized. This will be hell to debug. :-/ Yep :-) These are the sort of things that happened (and were debugged) when we enabled inline by default. Ciao, Massi _______________________________________________ Mono-list maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-list
