BitC is a new systems programming language. It seeks to combine the flexibility, safety, and richness of Standard ML or Haskell with the low-level expressiveness of C.
Please Note: BitC has just made a transition from a LISP-like (s-expression) syntax to a more conventional syntax. The specification and the web site haven’t caught up yet, and of course some of the published papers predate the change.
BitC is a programming language that tries to meet the following objectives:
- Provide full support for fine-grain data structure specifications, including hardware-defined data structures. Representation requirements are sometimes prescriptive! Check out defrepr.
- Preserve mutability as a first-class notion in the language. Monads, effect types, and the like are wonderful things, but languages that rely on them have yet to demonstrate acceptable performance on systems problems.
- Provide a modern type system in the style of Haskell or ML, including type inference and type classes, without giving up data structure representation and mutability.
- Provide first class functions and type-safe abstraction mechanisms to programmers who can’t give up performance to get them:
def add-one(x) = 1 + x add-one: fn 'a -> 'a where Arith('a)
- Provide a complete formal semantics in automated form, so that it is possible to reason formally about specialized BitC programs.
- Develop the proving technology necessary to do useful verification about programs written in such a language.
As a litmus test, it is possible to write a MPEG decoder or SHA-1 hash algorithm in BitC that is fully safe, but performs competatively with the C implementation. Today, that can’t be done in SML, O’Caml, or Haskell.
The BitC bootstrap compiler compiles to portable ANSI C code. By tweaking a single header file and writing a target-specific header file and writing a procedure object thunk function it is possible to port the research compiler to essentially any target platform. The current source tree is known to work on IA32 and AMD64/X86-64 targets, and includes untested ports to SPARC and SPARC64. Contributions for new targets would be very welcome.
At present, the main mailing list for the BitC project is bitc-dev. These lists are intended primarily for developers and architects. When a release exists, we will add a user-oriented list as well.