Sunday, December 30, 2012

Introducing Flect

The Flect project is an attempt to implement a pragmatic, functional systems programming language as a real world alternative to C and C++ in both freestanding and hosted programming environments.

The project was created for a variety of reasons described on the introduction page. This page also describes the language at a high level and the features intended in the long run.

The language specification can be found here.

Note that Flect is very much a work in progress and is by no means ready for actual use.

Upcoming CI fleet changes

We're planning to do some changes to the CI fleet over the course of the next week or so.

First, the FreeBSD and Solaris machines will be taken down.

We have not had much luck in porting the D tool chain to Solaris and seeing as there has been little demand for it, we have decided to drop the efforts. Worse yet, LLVM doesn't build on Solaris anymore.

The FreeBSD machines are being taken down because they have been a pain to keep running in the CI fleet. Most of the time, they cannot maintain a stable connection to the master node which has resulted in many failed builds that wouldn't really be failures. It is also clear that there is only a very small FreeBSD user base.

So, having said this, all plans to support Solaris are dropped. We will maintain FreeBSD support - just not in the CI infrastructure.

Second, the OS X machine will be getting an upgrade to Mountain Lion at some point. This means that projects such as LDC will be executed on the OS X machine in the near future.

Lastly, the Fedora/x86 machine has been shut down, but we plan to set up a new machine to take its place soon.

Sunday, June 10, 2012

libgc-d version 1.1 released

Version 1.1 of libgc-d has been released. This is a simple binding library for the libgc library. It has been tested with MCI's interpreter on Linux and OS X and should be ready for production use.

Highlights of this release:
  • Support for building with D 2.0 versions of the LDC compiler.
  • Minor fixes to the build script.
  • GC initialization fixes in the test suite.
  • Added a helper function for marking pointer reachability.
  • Added helper functions to hide/reveal pointers for disappearing links.
Archives can be downloaded here.

libffi-d version 1.1 released

Version 1.1 of libffi-d has been released. This library is a wrapper around the C library libffi which is useful for dynamic invocation of native functions. Since libffi-d provides a more 'D-like' wrapper around the C library, as opposed to just being a binding, there is a certain amount of logic in libffi-d that is actually quite error-prone. It has been battle-tested in MCI's interpreter on Windows, Linux, and OS X.

Highlights of this release:
  • Support for building with D 2.0 versions of the LDC compiler.
  • Some minor fixes to the build script.
  • The Visual D project files are now only for VS 11 and Visual D 0.3.32.
Archives can be downloaded here.

Wednesday, June 6, 2012

Nightly Arch Linux package for MCI available

We now maintain an Arch Linux PKGBUILD for nightly MCI builds in the AUR. Note that, despite what the package name might suggest, it is only updated once a week on average. It downloads a nightly MCI package and builds it with a debug configuration and with stripping disabled. It supports both 32-bit and 64-bit x86.

To install the package, just do:

yaourt -S mci-nightly

Note that, being a nightly package, it is by no means stable.

Update: This package is no longer available. A new package is available which builds directly from Git. Thus, you can do:

yaourt -S mci-git

You may wish to remove the old package first:

yaourt -R mci-nightly

Friday, June 1, 2012

CI server maintenance

The primary CI server is currently undergoing maintenance, which means that ci.lycus.orgnightlies.lycus.org, and api.lycus.org will be down for about a day. The maintenance primarily consists of a partition resize operation which should leave significantly more free space for the Jenkins instance.

Update: OK, we're back online. Note, though, that all existing nightly packages have been wiped (but they will still be built).

Thursday, April 26, 2012

libgc-d version 1.0 released

Version 1.0 of libgc-d has been released. This is a simple binding library for the libgc library. It has been tested with MCI's interpreter on Linux and OS X and should be ready for production use.

Archives can be downloaded here.

libffi-d version 1.0 released

Version 1.0 of libffi-d has been released. This library is a wrapper around the C library libffi which is useful for dynamic invocation of native functions. Since libffi-d provides a more 'D-like' wrapper around the C library, as opposed to just being a binding, there is a certain amount of logic in libffi-d that is actually quite error-prone. It has been battle-tested in MCI's interpreter on Windows, Linux, and OS X.

Archives can be downloaded here.

Wednesday, April 18, 2012

Itanium machine acquired

We have just acquired a HP Integrity rx4640 AB370A machine thanks to a donation from Tony Young. We expect to start porting MCI to Itanium as soon as GDC (the GNU D Compiler) is updated to the DMD 2.059 front end.

Monday, March 12, 2012

Support for user header data

It's very common for languages to need to attach some sort of information to objects in memory. At first glance, doing this with MCI seems easy: Just insert an extra hidden field on all types. Problem solved!

... Except, what about arrays and vectors?

It's perfectly normal to want to attach some language-specific type information to arrays and vectors in addition to plain objects. For instance, your language may want to keep information about the array's specific encoding, or perhaps some element type qualifiers need to be stored.

For this reason, we've added an extra field to the header of all RuntimeObject instances. It's a word-sized field which can hold any reference type (i.e. a plain reference, an array, or a vector). It can be accessed through the new field.user.addr, field.user.get, and field.user.set instructions.

This design does mean that there's an entire word of extra memory for all managed objects. This new field can be useful, but in cases where you don't need it, it just sits there eating memory for no good reason.

Unfortunately, there's no good way to get rid of the field when a program doesn't use it. It would introduce a lot of ABI compatibility issues to let programs disable it (and also complicate a lot of MCI code). We do recognize that on 32-bit machines, that extra word can actually make a difference, but the world is obviously moving towards 64-bit architectures these days, and so we've chosen to simply rely on the vastly increased address space in those.