Skip to content

Add Hare implementation #711

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 22 commits into from
May 5, 2025
Merged

Add Hare implementation #711

merged 22 commits into from
May 5, 2025

Conversation

einsiedlerspiel
Copy link
Contributor

@einsiedlerspiel einsiedlerspiel commented Apr 9, 2025

mal implemented in pure hare https://harelang.org/ using only its standard library

There's no GC, I try to clean up any non persistent allocations but really for the most part I'm just leaking all the memory.

Metadata implementation is incomplete and only implemented for user defined functions and hashmaps, for everything else I used native types, adding meta data would probably require completely reworking that.

There's lots of things to clean up and add checks for, but I won't get to that any time soon so I thought I'll just send the PR now, before I'll never do it.

Had lot's of fun with the challenge, thanks for creating it!

Pull request requirements:

  • Commits are well written and well organized.
  • Commits for a specific implementation should be prefixed with
    the implementation name.
  • Github Actions CI passes all checks (including self-host)

Additional requirements if you are adding a new implementation (see FAQ for details):

  • Follow incremental structure (no common eval code)
  • Add impls/<IMPL>/Dockerfile
  • Add impls/<IMPL>/Makefile
  • Update IMPLS.yml
  • Update Makefile.impls
  • Update README.md

@einsiedlerspiel einsiedlerspiel force-pushed the hare branch 3 times, most recently from d2cec1c to c65605d Compare April 9, 2025 19:51
@einsiedlerspiel einsiedlerspiel force-pushed the hare branch 2 times, most recently from 36dcab9 to 2aafd03 Compare April 15, 2025 18:20
@einsiedlerspiel einsiedlerspiel force-pushed the hare branch 2 times, most recently from 7b109ee to fce5149 Compare April 18, 2025 18:30
@einsiedlerspiel
Copy link
Contributor Author

Possible remaining TODOs:

  • GC during evaluation
  • some performance tweaks

the big slowdown (in the perf test) is not the GC itself (doesn't kick in during script evaluation rn), but that I'm now keeping track of allocated symbols in a dynamic array instead of a hashmap, commenting out the iteration in make_symbol gives almost all of the previous performance back.

Symbols defined in the hare source are now borrowed from the stack.
This should make it easier to replace the hashmap implementation.
The new hashmap should be easier to copy and iterate over.
This fixes the performance issues with symbol creation.
@kanaka kanaka merged commit 72a807a into kanaka:master May 5, 2025
4 checks passed
@kanaka
Copy link
Owner

kanaka commented May 5, 2025

Looks good. Merged! I've updated the README counts. Hare bumps the implementation language count to 89. 🎉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants