At 01:32 PM 18/09/2006 -0300, Rafael Teixeira wrote: >>From the high number of UseStringEmptyRule hits in the example report, >I think we can add some magic to gmcs/mcs, so that when run with >-optimize it could automatically generate: > >x = String.Empty; > >from any > >x = ""; > >it finds. And after that we should compile all mono managed libs with >optimization turned on. > >Just a bit of my craziness... :)
I'm a bit confused by this suggestion. My understanding is that at assembly load time, the JIT interns all string literals that are present in the module, canonicalizing them, and that therefore the two statements above are 100% identical, semantically at least. For instance, class MainClass { static void Main() { string from_literal = ""; System.Console.WriteLine( ReferenceEquals(from_literal, string.Empty)); } } This sample program outputs "True". This automatic interning of strings is crucial for string 'switch' blocks to work. Also, it seems to me that 'x = ""' will perform better (on the order of a couple of clock cycles) than 'x = string.Empty', since the former is resolved to a constant assignment (a constant value, really, propagated to the use of variable 'x') at JIT time while the latter, barring some special-case optimization in the JIT, will get translated to a load from a static field. I also happen to think that 'x = ""' is more readable than 'x = string.Empty'. :-) Do you know of a compelling reason to use 'x = string.Empty' over 'x = ""'? Jonathan Gilbert _______________________________________________ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list