Follow

How do you design a CPU for functional languages like Haskell?

Use a stackmachine where the function referenced by each head is popped with a given number of arguments copying the referenced function body into its place on the stack with argument references replaced & relative references resolved.

Opcodes are added for arithmatic, with ints shuffling the stack to ensure they're fully resolved before the arithmatic.

This has been prototyped on FPGAs!

1/2!

There has been refinements made to this "Reduceron" design to optimize pattern matching, said arithmatic, & more! But that's the basic concept.

And yes, there's caching of lazily-computed values & a builtin (stop-the-world) GC.

I imagine that if programs get large enough to require prefetching, the stack would make that trivial! Though compiler optimizations would still be useful to achieve good memory locality.

cs.york.ac.uk/fp/reduceron/

2/2 Any Lispers want to chime in?

@alcinnz@floss.social you know what, i'm just going to add another field to my profile linking it 🤷‍♂️

Sign in to participate in the conversation
FLOSS.social

For people who care about, support, or build Free, Libre, and Open Source Software (FLOSS).