14 August 2020 | David Ellis, Luis F. De Pombo
We created a programming language to be able to write concurrent algorithms and business logic without having to explicitly program how it should be parallelized. Alan makes people more productive by managing IO and computational parallelism for them in the same way languages from the 90s like Java and Python made people more productive, when compared to C or C++, by managing memory for them.
Why the name? Alan is named in honor of Alan Turing. We find great inspiration in the magnitude of his intellectual contributions.
Alan is implicitly parallel because its compiler and runtime exploits opportunities for parallelization across the computing resources available without being told to do so. We have constrained the language a bit to provide better opportunities to do this. This results in nimbler codebases than those built with languages or frameworks that use parallel programming constructs such as threads, actors, channels, locks, futures, promises etc.
Deadlocks, livelocks, undefined variables, divide-by-zero, integer under/overflow, array out-of-bounds access, etc, are not possible in Alan. Only out-of-memory errors persist, but they are impossible to avoid. This makes Alan codebases easier to maintain and develop in because runtime errors are nearly always caught at compile time.
Alan's module resolution mechanism, with mocking built-in, allows you to prevent specific third-party dependencies from having access to specific standard libraries that they should not have access to.
There is still a ways to go for Alan to become a worthy abstraction to automatically parallelize software, but if you are moved by the vision please try it out, give us your feedback and help us shape it.