Memory safe and easy implies a garbage collector to me. Unfortunately, garbage collection and C libraries easy to use is at odds.
In other words: Memory safe, easy to learn, easy C-FFI? Pick two.
In other words: Memory safe, easy to learn, easy C-FFI? Pick two.
Interestingly this approach is also somewhat popular in Rust to workaround borrow checker restrictions.
For instance see:
https://floooh.github.io/2018/06/17/handles-vs-pointers.html