Skip to content

fsantanna/dceu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

The Programming Language Ceu (v0.4)

Ceu is a synchronous programming language that reconciles Structured Concurrency with Event-Driven Programming to extend classical structured programming:

  • 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.
  • Event Signaling Mechanisms:
    • An await primitive to suspend a task and wait for events.
    • A broadcast primitive to signal events and awake awaiting tasks.

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.

Hello World!

During 10 seconds, displays Hello World! every second:

spawn {
    watching <10:s> {
        every <1:s> {
            println("Hello World!")
        }
    }
}

Manual

Install

  1. Install gcc and java:
sudo apt install gcc default-jre
  1. Install ceu:
wget https://github.com/fsantanna/dceu/releases/download/v0.4.0/install-v0.4.0.sh
sh install-v0.4.0.sh ./ceu/
  • We assume that you add ./ceu/ (the full path) to your environment $PATH.
  1. Execute ceu:
ceu ./ceu/hello-world.ceu
hello
world

pico-ceu

The best way to try Ceu is through pico-ceu, a graphical library based on SDL:

Resources