Fueling innovative software
July 15-18, 2019
Portland, OR

Children of Ruby: The different worlds of Elixir and Crystal

Simon St.Laurent (LinkedIn)
5:05pm5:45pm Wednesday, July 17, 2019
Emerging Languages and Frameworks
Location: Portland 256
Secondary topics:  Open Source
Average rating: ****.
(4.75, 8 ratings)

Who is this presentation for?

  • Programmers, software architects, and managers




You program in Ruby but long for greater concurrency. You dream of programs that run instantly when called. You wish everything had clearly defined types. You prefer functional approaches to organizing logic. Ruby is proving to be not just a great programming language, but a great foundation for new programming languages. Elixir and Crystal in particular demonstrate very different ways to build specific approaches based on a classic generalist language.

Ssince its beginning, Ruby has harmonized many different programming approaches into a single language context. Developers arriving from a variety of contexts—object-oriented programming, functional programming, and more—could pick up Ruby and find familiar tools. As Yukihiro “Matz” Matsumoto, Ruby’s creator, put it, “I want to make Ruby users free. I want to give them the freedom to choose.”

Over the years, idiomatic Ruby styles emerged that delivered maintainability and performance, but Ruby has always been a language that can speak in multiple voices. Some of those voices are now stepping out on their own, bringing Ruby syntax and sensibilities to specific contexts. Where Ruby emphasized flexibility and harmony, these new languages target specific uses. Two of the most successful, Elixir and Crystal, have taken starkly different paths. The Ruby DNA of both languages is clear. Rubyists should feel comfortable reading both languages. However, Elixir aims for concurrency by building on Erlang’s extremely functional and dynamically typed approach, and while Crystal supports basic functional programming, it’s much fonder of classical object-oriented approaches and sternly typed.

Join Simon St.Laurent to explore the overlaps between the two languages and Ruby and see how different priorities have created languages with very different best practices. He compares code doing the same simple tasks and provides some explorations of capabilities specific to each language. Along the way, you’ll learn how to choose tools that fit specific tasks and gain a broader sense of how architectural choices percolate through language syntax.

Prerequisite knowledge

  • Familiarity with Ruby
  • A broad understanding of the differences between functional and object-related approaches and of various kinds of type systems (useful but not required)

What you'll learn

  • Take a detailed look at two closely related languages with extremely different priorities to decide which (or both or neither) you want to pursue for which kinds of projects
  • Learn the kinds of program structures that different programming language architectures encourage and how language choices can affect performance across contexts
Photo of Simon St.Laurent

Simon St.Laurent


Simon St.Laurent is a content manager at LinkedIn Learning, focusing primarily on the client side of the web. He’s a past cochair of the Fluent and OSCON conferences. He’s authored or coauthored books including Programming Crystal, Introducing Elixir, Introducing Erlang, Learning Rails 3, XML Pocket Reference, 3rd edition, XML: A Primer, and Cookies.