Some of the new microcontrollers coming out are real beasts, with PSRAM and multiple cores that run at speeds that put my first computers to shame. In the past we’ve talked about new features to take advantage of these capabilities, I’d like to bring up the idea again to see if anyone is interesting in participating in making them a reality.
Multicore support
A REPL that runs on each core, and can channel messages between cores seems imminent. FreeRTOS already has most of the components needed to achieve this. You can pin Tasks to cores and create a message queue for passing messages between cores. I’d imagine we would want to create separate memory arena for each core which with independent Garbage Collectors. This is actually a bonus, because it allows uLisp to utilize more of the PSRAM without the overhead of large mark and sweep cycles.
Package support
I’d love to see more thought going into storing uLisp on SD cards, loading the code into namespaces, and then removing it when needed. I’ve worked out most of the details, but just need to wrap it all up into something that has it’s own namespace.
Structs support
I’d love to see the ability to utilize memory more efficiently for functional programming styles that don’t need to mutate variables in place. I think we can use smart pointers with a word or byte count that works well with our existing GC.
Macros
This functionality is mostly done, I’m curious why there isn’t an #ifdef for including macros in uLisp on more performant devices.
Interrupt handling
Interrupt support seems like a big missing component for microcontrollers. Could we use streams for this? Flags? Or is this just something that always needs to be done in C, and we should create some tutorials on how to integrate them with lisp functions?
If all of these are too advanced for uLisp, should we create a separate repo for community driven advanced branches?