F# - First Impressions

   It seems like it is time to inform my multimillion reader base about my impressions about the F# programming language.  As I mentioned in my previous post I picked F# over IronPython because Python uses indentation to define scope. The first thing that got me annoyed about F# is that there is an option to turn on indentation based syntax like in Python and everyone uses it. At least it is an option and unlike Python when this option is turned on the F# compiler forces the use of spaces instead of tabs. On the other hand

let wordCount text =
   let words = String.split [' '] text
   let wordSet = Set.of_list words
   let nWords = words.Length
   let nDups = words.Length - wordSet.Count
   (nWords,nDups)

really looks better than

let wordCount text =
   let words = String.split [' '] text in
   let wordSet = Set.of_list words in
   let nWords = words.Length in
   let nDups = words.Length - wordSet.Count in
   (nWords,nDups);;

   Right now when I am trying the examples from the "Expert F#" book I am always rewriting them with the heavy syntax. That way I am learning both types of syntax and what is more writing these keywords helps understand how expressions are composed. However when you get used to it these tokens are just messing around. Maybe with time I will get used to indentation based syntax and will give IronPython a try.

  Otherwise F# looks cool but strange. It is not even lispish. The first thing one needs to do is let go of type declarations which is not so simple because F# is as strongly typed as C#. It takes time to get used to type inference even if one has experience with C#'s way of doing it. Another thing that seems strange at first is that functions can return more than one value by automatically forming a tuple.  Tuples are then decomposed back to variables using pattern matching i.e. placing the first element of the tuple in the first variable, the second element in the second variable and so on. However this can get more complicated because an element in a tuple can itself be a tuple. Worth noting is that one can switch to C# style programming at any time. I hope I will not get tempted to program in F# like I do in C# when I try to do something myself because there will be no point in using F# if I write it like C#. What is more C# is better at being C# than F# is.

   Overall I think F# is fun but I have to wait to see what happens when I get into the deep waters.
Posted by:   Stilgar
14:55 05.08.2008

I'm Going Functional

   You may have noticed that I did not post any programming related articles lately. The main reason for this is that after I played with C# 3.0 and LINQ I have not learned anything really interesting. That is why I am beginning to study F#. To quote the "Expert F#" book review:

   "Expert F# is about practical programming in a beautiful language that puts the power and elegance of functional programming into the hands of .NET developers."

   Why learning F#?
   ...
Posted by:   Stilgar
16:54 29.07.2008

LINQ Adventures

   I know that every single person in my multi million user base is interested in LINQ. To your great satisfaction here are two pieces of somewhat strange LINQ behavior that you are (undoubtedly) going to enjoy.  The two pieces are completely unrelated. The first requires a little knowledge about LINQ to SQL and ADO.NET and the second requires good familiarity with the C# language (reading AND understanding the "What Is New in C# 3.0" series will do as well).
Last edited by:   Stilgar
on   23:04 13.12.2009
Posted by:   Stilgar
09:06 22.06.2008

Class Library project coming to Visual Web Developer Express

   Scott Gu just posted on his blog about the new features that Service Pack 1 for Visual Studio 2008 will bring to Visual Web Developer Express Edition. ASP.NET MVC will be supported on VWD Express but what I find more exciting is the ability to create class libraries(.dll) projects in VWD. I have always seen that as the biggest drawback of the Express Edition. I hope VWD will be able to open solutions that contain class library projects created in higher editions of Visual Studio. Right now it loads only the web projects. You can read the original post here.

   Update: Scott just confirmed in the comments on his blog that VWD Express will open solutions containing class libraries created in other editions of Visual Studio. I guess that makes VWD Express full featured IDE as long as you are a lone developer.
Last edited by:   Stilgar
on   13:13 03.06.2008
Posted by:   Stilgar
19:16 02.06.2008

Programming for Perverts

   Today I was looking at a Sun Certified Java Programmer example test (quite an old one - url no longer valid). There were some quite curious questions. I have taken out and modified questions that apply to C# (unless otherwise noted) and left out Java specific ones. Try to guess the compilation result/output! Here they are in C# version:

1.
     int i = 1;
     i <<= 31;
     i >>= 31;
     Console.WriteLine(i);
2.
     Console.WriteLine(Double.NaN == Double.NaN);

     double zero = 0;
     Console.WriteLine(Double.NaN == 3 / zero);
3.
     int i = 10;
     int j = 10;
     bool b = false;

     if (b = 10 == 10)
         Console.WriteLine("true");
     else
         Console.WriteLine("false");
4. This one behaves differently in Java and C#
Java:
     System.out.println(-0.0);
     System.out.println(-0.0 == +0.0);
     System.out.println(Math.min(-0.0,+0.0));
     System.out.println(Math.max(-0.0,+0.0));
     System.out.println(Math.min(-0.0,+0.0) == Math.max(0.0,+0.0));
C#:
     Console.WriteLine(-0.0);
     Console.WriteLine(-0.0 == +0.0);
     Console.WriteLine(Math.Min(-0.0, +0.0));
     Console.WriteLine(Math.Max(-0.0, +0.0));
     Console.WriteLine(Math.Min(-0.0, +0.0) == Math.Max(0.0, +0.0));
5.
     int i = 0;
     Console.WriteLine(i++ + ++i);
     Console.WriteLine(i++ + i++);
6.
     Console.WriteLine(Double.PositiveInfinity + Double.NegativeInfinity);
     Console.WriteLine(Double.PositiveInfinity == Double.PositiveInfinity);

Check the full article for the actual output!
Posted by:   Stilgar
03:28 16.05.2008
First Previous ... 11 12 13 Next Last