Skip to content

A statically typed scripting language that transpile into POSIX sh

License

Notifications You must be signed in to change notification settings

cotowali/cotowali

Repository files navigation

We need financial support to continue development. Please become a sponsor.

Cotowali

A statically typed scripting language that transpile into POSIX sh

Website

License: MPL 2.0 Join Cotowali Discord

Concepts of Cotowali

  • Outputs shell script that is fully compliant with POSIX standards.
  • Simple syntax.
  • Simple static type system.
  • Syntax for shell specific feature like pipe and redirection.

Example

fn fib(n: int): int {
  if n < 2 {
    return n
  }
  return fib(n - 1) + fib(n - 2)
}

fn int |> twice() |> int {
   var n = 0
   read(&n)
   return n * 2
}

assert(fib(6) == 8)
assert((fib(6) |> twice()) == 16)

fn ...int |> sum() |> int {
  var v: int
  var res = 0
  while read(&v) {
    res += v
  }
  return res
}

fn ...int |> twice_each() |> ...int {
  var n: int
  while read(&n) {
    yield n * 2
  }
}

assert((seq(3) |> sum()) == 6)
assert((seq(3) |> twice_each() |> sum()) == 12)

// Call command by `@command` syntax with pipeline operator
assert(((1, 2) |> @awk('{print $1 + $2}')) == '3')

There are more examples

Installation

Use Konryu (cotowali installer written in cotowali)

curl -sSL https://konryu.cotowali.org | sh
# add to your shell config like .bashrc
export PATH="$HOME/.konryu/bin:$PATH"
eval "$(konryu init)"

Build from source

  1. Install required tools

  2. Build

    z build
  3. Install

    sudo z symlink
    # or
    sudo z install

How to use

# compile
lic examples/add.li

# execution
lic examples/add.li | sh
# or
lic run examples/add.li

Development

See docs/development.md

Docker

docker compose run dev

Author

zakuro <z@kuro.red>

Acknowledgements

Cotowali is supported by 2021 Exploratory IT Human Resources Project (The MITOU Program by IPA: Information-technology Promotion Agency, Japan.