Programming language designers have to date largely failed the large-scale parallel computing community, and arguably even parallel programmers targeting desktops or modest-scale clusters. Parallel features are typically an afterthought in language design, tacked on as pragmas, libraries, or extensions. Even when languages are designed to support parallelism, they generally fail to consider distributed-memory computing. Other approaches tend to be domain-specific and not suited for more general parallel programming. Meanwhile, though the High Performance Computing (HPC) community has pursued many novel parallel languages, none have succeeded in getting over the tipping point of broad adoption.
Chapel is my team’s effort to reverse these trends. It’s a general-purpose language in which scalable parallel programming has been a motivating theme from day one. It’s designed with productivity in mind in order to make parallel programming less arcane and more modern in style. It’s portable and open-source in order to support a broad community and reduce barriers to adoption. And yet, like any new language design being undertaken by a modest-sized team, it’s not without its challenges – both technical and social.
In this talk, I’ll provide an introduction to Chapel’s motivating themes and features to give you a sense of what we are doing and why. I’ll also provide a glimpse into some of the challenges we wrestle with and how we are dealing with them. Whether you leave the talk a convert to Chapel or simply intrigued, I hope to challenge you to think about scalable parallelism as the first-class language feature that it deserves to be.