🔭 Predictable runtime for all computations - A program is represented as DAG(s) where the running time for all computations can be predicted because there is no unbounded recursion or iteration.
⛓ Automatic IO concurrency and parallelism across events and arrays - Alan exploits opportunities for IO concurrency or CPU parallelization across machines in a cluster via arrays and a static event loop without threads, channels, promises, futures, locks, etc.
✅ Almost no runtime errors - No deadlocks, livelocks, undefined variables, divide-by-zero, integer under/overflow, array out-of-bounds access, etc.
⚡️ No GC pauses - Alan’s runtime manages memory allocation, access, and deallocation for you like Java, Python, or Javascript. However, Alan’s static event system and automatic event-oriented memory model does so without garbage collector pauses.
👩🚀 Alan is a programming language that does concurrency for you and can thus separate how the software is written from how it runs. To learn more about Alan, take a look at runnable examples or the most Frequently Asked Questions.
For MacOS it is recommended to install Alan via the Homebrew package manager.
MacOS
brew install alantech/homebrew-core/alan
For Linux and Windows it is recommended to install Alan via the published artifacts. Simply download the zip or tar.gz file for your operating system, and extract the alan
executable to somewhere in your $PATH
, make sure it's marked executable (if not on Windows), and you're ready to roll.
Linux
wget https://github.com/alantech/alan/releases/latest/download/alan-ubuntu.tar.gz
tar -xzf alan-ubuntu.tar.gz
sudo mv alan /usr/local/bin/alan
Windows
Invoke-WebRequest -OutFile alan-windows.zip -Uri https://github.com/alantech/alan/releases/latest/download/alan-windows.zip
Expand-Archive -Path alan-windows.zip -DestinationPath C:\windows
To compile to Alan GraphCode and then run it with the AVM:
alan compile <source>.ln <whateveryouwant>.agc
alan run <whateveryouwant>.agc
You can also compile-and-run a source file with a simple:
alan <source>.ln
You can also transpile Alan to Javascript or one of it's intermediate representations.
Note: To better understand if we are building something people want to use we currently log an event when running an Alan command. Feel free to turn this off by setting the ALAN_TELEMETRY_OFF
environment variable to true
, but if you do please let us know how you are using Alan and how often!
Source Installation:
If you wish to contribute to Alan, or if your operating system and/or CPU architecture do not match the above, you'll need a development environment to build Alan locally:
- git (any recent version should work)
- Node.js >=10.20.1
- Rust >=1.45.0
- A complete C toolchain (gcc, clang, msvc)
Once those are installed, simply:
git clone https://github.com/alantech/alan
cd alan
make
sudo make install
Integration tests:
Integration tests are in /bdd
and defined using Shellspec. To run all integration tests:
make bdd
To run a single test file:
make bdd testfile=bdd/spec/001_event_spec.sh
To run a single test group use the line number corresponding to a Describe
:
make bdd testfile=bdd/spec/001_event_spec.sh:30
MIT