Skip to content

chaos-lang/chaos

Repository files navigation

Chaos

Logo

Turn chaos into magic!

GitHub Last Commit GitHub Commit Activity GitHub License GitHub Workflow Linter Checks Status GitHub Workflow Automated Tests Status GitHub Workflow Memory Leak Checks GitHub Workflow Memory Sanitizer GitHub Workflow Address Sanitizer GitHub Workflow Undefined Behavior Sanitizer GitHub Workflow Chaos C Extension Feature Tests Status Code Coverage (Codecov)

Chaos is a strongly typed, dynamic yet compilable, test-oriented procedural programming language that achieves zero cyclomatic complexity.

Influenced by

  • TypeScript's type safety
  • Python's syntax, modules and extensibility
  • JavaScript's cross-platform support
  • Ruby's loops and blocks, Rexx's FOREVER keyword
  • PHP's dedication to server-side
  • Haskell's pure functions
  • C's speed and interoperability
  • Go's standalone executables

Featured Aspects

  • There are no control structures. (no if..else, no switch..case) Decision making only possible on function returns:
     num def add(num x, num y)
         num z = x + y
     end {
         z == 8  : f1(),
         z > 10  : f2(),
         default : f3()
     }
  • A single unit test is enough to have 100% coverage on functions, always.
  • Warns you about untested functions in the executed program.
  • Detects possible runtime errors in compile-time.
  • Unique function call system that combines procedures with some aspects of functional programming paradigm.
  • No while or when keywords. Loops are mostly predetermined. Infinite loops can only be achievable through the INFINITE keyword.
  • There are break and continue statements but breaking a multiline loop inside a function is forbidden.
  • Single source of errors and unique exit codes for each one of them. So the errors are catchable by other programs.
  • Language's itself forces you to write less error-prone code.
  • Say goodbye to dependency conflicts with Occultist dependency manager.
  • Eliminated segmentation fault possibility using strict memory management and predictions.
  • Simplest C extension development framework so far.

Installation

Install the requirements:

make requirements

Compile the Chaos source:

make

Install the chaos binary system-wide:

make install

Interpreter

Interactive Shell

$ chaos
    Chaos Language 0.2.0 (Jan 20 2021 02:39:23)
    GCC version: 9.3.0 on linux
    Turn chaos into magic!

kaos> print "hello world"
hello world
kaos> exit
    Bye bye!

Program File as Command-line Argument

hello.kaos:

print "hello world"
$ chaos hello.kaos
hello world

Compiler

$ chaos -c hello.kaos -o hello
Starting compiling...
Compiling Chaos code into build/hello.c
Compiling the C code into machine code...
Cleaning up the temporary files...

Finished compiling.

Binary is ready on: build/hello
$ build/hello
hello world

Run chaos --help to see more options.

Uninstallation

You can uninstall the chaos binary and its C headers with:

make uninstall

Useful Links

Language Reference

Developing Chaos C Extensions

API Reference

Template for Chaos C Extension Developers

Documentation Repository

Bug Tracker

Occultist Dependency Manager

Contribution Guide

Code of Conduct