haxala1r
bf05e738e2
compiler and vm: added modulo, rem and abs
ci/woodpecker/push/debian Pipeline failed
ci/woodpecker/push/fedora Pipeline failed
ci/woodpecker/push/nix Pipeline failed
ci/woodpecker/push/publish Pipeline was successful
2026-05-17 21:32:48 +03:00
haxala1r
0ed3083306
compiler and vm: added division
2026-05-17 20:59:04 +03:00
haxala1r
b433372f95
compiler and vm: added division
2026-05-17 20:52:23 +03:00
haxala1r
60d607cb59
compiler and vm: added subtraction
2026-05-17 20:45:49 +03:00
haxala1r
3668265b6f
compiler and vm: implemented add
2026-05-17 20:38:31 +03:00
haxala1r
47ffeb4934
repl: print errors encountered during compilation
2026-05-17 20:36:21 +03:00
haxala1r
df1fad751f
compiler: constants are now put directly inside the program's global table where possible (i.e. whenever the global value would be constant-ish anyway).
2026-05-17 20:05:47 +03:00
haxala1r
1ca4ac2b79
parser: fix bug where strings were always uppercased instead of symbols.
2026-05-17 20:04:20 +03:00
haxala1r
68b8916d63
repl: added a repl. currently compiles every program as a new one however. this needs to be fixed with incremental compilation
2026-05-17 20:03:38 +03:00
haxala1r
b05c3ae5f7
vm: modify make_vm to take globals directly instead of constructing an empty global table
2026-05-17 19:56:33 +03:00
haxala1r
f3da8751a4
added readme with build badge
2026-05-17 17:54:33 +03:00
haxala1r
682d54e36c
flake: update
2026-05-17 16:12:38 +03:00
haxala1r
c9694af826
vm and compiler: removed automatic currying, and several other modifications to the language
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/publish Pipeline was successful
2026-05-10 17:23:42 +03:00
haxala1r
947d2274bb
vm: modified StoreLocal and StoreGlobal logic to be more consistent with the rest of the VM,
...
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/publish Pipeline was successful
and modified the emit module to emit a Pop instruction after every top-level expression.
This change was required because the semantics of the language are pretty clear.
Every expression evaluates to something - meaning that, in the corresponding bytecode,
every expression must have exactly a +1 effect on the data stack. I.e. every expression,
when its corresponding bytecode is evaluated, has the effect of pushing something
to the stack. For values that are not used by another expression, this value
must be immediately popped.
Some optimizations could target this area. For example, for top-level expressions,
it is obvious to the compiler that their values will not be used - hence the compiler
can use optimized versions of some instructions (like StoreLocal and StoreGlobal)
to simply never leave the value on the stack, thus saving an extra Pop instruction
(good for performance and code size).
Same thing applies in function bodies, letrec/let/begin bodies, where expressions
whose values are never used may appear.
It may also make sense to introduce registers to the VM, for the purposes of
parameter passing (such that up to a predetermined number of parameters are
progressively passed through registers instead of pushed to the stack).
This would pair well with eliminating unnecessary currying in the byte code.
2026-04-26 01:20:05 +03:00
haxala1r
d846046c4a
Big changes:
...
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/publish Pipeline was successful
Compiler and VM are now working well enough to support larger programs.
A test program is included and executed immediately upon running
the executable.
A more feature complete read-eval-print loop is planned.
2026-04-26 00:55:43 +03:00
haxala1r
0925b44ef7
vm: got the VM to finally actually work
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/publish Pipeline was successful
2026-04-25 22:48:06 +03:00
haxala1r
5edcc974b6
binary: modify binary to make use of the new compilation pipeline
2026-04-25 22:47:34 +03:00
haxala1r
4716c71b15
compiler: modify the Emit module to actually produce a vm_state object directly executable by the VM
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/publish Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
2026-04-25 21:04:49 +03:00
haxala1r
2b02740e68
compiler: add the initial draft for compiling into byte code with backpatching
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/publish Pipeline was successful
2026-04-25 20:46:28 +03:00
haxala1r
190ec94e14
compiler: make space for compiling into the VM bytecode
2026-04-25 20:44:37 +03:00
haxala1r
fe3ad80826
vm: added noop instruction, various other improvements
2026-04-25 20:43:55 +03:00
haxala1r
2822774931
vm: modified the vm to include native procedures, and changed the order of some parameters
2026-04-25 00:08:54 +03:00
haxala1r
06d0b4d2bf
vm: wrote an initial sketch of a rough bytecode VM
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/publish Pipeline was successful
ci/woodpecker/cron/debian Pipeline was successful
ci/woodpecker/cron/nix Pipeline was successful
ci/woodpecker/cron/fedora Pipeline was successful
ci/woodpecker/cron/publish Pipeline was successful
2026-04-24 19:10:14 +03:00
haxala1r
757df161d1
scope analysis: created another type to statically eliminate one (im)possible error case
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/publish Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/cron/publish Pipeline failed
ci/woodpecker/cron/debian Pipeline was successful
ci/woodpecker/cron/nix Pipeline was successful
ci/woodpecker/cron/fedora Pipeline was successful
2026-04-05 23:14:29 +03:00
haxala1r
39ed14b33d
nix: change pkgs.mkShellNoCC -> pkgs.mkShell because a standard environment is required in a development shell as well
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/publish Pipeline was successful
2026-04-05 23:04:03 +03:00
haxala1r
3ae6a7491d
nix: add a separate shell.nix so I can specify merlin there without adding it as a build requirement
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/publish Pipeline was successful
2026-04-05 22:58:45 +03:00
haxala1r
4c573289b5
build: separated the nix flake and derivation, to allow for simpler builds and more flexibility
ci/woodpecker/manual/debian Pipeline was successful
ci/woodpecker/manual/nix Pipeline was successful
ci/woodpecker/manual/fedora Pipeline was successful
ci/woodpecker/manual/publish Pipeline was successful
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/publish Pipeline was successful
ci/woodpecker/cron/debian Pipeline was successful
ci/woodpecker/cron/nix Pipeline was successful
ci/woodpecker/cron/fedora Pipeline was successful
ci/woodpecker/cron/publish Pipeline was successful
2026-04-03 20:33:26 +03:00
haxala1r
24213597f1
flake: update
ci/woodpecker/push/debian Pipeline was canceled
ci/woodpecker/push/nix Pipeline was canceled
ci/woodpecker/push/fedora Pipeline was canceled
ci/woodpecker/push/publish Pipeline was canceled
2026-04-03 20:06:31 +03:00
haxala1r
4792a296d3
interpreter: minor fixes, changes to the main binary to actually interpret some source code
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/publish Pipeline was successful
ci/woodpecker/cron/debian Pipeline was canceled
ci/woodpecker/cron/nix Pipeline was canceled
ci/woodpecker/cron/fedora Pipeline was canceled
ci/woodpecker/cron/publish Pipeline was canceled
2026-03-22 17:23:49 +03:00
haxala1r
040353683f
interpreter: added a new implementation for an interpreter. typechecks, but it needs testing
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/publish Pipeline was successful
ci/woodpecker/cron/debian Pipeline was successful
ci/woodpecker/cron/nix Pipeline was successful
ci/woodpecker/cron/fedora Pipeline was successful
ci/woodpecker/cron/publish Pipeline was successful
2026-03-01 16:25:42 +03:00
haxala1r
cb7e3f8622
scope_analysis: changed convert to return the global symbol table as well as the program
2026-03-01 16:24:45 +03:00
haxala1r
fe26b6c2b3
scope_analysis & core_ast: added functions to convert directly from source for convenience
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/publish Pipeline was successful
ci/woodpecker/cron/nix Pipeline was successful
ci/woodpecker/cron/fedora Pipeline was successful
ci/woodpecker/cron/debian Pipeline was successful
ci/woodpecker/cron/publish Pipeline was successful
2026-02-28 18:59:37 +03:00
haxala1r
a95a676cb2
scope_analysis: small logic fix
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/publish Pipeline was successful
2026-02-28 18:41:02 +03:00
haxala1r
24db34db62
scope_analysis: added support for deferred computation
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/publish Pipeline was successful
ci/woodpecker/cron/debian Pipeline was successful
ci/woodpecker/cron/fedora Pipeline was successful
ci/woodpecker/cron/nix Pipeline was successful
ci/woodpecker/cron/publish Pipeline was successful
2026-02-15 15:09:59 +03:00
haxala1r
7685ae2e45
interpreter: removed the outdated tree-walk interpreter
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/publish Pipeline was successful
2026-02-15 14:30:41 +03:00
haxala1r
8d301a6fc2
scope_analysis: fix the handling of Lambda forms
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/publish Pipeline was successful
ci/woodpecker/cron/debian Pipeline was successful
ci/woodpecker/cron/fedora Pipeline was successful
ci/woodpecker/cron/nix Pipeline was successful
ci/woodpecker/cron/publish Pipeline was successful
2026-02-12 18:32:36 +03:00
haxala1r
81dfc07867
compiler: added my first attempt at a scope analysis pass
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/publish Pipeline was successful
ci/woodpecker/cron/debian Pipeline was successful
ci/woodpecker/cron/fedora Pipeline was successful
ci/woodpecker/cron/nix Pipeline was successful
ci/woodpecker/cron/publish Pipeline was successful
2026-02-11 23:40:53 +03:00
haxala1r
bd6acf89e0
util: separated the monadic traverse into a utility module
2026-02-11 23:40:17 +03:00
haxala1r
36ef8f2a22
Added a license
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/publish Pipeline was successful
ci/woodpecker/cron/nix Pipeline was successful
ci/woodpecker/cron/fedora Pipeline was successful
ci/woodpecker/cron/debian Pipeline was successful
ci/woodpecker/cron/publish Pipeline was successful
2026-02-10 21:36:49 +03:00
haxala1r
3a7f3971ba
ci: update publish.yaml
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/publish Pipeline was successful
ci/woodpecker/cron/debian Pipeline was successful
ci/woodpecker/cron/nix Pipeline was successful
ci/woodpecker/cron/fedora Pipeline was successful
ci/woodpecker/cron/publish Pipeline was successful
2026-02-05 23:21:01 +03:00
haxala1r
b5b0a44400
ci: update publish workflow to use ocaml 5.4
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/publish Pipeline failed
2026-02-05 23:17:45 +03:00
haxala1r
b2e3f5703b
ci: update dune-project to add menhir dependency
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/publish Pipeline failed
2026-02-05 23:12:56 +03:00
haxala1r
2d038279f2
ci: add directive in dune to generate opam file
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/publish Pipeline failed
2026-02-05 23:09:37 +03:00
haxala1r
fae7bd8077
ci: Add a woodpecker workflow to publish a nightly amd64 version
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/publish Pipeline failed
ci/woodpecker/push/nix Pipeline was successful
2026-02-05 23:05:34 +03:00
haxala1r
5e91f6e8fa
correct the design document for closure conversion
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/cron/debian Pipeline was successful
ci/woodpecker/cron/fedora Pipeline was successful
ci/woodpecker/cron/nix Pipeline was successful
2026-02-05 00:12:58 +03:00
haxala1r
7cdd4ee759
updated the design document
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
2026-02-04 22:54:53 +03:00
haxala1r
a250d96c63
core_ast: remove letrec comment
2026-02-04 21:52:16 +03:00
haxala1r
3a3bf2c674
core_ast: removed letrec. we now treat it as let + set.
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/cron/fedora Pipeline was successful
ci/woodpecker/cron/debian Pipeline was successful
ci/woodpecker/cron/nix Pipeline was successful
2026-02-02 22:36:55 +03:00
haxala1r
7402a688c7
compiler: remove unused files
2026-02-02 20:43:13 +03:00
haxala1r
ed4f49311c
syntactic_ast: unwrapped the central GADT into several related types.
...
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
core_ast: related to the above, reorganized core_ast to use the new syntactic ast
2026-02-02 20:32:15 +03:00