Skip to: Site menu | Main content

Home Print

Boo is a new object oriented statically typed programming language for the Common Language Infrastructure with a python inspired syntax and a special focus on language and compiler extensibility.

If you want to try boo, read the Getting Started guide. To dive deeper, follow the link to the Wiki pages.

News

Last changed Dec 28, 2009 09:49 by Rodrigo B. de Oliveira

Boo 0.9.3 fixes a lot of bugs and extends the match macro with support for regular expressions with variable binding.

Thanks to Martinho Fernandes it's now possible to write code like this::

   private def ParseBuildResult(stdout as string):

       result = BuildResult()

       for line in StringReader(stdout):
           match line:
               case
/^(?<fileName>.+)\((?<lineNumber>\d+),(?<column>\d+)\):\s+(?<code>.+?):\s+(?<message>.+)$/:
                   result.Append(BuildError(
                               FileName: fileName[0].Value,
                               Line: int.Parse(lineNumber[0].Value),
                               Column: int.Parse(column[0].Value),
                               IsWarning: code[0].Value.StartsWith("BCW"),
                               ErrorNumber: code[0].Value,
                               ErrorText: message[0].Value))

               case /^(?<code>.+):\s+(?<message>.+)$/:
                   result.Append(
                       BuildError(
                               ErrorNumber: code[0].Value,
                               ErrorText: message[0].Value))

               otherwise:
                   if len(line) > 0: print "Unrecognized compiler
output:", line

       return result

Kudos also to Andre Van Der Merwe, Cedric Vivier, Gotz Washck and Richard Hubers for contributing to this release!

Complete change log is here and as usual you can download it from here.

Happy 2010!

Posted at Dec 28, 2009 by Rodrigo B. de Oliveira | 0 comments
Last changed Sep 01, 2009 23:59 by Cedric Vivier

You read it right and it was about time!

Boo 0.9.2 is mostly a maintainance release, yet it introduces a few new features worth highlighting :

  • Unsafe code support including pointer manipulation for richer interoperability with native code [BOO-1202]
    unsafe ptr as long = astruct:
        *ptr = 0
        ++ptr
    
  • Generic array/matrix constructors [BOO-1203]
    a = array[of int](3)        #creates an array of 3 ints
    m = matrix[of int,int](3,3) #creates a 3x3 int matrix
    
  • Literal regular expression options [BOO-1237]
    /boo/i.IsMatch("BOO") #case-insensitive match
    
  • Boo now runs on medium-trust environments [BOO-1215] (such as Mosso ASP.NET platform)

On top of the usual bunch of bug fixes (see the ChangeLog), this release significantly improves generated IL, resulting in up to 40% leaner assemblies among other performance improvements.

Contributed to this release: Cedric Vivier, Daniel Grunwald, Dmitry Malyshev, Greg Nagel, Joao Braganca, Martinho Fernandes, Paul Lange and Rodrigo B. De Oliveira.

Download it an have fun!

Posted at Sep 01, 2009 by Cedric Vivier | 1 comment
Last changed Mar 18, 2009 12:32 by Cedric Vivier

Just after two months of the huge 0.9 release, here is Boo 0.9.1 - bringing more new features and bug fixes.

Highlights of this release are:

  • Macro definition arguments [BOO-1146] - macro definitions can define typed arguments as with any method definition.
    macro repeatLines(repeatCount as int, lines as string*):
        for line in lines:
            for i in range(repeatCount):
                print line
    
    repeatLines 2, "boo", "rocks"
    
  • Nested macros extensions [BOO-1140] - nested macros no longer have to be defined within their parent macro block.
    macro parent:
        yield
    
    macro parent.child:
        yield [| print "parent.child" |]
    
    parent:
        child
    
  • Omitted expression for member references [BOO-1150] - `.foo' is now equivalent to `self.foo' by default. This behavior can easily be changed by a macro or compiler step.
    macro with(target, body as Expression*):
        for expression in body:
            match expression:
                case BinaryExpression(Left: mre = MemberReferenceExpression(Target: OmittedExpression())):
                    mre.Target = target
                    yield
    
    with System.Threading.Thread.CurrentThread:
        .CurrentCulture = CultureInfo.InvariantCulture
        .CurrentUICulture = CultureInfo.InvariantCulture
    
  • Volatile fields [BOO-806]
    class Threaded:
        [volatile] foo as int
    
  • TypeSystem refactoring - brings cleaner API and faster compilation (-30% time)

Take note that from now on strong versioning is used on Boo releases, this release assemblies are versioned `2.0.9.1'.

Contributors to this release: Cedric Vivier, Daniel Grunwald, JB Evain, Rodrigo B. De Oliveira.

Read the changelog for the complete list of improvements.

Download it now and have fun!

Posted at Mar 18, 2009 by Cedric Vivier | 0 comments

Bamboo would like to thank

  • Georges Benatti who always believed the idea, thanks man!
  • Carlinhos for always being there
  • cv for being so enthusiastic and introducing the project to the hausmates
  • the hausmates for such a warm welcome and the great infrastructure
  • Terence Parr for the great ANTLR tool along with all the people who hang on the ANTLR group
  • The guys from the Mono Brasil project
  • Guido van Rossum for coming up with such a great language that eventually served me as inspiration to start this project
  • The one who supported me all the way through this last 10 years: I love you, Ma!