Ceu is a synchronous programming language that reconciles Structured Concurrency with Event-Driven Programming in order to extend classical structured programming with three main functionalities:
- Structured Deterministic Concurrency:
- A set of structured primitives to lexically compose concurrent tasks
(e.g.,
spawn,par-or,toggle). - A synchronous and deterministic scheduling policy, which provides predictable behavior and safe abortion of tasks.
- A container primitive to hold dynamic tasks, which automatically releases them as they terminate.
- A set of structured primitives to lexically compose concurrent tasks
(e.g.,
- Event Signaling Mechanisms:
- An
awaitprimitive to suspend a task and wait for events. - A
broadcastprimitive to signal events and awake awaiting tasks.
- An
- Lexical Memory Management (experimental):
- A lexical policy to manage dynamic allocation automatically.
- A set of strict escaping rules to preserve structured reasoning.
- A reference-counter collector for deterministic reclamation.
Ceu is inspired by Esterel and Lua.
Follows a summary of the main ideas in the design of Ceu:
Follows an extended list of functionalities in Ceu:
- Dynamic typing
- Statements as expressions
- Dynamic collections (tuples, vectors, and dictionaries)
- Stackless coroutines (the basis of tasks)
- Restricted closures (upvalues must be final)
- Deferred statements (for finalization)
- Exception handling (error & catch)
- Hierarchical Tags and Tuple Templates (for data description)
- Seamless integration with C (source-level compatibility)
Ceu is in experimental stage. Both the compiler and runtime can become very slow.
During 10 seconds, displays Hello World! every second:
spawn {
watching <10:s> {
every <1:s> {
println("Hello World!")
}
}
}
- Install
gccandjava:
sudo apt install gcc default-jre
- Install
ceu:
wget https://github.com/fsantanna/dceu/releases/download/v0.5.0/install-v0.5.0.sh
sh install-v0.5.0.sh ./ceu/
- We assume that you add
./ceu/(the full path) to your environment$PATH.
- Execute
ceu:
ceu ./ceu/hello-world.ceu
hello
world
The best way to try Ceu is through pico-ceu, a graphical library based on
SDL:
- A toy Problem: Drag, Click, or Cancel
- https://fsantanna.github.io/toy.html
- Run with
pico-ceuinceu/pico/tst/:ceu --lib=pico click-drag-cancel-x.ceu
- Comparison with JS generators:
- A simple but complete 2D game in Ceu:
- https://github.com/fsantanna/pico-ceu-rocks
- Clone in
ceu/pico/,cdto it, and run withpico-ceu:ceu --lib=pico main.ceu
- Academic publications:
- Mailing list (JOIN US!):