Commit Graph

103 Commits

Author SHA1 Message Date
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
haxala1r bd907fe69a minor changes
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
2026-02-02 19:53:08 +03:00
haxala1r d7729571ea core_ast: modify the core ast to use unary functions
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/nix Pipeline was successful
ci/woodpecker/cron/fedora Pipeline was successful
2026-01-16 22:34:35 +03:00
haxala1r 6e8e345388 ci: change the debian and fedora workflows to not ask for user input
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/nix Pipeline was successful
2026-01-16 13:15:09 +03:00
haxala1r 78c2e4c335 ci: move nixos build, rename debian build
ci/woodpecker/push/nix Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/cron/fedora Pipeline failed
ci/woodpecker/cron/debian Pipeline was successful
ci/woodpecker/cron/nix Pipeline was successful
2026-01-14 21:49:33 +03:00
haxala1r aeb8e89526 ci: rename the debian workflow, add fedora workflow
ci/woodpecker/push/debian Pipeline was successful
ci/woodpecker/push/build-nix Pipeline was successful
ci/woodpecker/push/fedora Pipeline was successful
2026-01-14 21:46:42 +03:00
haxala1r 12b347de38 general: removed containers dependency
ci/woodpecker/push/build Pipeline was successful
ci/woodpecker/push/build-nix Pipeline was successful
2026-01-14 21:40:21 +03:00
haxala1r 67bd37eaa2 ci: add menhir to the debian build workflow
ci/woodpecker/push/build Pipeline was successful
ci/woodpecker/push/build-nix Pipeline was successful
2026-01-14 21:22:25 +03:00
haxala1r 5b6ed1beb5 ci: fix findlib package name
ci/woodpecker/push/build Pipeline failed
ci/woodpecker/push/build-nix Pipeline was successful
2026-01-14 12:46:56 +03:00
haxala1r d0f9483aaa ci: fix build.yaml
ci/woodpecker/push/build Pipeline failed
ci/woodpecker/push/build-nix Pipeline was successful
2026-01-14 12:45:18 +03:00
haxala1r e60b447198 ci: added workflow for building on debian, moved nix build to another file
ci/woodpecker/push/build-nix Pipeline was successful
2026-01-14 12:43:54 +03:00
haxala1r 11625c88c6 core_ast: add of_sexpr
ci/woodpecker/push/build Pipeline was successful
2026-01-14 12:28:22 +03:00
haxala1r d41d8e5fbe core_ast: add initial draft for the core ast, and a conversion function from the syntactic ast
ci/woodpecker/push/build Pipeline was successful
ci/woodpecker/cron/build Pipeline was successful
2026-01-07 20:02:10 +03:00