Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified .mnesiastore/LATEST.LOG
Binary file not shown.
Binary file modified .mnesiastore/meta.DCD
Binary file not shown.
Binary file modified .mnesiastore/schema.DAT
Binary file not shown.
56 changes: 35 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,35 +1,49 @@
# AL

**TODO: Add description**
AL is a live, ACID, (eventually) bitemporal, relational-object operating system built around an append-only command log. It combines inspiration from:

## Installation
- XTDB

If [available in Hex](https://hex.pm/docs/publish), the package can be installed
by adding `al` to your list of dependencies in `mix.exs`:
- GlamorousToolkit/Pharo

```elixir
def deps do
[
{:al, "~> 0.1.0"}
]
end
```
- Git

Documentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc)
and published on [HexDocs](https://hexdocs.pm). Once published, the docs can
be found at <https://hexdocs.pm/al>.
- PROLOG

- LISP

TODO
- BEAM

- Re-evaluate this list!
- Urbit

- Loads more docs

- concurrency
The goal of the system is to be the first truly principled object-oriented PROLOG, and the personal computing environment of the future.
This runtime is the first version of AL, written in Elixir. The irony of the first Erlang interpreter having been written in PROLOG is not lost on us.

- constraint processing
## Features

- more bootstrapping for diff kinds of objects
- Live Smalltalk-style objects, defined relationally. No more faux-ADTs. Define protocols and their implementations. Mix and match at your leisure.
- Bidirectional Execution thanks to WAM semantics.
- Shutdown your system, continue later. All transactions are backed up by an on-disk database, hydrated at startup.
- ACID transactions ensure your work is safe and easy to reason about.
- Constraint Processing

- system wipes and rollbacks
And to come:

- Bitemporality features: Model temporal systems. Spin off new branches of your system at different points in time and move between them easily.

For discussion of the design philosophy of AL and resources that were consulted during its design, please see:
https://forum.anoma.net/t/design-philosophy-of-al-bibliography/2698

## Getting Started

Install from terminal using `iex -S mix` or as a mix dependency.
From IEx, you can run `require AL`.

`lib/examples` contains examples.
`lib/AL/package` contains the bundled packages (the `bootstrap` package is the foundational one).
`lib/AL` contains the runtime code.

Tips:

- Use `examine(:my_object_id_here, info)` in order to get quick information about an object via its ID, such as its class(es!), superclass(es!), methods, and in the case of method objects, relevant clauses.
10 changes: 10 additions & 0 deletions config/config.exs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,16 @@ config :logger,
handle_otp_reports: false,
handle_sasl_reports: false

# Packages installed at startup.
config :al,
packages: [
AL.Package.Bootstrap,
AL.Package.Users,
AL.Package.ElixirProcess,
AL.Package.Process,
AL.Package.Constraints
]

# Import environment specific config. This must remain at the bottom
# of this file so it overrides the configuration defined above.
if File.exists?("config/#{config_env()}.exs") do
Expand Down
2 changes: 0 additions & 2 deletions config/test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,3 @@ import Config

config :logger,
level: :error

config :al, mnesia_storage: :ram_copies
Loading