No description
  • Rust 93.9%
  • Assembly 3.2%
  • Nix 2.9%
Find a file
2026-05-01 22:38:21 +09:30
src ayaa 2026-05-01 22:38:21 +09:30
.gitignore lets attempt const generics 2026-04-21 23:16:52 +09:30
Cargo.lock ayaa 2026-05-01 22:38:21 +09:30
Cargo.toml ayaa 2026-05-01 22:38:21 +09:30
flake.lock lets attempt const generics 2026-04-21 23:16:52 +09:30
flake.nix lets attempt const generics 2026-04-21 23:16:52 +09:30
input.yx ayaa 2026-05-01 22:38:21 +09:30
kernel.S yea 2026-04-22 19:28:04 +09:30
README.md ayaa 2026-05-01 22:38:21 +09:30

Oryx

Functional, dynamic, garbage collected,AOT compiled s-expr programming language with some Scheme influences.

Goals:

  • Expressive.
  • Fairly fast.
  • No dependency on C or C compilers.
  • Minimal dependencies on outside tools (linkers, assemblers, etc.).
  • Expansive but modular standard library.
  • Tend towards bleeding-edge, fun, clean solutions vs. broader compatibility.
  • Tend towards ideological purity and doing things "cleanly" and "neatly" rather than necessarily the fastest way.

Currently it depends on as for assembling the entry stub and uses Boehm GC.

(this all said, this is my first foray into compiler and language design)

TODO

  • Parser errors are mediocre (split lexer and parser i feel)
  • pack short strings, i remember a talk about this
  • Type checking/a type system in any capacity lol
  • not sure what im doing wrong to get like no dead code removal, unused fuctions survive compilation
  • distinction between pure and impure functions? if that can be done?

Notes

per scheme functions must have one value like

(defun (main))

(defun (main) ())

are both invalid. but a quoted empty list is ok

'()
  • code assumes pointers are 64 bit

Special forms / primitives / builtins / whatever

Perhaps, everything truthy except ()?

  • lambda
  • let
  • define
  • quote
  • quasiquote (```)
  • unquote (,)
  • cond
  • case
  • and
  • or
  • cons
  • car (as first)
  • cdr (as rest)
  • +, -, <, >, =, *, /
  • eq?

Don't need:

  • if
  • write, make syscall or something
(defmacro if (test then &optional else)
  `(conditional (,test ,then) (t ,else)))