<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.atalasoft.com/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Lou Franco's Software Business Blog : F#</title><link>http://www.atalasoft.com/cs/blogs/loufranco/archive/tags/F_2300_/default.aspx</link><description>Tags: F#</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Can F# Displace C# on .NET?</title><link>http://www.atalasoft.com/cs/blogs/loufranco/archive/2010/05/14/can-f-displace-c-on-net.aspx</link><pubDate>Fri, 14 May 2010 20:41:32 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:20669</guid><dc:creator>loufranco</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.com/cs/blogs/loufranco/comments/20669.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/loufranco/commentrss.aspx?PostID=20669</wfw:commentRss><description>&lt;p&gt;I just read &lt;a href="http://abstractfactory.blogspot.com/2010/05/how-to-design-popular-programming.html"&gt;How to Design a Popular Programming Language&lt;/a&gt;, which is very similar to Paul Graham’s &lt;a href="http://www.paulgraham.com/popular.html"&gt;Being Popular&lt;/a&gt; essay from 2001 about language popularity. Both make the point that languages become popular because they become the default way to program a very popular platform.&lt;/p&gt;  &lt;p&gt;This is a point I make often. I care about what language I program in somewhat, but I will do whatever it takes to get the deployable I want. So, at Atalasoft, since I want .NET assemblies, I need to use a .NET language. For the iPhone, I need to use Objective-C. It wouldn’t matter if I prefered Java (I don’t), because Java can’t make what I want.&lt;/p&gt;  &lt;p&gt;On .NET I have a few choices. There is basically no output difference between C# and VB.NET, so I can consider the language itself apart from what it makes. Atalasoft primarily programs in C#, but nothing we make in C# couldn't be made in VB.NET. The choice is arbitrary and largely a matter of taste.&lt;/p&gt;  &lt;p&gt;Now, with Visual Studio 2010, F# is thrown into the mix. Atalasoft has a close tie to F# because one of our DotImage architects, &lt;a href="http://www.atalasoft.com/cs/blogs/rickm/"&gt;Rick Minerich&lt;/a&gt;, is an MVP for Microsoft (largely because of his F# community contributions) and is a co-author on a new F# book coming from Wrox, &lt;em&gt;&lt;a href="http://www.amazon.com/Professional-F-1-0-Ted-Neward/dp/047052801X"&gt;Professional F#&lt;/a&gt;&lt;/em&gt;. So, we tend to know more about F# than most development groups.&lt;/p&gt;  &lt;p&gt;Like VB.NET, F# can create any result that C# can, since it has full support for the .NET object model. If tomorrow, all of our C# code was in F#, no one would know. But, C# is by far the dominant language on .NET – on many platforms, dominance has advantages. &lt;/p&gt;  &lt;p&gt;Looking at the first article I linked to, we see these reasons why dominant platform languages are hard to displace:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Nobody has figured out how to make cross-language interoperability work well.      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;The network effects from language adoption are immense. Programming is, despite appearances, a deeply social profession. To write successful software quickly, you must exploit the skills of other programmers — either directly, by hiring them, or indirectly, by using library software they've written. And once a language becomes the most popular in a niche, the supply of both programmers and libraries for that language rapidly accumulates to the point where it becomes economically irrational to use any other language.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Well, Microsoft has figured out how to make cross-language interoperability work well – we have VB.NET customers using our C# code quite happily. Microsoft has also made C++ work pretty well with C#, and we have customers who do that as well. On .NET, you can freely mix any well-implemented .NET language.&lt;/p&gt;  &lt;p&gt;The second point is more convincing and it breaks down like this:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;It’s easier to hire developers for more popular languages&lt;/li&gt;    &lt;li&gt;It’s easier to find libraries for more popular languages&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Well, #2 isn’t true for .NET languages, because of the good cross-language interoperability. So, F# can displace C# if either&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;More Developers learn F#, getting rid of the only reason not to use it instead of C#     &lt;br /&gt;      &lt;br /&gt;or      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;F# can take advantage of some part of the .NET platform that C# cannot, and that part of the platform becomes popular (virtually forming a new platform that it can dominate)&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Either of these might actually come true – some things that may cause it to happen&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Developers might form a taste for F# coding – it’s got a brevity and expressivity that might attract developers that care about that kind of thing.&lt;/li&gt;    &lt;li&gt;Many-core is coming and F# is designed to produce code for it, whereas mutable state in C# will hold it back.&lt;/li&gt;    &lt;li&gt;Functional programming and language-oriented programming are getting more popular and might displace object-oriented programming for more and more tasks.&amp;#160; These styles are both natural in F# and not really possible in C#.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;F# is not without its problems – the main being secret advantage #3 for dominant languages – code generators. In Visual Studio, if I am making a WinForms or WebForms app, VS generates a lot of code for me, but only C# and VB.NET, not F#, yet.&lt;/p&gt;  &lt;p&gt;So, it’s very possible F# could displace C# on technical merits, but it will still have a lot to do to overcome things like industry momentum, politics and other factors that will favor C# for some time. One obvious way to overcome that is a popular killer app that is widely known to be made in F# and has either brevity or many-core advantages that C# can’t replicate.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/loufranco/archive/2010/05/14/can-f-displace-c-on-net.aspx&amp;amp;;subject=Can+F%23+Displace+C%23+on+.NET%3f" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/loufranco/archive/2010/05/14/can-f-displace-c-on-net.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/loufranco/archive/2010/05/14/can-f-displace-c-on-net.aspx&amp;amp;;title=Can+F%23+Displace+C%23+on+.NET%3f" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/loufranco/archive/2010/05/14/can-f-displace-c-on-net.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/loufranco/archive/2010/05/14/can-f-displace-c-on-net.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/loufranco/archive/2010/05/14/can-f-displace-c-on-net.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/loufranco/archive/2010/05/14/can-f-displace-c-on-net.aspx&amp;amp;title=Can+F%23+Displace+C%23+on+.NET%3f" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/loufranco/archive/2010/05/14/can-f-displace-c-on-net.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/loufranco/archive/2010/05/14/can-f-displace-c-on-net.aspx&amp;amp;;title=Can+F%23+Displace+C%23+on+.NET%3f" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/loufranco/archive/2010/05/14/can-f-displace-c-on-net.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/loufranco/archive/2010/05/14/can-f-displace-c-on-net.aspx&amp;amp;;title=Can+F%23+Displace+C%23+on+.NET%3f&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/loufranco/archive/2010/05/14/can-f-displace-c-on-net.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=20669" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/loufranco/archive/tags/Atalasoft/default.aspx">Atalasoft</category><category domain="http://www.atalasoft.com/cs/blogs/loufranco/archive/tags/F_2300_/default.aspx">F#</category></item></channel></rss>