August 16, 2013

llgo update #14

Ahoy there, mateys!

It’s been three months since our last correspondence. Apologies for the negligence. I’ve been busy, as usual, but it’s more self-inflicted than usual. I’ve taken up a new role at Canonical, working on Juju. I’m really excited about Juju (both the concept and realisation), and the fact that it’s written in Go is icing on the cake. Working remotely is taking some getting used to, but so far it’s been pretty swell. Anyway, you didn’t come here to read about that, did you?

I’m still working on llgo in the background, quietly prodding it along towards the 0.1 milestone. There’s just one big ticket item left, and that’s partially done now: channels. I’ve just finished porting the basics of channels from gc’s standard library to llgo’s runtime. That doesn’t include select, which is entirely missing. When that’s done, I’ll be content to release 0.1.

So what’s new since last time?

  • There’s a new llgo-build tool, which takes the pain out of building packages and programs with llgo and the LLVM toolchain. Just run “llgo-build <package>”, and you’ll either build and install a package, or build a program in the working directory. There’s no freshness checking, so you’re currently required to manually build all dependencies before building a program.
  • Simplified building against PNaCl: llgo-dist now accepts a “-pepper” option, which points to a NaCl SDK.
  • Implemented support for map literals.
  • Implemented complex number arithmetic.
  • Implemented channels (apart from anything select-related)
  • Numerous bug fixes.
In my previous post I talked about having implemented panic/recover, and having implemented them in terms of DWARF exception handling. Well, it looks like PNaCl isn’t going to support that, at least initially, so a setjmp/longjmp version is likely inevitable now.

I also said I would be working on a temporary for of cmd/go. I gave up on that, after hitting a few stumbling blocks. I figured it was more important to actually get the compiler and runtime working than get bogged down in the tooling, hence the simpler llgo-build tool.

That’s about it! “Feature complete” is getting closer, though lots of things still don’t work very nicely. Still no garbage collection, no proper escape analysis, etc. Those will come in time.

For now, though… I think I might go catch up on some sleep.