Bloom removes traditional mismatches between distributed software and platforms, enabling powerful coding and code analysis without resorting to exotic syntax.
Some key features of Bloom:
- disorderly programming: Traditional languages like Java and C are based on the von Neumann model, where a program counter steps through individual instructions in order. Distributed systems don’t work like that. Much of the pain in traditional distributed programming comes from this mismatch: programmers are expected to bridge from an ordered programming model into a disordered reality that executes their code. Bloom was designed to match–and exploit–the disorderly reality of distributed systems. Bloom programmers write programs made up of unordered collections of statements, and are given constructs to impose order when needed.
- a collected approach: Taking a cue from successfully-parallelized models like MapReduce, SQL, and Key/Value stores, the standard data structures in Bloom are disorderly collections, rather than scalar variables and structures. These data structures reflect the realities of non-deterministic ordering inherent in distributed systems. Bloom provides simple, familiar syntax for manipulating these structures. In the Bud prototype, much of this syntax comes straight from Ruby, with a taste of MapReduce and SQL.
- CALM consistency: Bloom enables powerful compiler analysis techniques based on the CALM principle to reason about the consistency of distributed code. Bud includes program analysis tools that can point out precise points of order in your program: lines of code where a coordination library should be plugged in if you want to ensure distributed consistency.
- concise, familiar code: Bloom is a very high-level language, designed to ensure that distributed code can be structured for the realities of distributed systems. As a result, Bloom programs tend to be far smaller (often orders of magnitude smaller) than equivalent programs in traditional imperative languages.