MCPcopy Index your code
hub / github.com/alantech/alan

github.com/alantech/alan @v0.1.44

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.1.44 ↗ · + Follow
943 symbols 2,642 edges 75 files 70 documented · 7%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

drawing

The Alan Programming Language

CI Docs Discord Reddit

🔭 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.

Installation

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

Usage

To compile to Alan GraphCode and then run it with the AVM:

alan compile 

.ln <whateveryouwant>.agc
alan run <whateveryouwant>.agc

You can also compile-and-run a source file with a simple:

alan 

.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!

Contribution

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

License

The Alan Programming Language is made up of multiple sub-projects housed within this monorepo. Each subdirectory has its own license file and the project as a whole uses two licenses: The Apache 2.0 license and the Affero GPL 3.0 license, with the breakdown as follows:

  • Apache 2.0
  • bdd
  • js-runtime
  • std
  • AGPL 3.0
  • compiler
  • avm

The Apache 2.0 license is freely combinable with the GPL 3 series of licenses as well as with proprietary software, so the standard library and Javascript runtime library are freely combinable with your own software projects without any requirement to open source it.

The AGPL 3.0 license requires that any changes to the code are published and publicly accessible. This is to make sure that any advancements to the compiler and AVM are available to all. The licensing of these tools does not affect the licensing of the code they compile or run. Similarly, the GCC compiler collection is GPL 3.0 licensed, but code compiled by it is not GPL 3.0 licensed.

Extension points exported contracts — how you extend this code

LPNode (Interface)
(no doc) [26 implementers]
compiler/src/lp.ts
Equalable (Interface)
(no doc) [10 implementers]
compiler/src/lnntoamm/util.ts
Fn (Interface)
(no doc) [2 implementers]
compiler/src/lntoamm/Function.ts
Converter (Interface)
(no doc)
compiler/src/pipeline.ts
ConverterIntermediate (Interface)
(no doc)
compiler/src/pipeline.ts

Core symbols most depended-on inside this repo

get
called by 1248
compiler/src/lp.ts
t
called by 905
compiler/src/lntoamm/opcodes.ts
build
called by 430
compiler/src/lp.ts
has
called by 335
compiler/src/lp.ts
new
called by 194
avm/src/cloud/deploy/mod.rs
getAll
called by 121
compiler/src/lp.ts
clone
called by 94
compiler/src/lp.ts
deepGet
called by 86
compiler/src/lntoamm/Scope.ts

Shape

Method 493
Function 268
Class 157
Interface 15
Enum 10

Languages

TypeScript67%
Rust33%

Modules by API surface

compiler/src/lp.ts140 symbols
compiler/src/lnntoamm/Types.ts120 symbols
avm/src/daemon/ctrl.rs90 symbols
avm/src/vm/memory.rs50 symbols
compiler/src/lnntoamm/Stmt.ts49 symbols
avm/src/cloud/deploy/mod.rs42 symbols
compiler/src/lnntoamm/Expr.ts38 symbols
avm/src/vm/event.rs33 symbols
compiler/src/lntoamm/Type.ts22 symbols
compiler/src/lntoamm/Microstatement.ts18 symbols
compiler/src/lntoamm/UserFunction.ts17 symbols
compiler/src/ammtoaga/depgraph.ts16 symbols

For agents

$ claude mcp add alan \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact