Elixir v1.20 released: now a gradually typed language
From Elixir v1.20, every program is now gradually type checked in search for verified bugs and typing violations.
From Elixir v1.20, every program is now gradually type checked in search for verified bugs and typing violations.
In 2022, we announced the effort to add set-theoretic types to Elixir. In June 2023, we published an award winning paper on Elixir’s type system design and said our work was transitioning from research to development. With Elixir v1.20, we have completed our first development milestone which is to perform type inference and gradually type check every Elixir program, without introducing type annota…
This is a follow up to our batch of set-theoretic types optimizations, this time targeting differences.
In a previous article, we discussed how we optimized intersections in Elixir set-theoretic types to improve performance. In a nutshell, lazy BDDs allow us to represent set-theoretic operations at any depth. And while this is useful in many cases, they offer a downside when it comes to intersections. For example, take this type: (%Foo{} or %Bar{} or %Baz{} or %Bat{}) and %Bar{} While we could store…
This article explores the latest batch of optimizations we did to set-theoretic types and their representation.
In a previous article, we discussed how Elixir changed its set-theoretic types representation from Disjunctive Normal Forms (DNFs) to Lazy Binary Decision Diagrams (Lazy BDDs). In a nutshell, DNFs allow us to represent unions, intersections, and negations as a flat data structure: (c1 and not d1) or (c2 and not d2) or (c3 and not d3) or ... This meant that any operation between complex types was i…
Today we celebrate 15 years since Elixir's first commit! To mark the occasion, we are glad to announce the first release candidate for Elixir v1.20, which performs type inference of all language constructs, with increasing precision.
Today we celebrate 15 years since Elixir’s first commit! To mark the occasion, we are glad to announce the first release candidate for Elixir v1.20, which performs type inference of all language constructs, with increasing precision. In this blog post, we will break down exactly what this means, and what to expect in the short and medium term of the language evolution (roughly the next 15 months).…
This article explores the data structures used to represent set-theoretic types and the recent optimizations we have applied to them.
The Elixir team and the CNRS are working on a set-theoretic type system for Elixir which, simply put, is a type-system powered by unions, intersections, and negations. As part of the implementation of said type systems, we need an efficient way of representing said operations. This article discusses the existing approaches found in theory and practice, as well as the improvements we have introduce…
Elixir v1.19 released: type checking of protocols and anonymous functions, broader type inference, improved compile times, and more.
Elixir v1.19 brings further improvements to the type system and compilation times, allowing us to find more bugs, faster. Type system improvements This release improves the type system by adding type inference of anonymous functions and type checking of protocols. These enhancements seem simple on the surface but required us to go beyond existing literature by extending current theory and developi…
We explore the mechanisms for interoperability and portability between Elixir, other programming languages, and runtimes.
The Erlang Virtual Machine has, historically, provided three main options for interoperability with other languages and ecosystems, with different degrees of isolation: NIFs (Native Implemented Functions) integrate with third party code in the same memory space via C bindings. This translates to low overhead and best performance but it also means faulty code can bring the whole Virtual Machine dow…
We are launching Global Elixir Meetups - a week where the Elixir community organizes meetups around the world to meet, learn from each other, and discuss everything related to Elixir and the Erlang VM.
Update: Our first Global Elixir Meetups was a success with 46 meetups spread across six continents. Thanks to everyone who organized and attended. See you next time! We are launching Global Elixir Meetups (GEMs) - a week where the Elixir community organizes meetups around the world to meet and learn from each other. Our goal is to spark local communities, old and new, to get together and discuss e…
We announce the Elixir Outreach stipend in partnership with Dashbit, Oban, and the Erlang Ecosystem Foundation.
Dashbit, Oban, and the Erlang Ecosystem Foundation (EEF) are glad to announce a new program, which we will trial over the next 12 months, called “Elixir Outreach”. Our goal is to provide funds to community members who want to present Elixir and Erlang to other ecosystems and communities, while respecting our joint values. In a nutshell: We will provide funds to community members to speak in-person…
A case study of how Elixir is being used at Cyanview.
How do you coordinate visual fidelity across two hundred cameras for a live event like the Super Bowl? The answer is: by using the craft of camera shading, which involves adjusting each camera to ensure they match up in color, exposure and various other visual aspects. The goal is to turn the live event broadcast into a cohesive and consistent experience. For every angle used, you want the same gr…
The Elixir project now meets OpenChain (ISO/IEC 5230). Each release ships with Source SBoMs in CycloneDX 1.6 and SPDX 2.3, plus attestation.
We are pleased to share that the Elixir project now complies with OpenChain (ISO/IEC 5230), an international standard for open source license compliance. This step aligns with broader efforts to meet industry standards for supply chain and cybersecurity best practices. “Today’s announcement around Elixir’s conformance represents another significant example of community maturity,” says Shane Coughl…
A case study of how Elixir is being used at Remote.
Welcome to our series of case studies about companies using Elixir in production. Remote is the everywhere employment platform enabling companies to find, hire, manage, and pay people anywhere across the world. Founded in 2019, they reached unicorn status in just over two years and have continued their rapid growth trajectory since. Since day zero, Elixir has been their primary technology. Current…
Elixir v1.18 released: type checking of function calls, Language Server listeners, built-in JSON, ExUnit improvements, mix format --migrate, and more.
Elixir v1.18 is an impressive release with improvements across the two main efforts happening within the Elixir ecosystem right now: set-theoretic types and language servers. It also comes with built-in JSON support and adds new capabilities to its unit testing library. Let’s go over each of those in detail. Type inference of patterns and return types There are several updates in the typing depart…
This article explores the design decisions of typing lists and tuples in Elixir within a sound gradual type system.
We have been working on a type system for the Elixir programming language. The type system provides sound gradual typing: it can safely interface static and dynamic code, and if the program type checks, it will not produce type errors at runtime. It is important to emphasize type errors. The type systems used at scale today do not guarantee the absense of any runtime errors, but only typing ones.…
Announcing the official Elixir Language Server team to work on the code intelligence infrastructure to be used across tools and editors.
Update: the new language server is called Expert and is currently available in alpha as open source. Companies wanting to directly sponsor work on Expert, please reach out to Dan Janowski from the Erlang Ecosystem Foundation, which has kindly stepped in to manage and bring visibility into the project sponsorships. I am glad to welcome Elixir’s official Language Server team, formed by (in alphabeti…