SkillAgentSearch skills...

Ol

Otus Lisp (Ol) is a purely functional multi-platform Scheme dialect with built-in FFI and infix math.

Install / Use

/learn @yuriy-chumak/Ol

README

                 small,
        `___`       embeddable,
        (o,O)            and
        \)  )          purely
      ---"-"---     functional!
  O t u s   L i s p

x86/x64 status aarch64 status macos intel status macos arm64 status win(e) 32/64 status
riscv 64 status armv4t 32 status armv7 soft/hard 32 status mips 32/64 status mipsel 32/64 status ppc 32/64 status ppcle 64 status alpha 64 status sparc 64 status s390x 64 status

<a href="https://iaaa.port0.org/ol/test-matrix/"><img align="right" style="margin: 10px; " src="doc/img/test-matrix.png"></a>

Every code change is automatically tested for regressions using GitHub Actions and our own testing machine. It includes a set of core language <a href="tests/"> <img src="https://img.shields.io/endpoint?url=https%3A%2F%2Fiaaa.port0.org%2Fol%2Ftest-matrix%2Fstatus.json%3Frunner%3DLANGUAGE&label=test%20suite" alt="test suite"></a>, rosettacode <a href="tests/rosettacode/"> <img src="https://img.shields.io/endpoint?url=https%3A%2F%2Fiaaa.port0.org%2Fol%2Ftest-matrix%2Fstatus.json%3Frunner%3DROSETTACODE&label=examples" alt="examples"></a>, FFI <a href="tests/ffi/"> <img src="https://img.shields.io/endpoint?url=https%3A%2F%2Fiaaa.port0.org%2Fol%2Ftest-matrix%2Fstatus.json%3Frunner%3DFFI-Tier-1&label=tier-1%20tests" alt="ffi tests"></a> <a href="tests/ffi/"> <img src="https://img.shields.io/endpoint?url=https%3A%2F%2Fiaaa.port0.org%2Fol%2Ftest-matrix%2Fstatus.json%3Frunner%3DFFI-Tier-2&label=tier-2%20tests" alt="ffi tests"></a>, and language <a href="doc/reference/README.md"> <img src="https://img.shields.io/endpoint?url=https%3A%2F%2Fiaaa.port0.org%2Fol%2Ftest-matrix%2Fstatus.json%3Frunner%3DREFERENCE&label=functions%20reference" alt="ffi tests"></a>.

A detailed test matrix with results for each test across different platforms is available on a separate web page (follow the link or click the preview image to open it).

✨ Note

  • Please read the frequently asked questions and answers in the Q/A section. This may prove to be important!
  • Scheme R<sup>7</sup>RS vs Ol topic may be interested too.
<br/> <a href="https://mastodon.social/@otus_lisp"><img align="right" src="https://img.shields.io/mastodon/follow/111901537687270934"></a> <a href="https://twitter.com/otus_lisp"><img align="right" src="https://img.shields.io/twitter/url/https/twitter.com/otus_lisp.svg?style=social&label=Follow%20%40otus_lisp"></a> <a href="https://yuriy-chumak.github.io/ol/"><img align="right" src="https://yuriy-chumak.github.io/ol/assets/view-project-page.svg"></a>

OTUS LISP

Otus Lisp (Ol in short) is a purely functional, multi-platform Lisp dialect with built-in FFI, regular expressions, and infix math notation support.

Ol implements an extended subset of the R<sup>7</sup>RS Scheme (PDF), including but not limited to some SRFIs. It is tiny (~ 64KB), embeddable, and cross-platform. Provides a portable, high-level interface to call code written in another language (C, Python, Lua, etc). You can call native OS functions directly from your Ol program.

You can use Ol on Linux, Windows, macOS, Android, Chromebook*, (Open/Free/Net) BSD, Solaris and other operating systems based on various hardware architectures (x86, arm, ppc, mips, etc.), and directly in the web browsers (in WebAssembly form).

  • 64KB is a typical size of the Otus Lisp Virtual Machine (olvm) binary and may vary across platforms.
    Olvm can run compiled Ol code standalone or in embedded form.
  • The typical size of Ol with Compiler and FFI is 480KB (less than half a megabyte. cool, huh?).

credits to

Aki Helin (author of Owl Lisp, the project that gave birth to Otus Lisp),
the-man-with-a-golden-mind (for ideas, usage, and lot of tests), nullscm (for usage and tests), Odysseus (for tests, ideas, and math corrections), mt (for tests and ideas).

additional readings

Join the online gitter.im chat. Alternatively the Libera.Chat #otus-lisp (alternate lightweight web-client) channel is available. The Issues github page waiting for your bug reports and issues.

VERSIONS

Current version is 2.6.
Version 2.7 is in beta state. It is planned for release by the beginning of this (2026) year.
<sub><sup> I'm really sorry for the delay. But maintaining the project amid the blackouts caused by the aggressive, fascist russian regime is a bit challenging. :( </sup></sub>

PACKAGING

Packaging status Packaging status latest packaged version(s)

  • Ubuntu (and it's descendants such as Mint, Pop!_OS, Xubuntu, etc.) users may use the official project ppa as:

    $ sudo add-apt-repository ppa:yuriy-chumak/ol
    $ sudo apt update
    $ sudo apt install ol
    
  • ~~CentOS, Debian, openSUSE, RHEL, SL, SLE, Ubuntu, Univention precompiled packages: OpenSUSE Build Service.~~

Some additional libraries can be installed using 'kiss' package manager. Instructions available at ol-packages repository.

Q/A

  • Otus Lisp

    1. Q. Why doesn't the Ol command line handle arrow keys and history?
      A. For the gods of simplicity. Use an external tool to such behaviour. I recommend to use an rlwrap tool
      (run as rlwrap ol in terminal, or add an alias ol="rlwrap /usr/bin/env ol" line to your ~/.bashrc and then run as just ol).

    2. Q. Why when I enter 1.23 I get 123/100 and not 1.23?
      A. Because Ol was designed to behave identically across all supported platforms.
      Floating-point math varies across platforms, so Ol uses exact numbers by default. If you want to use real floating-point numbers, enter #i1.23 or (inexact 1.23).

    3. Q. Do you have something like a "hibernate mode"?
      A. You can save yours current session with ,save "filename-you-want" and exit Ol. Then, simply run Ol as ol filename-you-want any time later to continue the saved session.

  • Source code

    1. Q. Some folders are empty (i.e. "libraries/OpenGL"), is it ok?
      A. Yes, it's ok. Some parts of Ol project are separated into their own independent repositories.
      Use git clone --recursive to get a full project. Or git submodule init; git submodule update to update existing one.

    2. Q. .. fatal error: stdlib.h: No such file or directory.
      Q. .. fatal error: bits/libc-header-start.h: No such file or directory.
      A. Install gcc multilib, i.e.

      • apt install gcc-multilib for debian-based,
      • apk add musl-dev for alpine-based,
      • etc.

Related Skills

View on GitHub
GitHub Stars272
CategoryDevelopment
Updated2d ago
Forks14

Languages

Scheme

Security Score

85/100

Audited on Mar 23, 2026

No findings