Boo - half way through summary

time to read 5 min | 884 words

Do I get a little obsessive about Boo? What do you think?

What I like in Boo1:

  • Anonymous methods now, so you can things like:

    (

    new Thread({print "Hello"}).Start()
  • No punctionation for control flow, this mean that you can do things like this:

    if

    not scanned:
     
    Scan()
    Instead of C#'s way, that often caused me to ignore the '!'

    if(!scanned) 
       Scan()

    There is a solution that is worse then the problem in C# - this one hurts my eyes:
    if(scanned==false)
      Scan()
  • The syntax support things like this one, which is cleaner then the C# way.

    logger.Debug(string.Format("Scanning {0}", entry.Key )) if (logger.IsDebugEnabled)

  • Many things that feels natural to me (from C# background) works the same in Boo. - Yes, it's a duplicate of what I don't like.
  • Has a natural property syntax, so you can do things like to avoid al the tedious get/set:

    [

    property(BaseDirectory)]
    baseDir as string = Environment.CurrentDirectory
    Moreover, do you recall how many times you created code that like this:

    string baseDir = Environment.CurrentDirectory;
    public
     string BaseDirectory
    {
      get
      {
          return baseDir;
      }
      set 
     

          baseDir = value; 
       }
    }

    This translate to this code in Boo which no ammount of IDE-Magic can beat.

    [

    property(BaseDirectory)]
    baseDir as string = Environment.CurrentDirectory
  • Allows you to define your own language constructs, using, with, transaction, lock, are not compiler magic, but code that you can modify or create new things. Wants to use your favoriate language feature? Just code it and it's there. This is the first time that I encountered a user-extensiable compiler. The potential for use is wonderful, the potential for abuse is... Well, let's just hope that it's a complex enough feature that the clueless won't get their hands on it.

What I don't like1:

  • No good IDE - sorry, SharpDevelop doesn't cut it, I've numerous bugs {using 1.0.3.1768} that caused data loss, and it frequently lock itself up, requiring killing the process
  • No Resharper - This is the killer for me
  • No visibility checking for now, so you can call a private method and that would cause a runtime error instead of compile time error.
  • Debugging through DbgClr, which does the job, but... it isn't the same experiance.
  • The compiler's error messages (which I get a lot of right now) aren't as good as C#'s. That is probably because the C# compiler bends over backward to gives you meaningful messages.
  • No characters literals, you have to do things like 'a'[0] to get a character - yet.
  • Many things that feels natural to me (from C# background) works differently in Boo. - Yes, it's a duplicate of what I like.
  • The language is still in beta.
  • It uses idention for control flow :-(
  • I keep making mistakes because my fingers & eyes think that I program in C#, so I usually code variables as string bar = "foo" instead of bar = "foo"
  • No literal strings ( @"C:\This\Is\A\Bummer" ), which is a real problem when you're trying to write regex-es that write regex-es, I've parts that makes my head spin.
    For example: regex.Replace("C:\\*\\ayende?","\\\\","\\\\") - Without running it, what is the result? (Here is doesn't matter whatever the code is C# or Boo.
  • A really nice way to select multiply cases, but it's not implemented yet!

    given

    Path.GetExtension(path).ToLower():
          when ".resx", ".resource":

1 In no particular order