174 karma · joined October 24, 2010
Also, .NET stack traces only contain line numbers if the debugging symbols are deployed. With the attributes, the C# compiler can inject line numbers at compile time, obviating the need for symbols. Similarly, if a vendor uses an obfuscator, the stack trace will include obfuscated names but the compiler attributes will have injected the real names, making it much easier for developers to read the log files.
Finally, for scenarios like INotifyPropertyChanged, having the caller name injected at compile time is much more efficient at run-time than capturing an entire stack trace just to figure out which property setter is running. This may not a big consideration for logging, but for property setters it is definitely worth bearing in mind.
Thanks, but I'm happy with the friends I have and with the kind of conversations we have. If your friends love talking about "how you can better yourself," then fair enough -- whatever works for you. On the other hand, if your friends love talking about the things they do, interesting things they've learned, neat ideas, activities, etc. then don't ditch them just because they're not talking about "how you can better yourself." You'll "better yourself" by being immersed in a social environment of new ideas and options and acting on the things you learn, not by dumping your friends and finding people who want to talk about self-improvement.
http://chronicle.com/article/50-Years-of-Stupid-Grammar/2549...
"In the face of evidence otherwise, many still insist that most of the Universe must be made up of baryonic stuff that interacts with other baryons and our familiar photons. Is this not just as much hubris as insisting that the Earth, where we live, must be the center about which all the other Solar System bodies orbit?" (http://scientopia.org/blogs/galacticinteractions/2011/08/14/...)
The dark matter hypothesis seems to have a great deal of explanatory power. The antigravity hypothesis, like other MOND theories, has a good fit for the specific phenomenon it was designed to tackle, but doesn't explain a lot of the other things that dark matter does. Ethan Siegel has a good post on "What Dark Matter's Alternatives Must Do" (http://scienceblogs.com/startswithabang/2011/08/what_dark_ma...) which points out some of the stuff that dark matter explains and rival theories don't (e.g. temperature fluctuations, hydrogen/helium ratio). He does presciently note that 'antimatter has negative mass' could explain more than traditional MOND theories but claims that this impacts other well-tested assumptions such as conservation of energy.
He also has a specific article on the antigravity theory: http://scienceblogs.com/startswithabang/2011/09/dark_matter_... (and yes, he does acknowledge that "dark matter ... historically has problems for individual galaxies").
Of course, none of this is to say that the dark matter hypothesis won't eventually be disproved and go the way of Vulcan as you suggest. Ironically, though, it sounds to me like the MOND and antigravity theories are the Vulcans here: they solve only one specific problem, while dark matter fits with so much more.
However we as a smaller shop have used F# on a couple of projects within the last year -- to embed an expression engine within an analytics product, and for the parser/analyser in our Sass plugin for Visual Studio. But I know I'd have struggled to get that technology choice into the last enterprise environment I worked in. So the lack of uptake may be more to do with the culture of "enterprise .NET" shops, more than the "broader .NET community."
They also did themselves no favours by having the Scala compiler dump out MSIL assembler code rather than a .NET assembly. You had to separately run the ilasm tool to get an executable. Obviously for a production environment you'd package this up in a build file, but for experimenting with the language it was a bit of a speed bump.
This is without even looking at the language features and libraries that were supported on the JVM but not on the CLR (e.g. structural types, parser combinators).
My experience may be out of date here, but the scala-lang page on .NET support is still datestamped July 2008, so I'm not too optimistic. A great pity, as Scala always seemed a great fit for the CLR and would provide some nice competition to C# and F#.
That said, the standard is very much owned and written by Microsoft. You're absolutely right that they don't have to work through a JCP-like process.
Rather, the slowness seems to come from the lack of an aggregation mechanism. If I want to follow 100 feeds (e.g. 100 Twitter users), I have to query each of those 100 feeds. Even though I can query them efficiently using If-Modified-Since, that's still slower than firing off one query to find out which of those 100 feeds have updates, and then querying only those which do.
That said, it's probably more relevant if you need to call the repository from DLR languages. And in that case you might as well choose to write the repository class in the DLR language, which will presumably have native support for dynamic method resolution.
But if you call into non-F# libraries, including .NET framework libraries, then they can return null references. And if your F# code tries to use a null reference obtained in this way OO-style (e.g. making an instance method call through the reference), then that will indeed cause a NullReferenceException.
Obviously, it's easy to wrap 'dangerous' calls to return option values (F#'s equivalent of Haskell Maybe) instead of nulls -- it's a judgment call as to whether it's worth it for any given API.