X10 1.7
IBM Research's asynchronous partitioned global address space (APGAS) language for supercomputers - and the 1.7 release of 2008 that gave it the concise new syntax (often compared to Scala's) and dual Java/C++ backends that defined its mature form.
Created by IBM Research (Kemal Ebcioğlu, Vijay Saraswat, Vivek Sarkar, and team)
X10 is IBM Research’s answer to a question that dominated high-performance computing in the 2000s: could a modern, safe, object-oriented language make programming a supercomputer as productive as programming a workstation? Born in 2004 under DARPA’s High Productivity Computing Systems (HPCS) program, X10 pioneered the Asynchronous Partitioned Global Address Space (APGAS) model - a small set of constructs (async, finish, at, places) for expressing parallelism and distribution directly in the language.
Version 1.7, released in September 2008, marks a pivotal moment in that story. It was the release in which X10 shed its original Java-derived skin and adopted the concise syntax - val, var, and def declarations with a constrained type system, a style often compared to Scala’s - that defined the language from then on, and it shipped with the dual compilation strategy (a C++ backend for native clusters and a Java backend for the JVM) that carried X10 through the rest of its life.
History & Origins
DARPA, HPCS, and the Productivity Crisis
In the early 2000s, DARPA launched the High Productivity Computing Systems program to attack a growing problem: supercomputers were getting faster, but programming them - typically in Fortran or C with MPI message passing - was not getting easier. DARPA funded vendors to rethink the whole stack, hardware and software together. Three new languages emerged from the program: Cray’s Chapel, Sun’s Fortress, and IBM’s X10.
X10 was developed at IBM’s Thomas J. Watson Research Center as part of PERCS (Productive, Easy-to-use, Reliable Computing System), IBM’s HPCS project. The language effort was led by researchers including Kemal Ebcioğlu, Vijay Saraswat, and Vivek Sarkar. The name is commonly explained as a play on the goal of the program: to deliver “times ten” productivity gains for parallel programming.
The design brief, as the X10 team later described it, was a language for “performance and productivity at scale”: clusters of multi-core processors joined by high-performance networks, programmed with first-class support for both concurrency (within a node) and distribution (across nodes), while remaining safe, garbage-collected, and interoperable with existing code.
From Java Dialect to Its Own Language
X10 first appeared publicly in 2004, and the 2005 OOPSLA paper “X10: An Object-Oriented Approach to Non-Uniform Cluster Computing” introduced its core ideas to the research community. Early X10 (through versions 1.0 and 1.5) looked very much like Java with new keywords - a deliberate choice to lower the barrier for the enormous population of Java programmers. The first open-source release of the reference implementation arrived in December 2006 under the Eclipse Public License, and X10 1.5 followed in June 2007.
The 1.7 Milestone (2008-2009)
By 2008 the team had concluded that the Java-based surface syntax was holding the language back, and X10 1.7 - released in September 2008, at the same time the project’s hosting moved to SourceForge - was the result of a major redesign:
- A new, more concise syntax. Immutable bindings with
val, mutable variables withvar, methods withdef, and type annotations written after the name (x:Int) - a style commentators often compare to Scala’s, though the X10 team’s own FAQ explains the break from Java-style syntax as necessary to support type inference. - Constrained (dependent) types. Types could carry logical constraints - for example, an integer known to be non-negative, or an array known to have a particular rank - checked by the compiler.
- Two backends, one language. The 1.7 releases shipped both a C++ backend/runtime (“Native X10”), which compiled X10 to C++ for clusters running a common PGAS runtime, and a Java backend/runtime (“Managed X10”) targeting the JVM.
- Broad platform coverage. Official 1.7-series binaries were published for AIX/PowerPC, Linux/PowerPC, Linux/x86, Linux/x86_64, and Windows via Cygwin/x86, with unsupported Solaris/UltraSPARC and macOS/x86 builds and a platform-independent Java backend distribution, plus the Eclipse-based X10DT development environment.
The 1.7 line ran through seven point releases, ending with 1.7.7 in October 2009. Within weeks, X10 2.0.0 (November 2009) built on the same foundations, and every later version of the language is a descendant of the design that crystallized in 1.7.
Design Philosophy: The APGAS Model
X10’s lasting contribution is the Asynchronous Partitioned Global Address Space model. Classic PGAS languages (Unified Parallel C, Coarray Fortran) give every processor a view of one global address space partitioned into local pieces. X10 added asynchrony: computation is not bound one-to-one to processors, but expressed as lightweight activities that the runtime schedules.
Four ideas carry most of the weight:
- Places. A place is a computational context with locally synchronous access to its own memory - in practice, roughly one process on one cluster node. A program runs over a fixed set of places, and data lives at a specific place.
async- unstructured parallelism made cheap.async Sspawns a new activity to run statementSin parallel. Activities are designed to be far lighter than operating-system threads, so programs can create very large numbers of them.finish- structured termination.finish Sblocks until every activity transitively spawned insideShas completed. The parent-child relationship between activities, always joined throughfinish, gives X10 programs a well-defined structure that rules out many deadlock scenarios by construction.at- explicit place shifting.at (p) SrunsSat placep, making communication visible in the source code. Combined withasync, it expresses active messages, remote reads, and data movement in one construct.
To these X10 adds atomic blocks for local mutual exclusion, clocks (a generalization of barriers that lets dynamically varying sets of activities advance in phases), and distributed arrays partitioned across places.
Key Features
A distributed “Hello, World” in the post-1.7 style shows the model’s economy (this form uses X10 2.x library names):
| |
One finish, one at, one async - and the program prints a greeting from every node of a cluster, with the main activity waiting until all of them are done.
The same constructs compose to express divide-and-conquer parallelism within a place:
| |
Beyond the concurrency core, the language that emerged in 1.7 offered:
- Static, strong typing with type inference for local declarations, generic classes, and constrained types
- Structs - user-defined value types without object headers, for numerics-friendly memory layouts
- Closures as first-class values
- Java-style class libraries and garbage collection on both backends
- Interoperability - Managed X10 programs could call Java code, and Native X10 could integrate with C++
Evolution After 1.7
X10 2.0 (November 2009) deepened the redesign, and the language continued to evolve rapidly: X10 2.1 (October 2010) reworked the object model for distribution, and X10 2.2 (June 2011) stabilized the language definition. An annual X10 Workshop ran alongside PLDI from 2011 through 2016, and IBM funded university projects through an X10 Innovation Grants program.
The high-water mark for visibility came at SC'12 in November 2012, when X10 won the HPC Challenge “Best Performance” Award in the Class II competition - the class that judges how well a programming system combines performance with elegance. The submission implemented Global HPL, Global RandomAccess, Global FFT, and Unbalanced Tree Search in X10 and ran them on IBM’s PERCS machine at 32,768 cores, with some runs at roughly 55,000 cores - demonstrating, in the words of the award announcement, good scaling and good-to-outstanding absolute performance on those benchmarks.
Later releases added support for accelerators (CUDA-capable GPUs via the native backend), Elastic X10, and steadily updated Java support. The project also distilled its programming model into a standalone APGAS library for Java and Scala (version 1.0 appeared in 2015), decoupling the ideas from the language itself. Development slowed in the late 2010s; X10 2.6.2, released in January 2019 with Java 11 support for Managed X10 and macOS 10.12+ support for Native X10, remains the most recent release.
Current Relevance
X10 today is a research language in repose. The compiler, runtime, benchmarks, and Global Matrix Library remain freely available under the Eclipse Public License, the source lives on GitHub under the x10-lang organization, and pre-built 2.6.2 binaries are published for Linux/x86_64 and macOS/x86_64 - but there has been no new release since January 2019, and the community that once filled annual workshops has largely moved on.
Its ecosystem left durable artifacts, though: ScaleGraph for graph analytics, ANUChem for computational chemistry, IMSuite’s distributed-algorithm benchmarks from IIT Madras, and agent-based simulation platforms built at IBM. And the APGAS model outlived the language - through the APGAS library for the JVM and through Habanero-Java, the Rice University language and runtime effort led by X10 co-designer Vivek Sarkar that grew directly out of an early version of X10.
Why It Matters
Of DARPA’s three HPCS languages, Fortress is gone, Chapel continues at HPE, and X10 occupies the middle ground: a language whose implementation has wound down but whose ideas escaped into the wild. Its influence shows up in several places:
- The APGAS model gave the PGAS world a vocabulary for asynchrony - lightweight tasks, structured termination, and explicit locality - that continues to shape distributed-runtime research.
async/finishis among the clearest early designs for structured task parallelism with guaranteed joining of child tasks, a pattern programmers now meet in many task-parallel frameworks.- A proof of scale - the SC'12 HPC Challenge award showed that a high-level, garbage-collected, object-oriented language could run competitive benchmarks on tens of thousands of cores.
- The 1.7 lesson in language evolution - X10’s willingness to discard its Java-compatible syntax mid-flight for a cleaner, more concise design was bold, and the redesigned language proved more expressive; every X10 program written since 2008 is written in the language that 1.7 introduced.
X10 1.7 is thus a snapshot of a language at its moment of self-definition: the release where an ambitious DARPA research project stopped being “Java for supercomputers” and became simply X10.
Timeline
Notable Uses & Legacy
IBM PERCS / HPC Challenge benchmarks
IBM's award-winning SC'12 HPC Challenge Class II submission implemented Global HPL, Global RandomAccess, Global FFT, and Unbalanced Tree Search in X10, running at 32,768 cores (some benchmarks at ~55,000 cores) on the PERCS machine, with what the award announcement described as good scaling.
ScaleGraph
A billion-scale graph analysis library from Tokyo Institute of Technology, providing large-scale graph algorithms and a distributed computing framework built entirely in X10.
ANUChem
A collection of computational chemistry codes for quantum chemistry and molecular dynamics simulation, developed at the Australian National University with IBM and used to evaluate X10 for scientific applications.
SatX10
An IBM framework for parallel boolean satisfiability (SAT) solving that uses X10's distribution features to coordinate multiple SAT solver instances across a cluster.
M3R (Main Memory Map Reduce)
An IBM Research engine, described in a 2012 VLDB paper, that re-implemented the Hadoop Map-Reduce API in X10 to run iterative jobs in memory.
MiX10
A McGill University compiler that translates MATLAB programs to X10 so that numerical code can exploit high-performance parallel systems.