While developing NativeGodotRx as a GDExtension, I learned a lot of techniques to improve this project. The changes I would want to make in a future refactors:
Disposables dispose automatically when destroyed: This is a tough one. When I developed this extension, I was unable to properly pull this off. Using the 'self' reference during NOTIFICATION_PREDELETE always results in a Null Reference. I found a trick now. Assigning a member reference and then using unreference() gives us a behavior like std::enable_shared_from_this<>. This way, it is actually possible to keep the instance usable in GDScript
Proper thread management: See corresponding issue.
WeakKeyDictionary: See corresponding issue. I see this as a bug.
Lock-Guards: I cannot see, why this is not a standard thing in GDScript. My god, it is awful to call lock() and unlock() every time we want to ensure thread-safety. Using the trick described earlier, I can now do them myself simplifying the code drastically.
ThreadManager introduced cleaning up all finished threads passively
Fixed memory leaks of ReactiveProperties/ReactiveCollections
Observable constructors now work with iterables (generators always possible now)
Fully committed to float as type for time units
Fixed inheritance madness of Subject, PeriodicScheduler and GodotSignalScheduler through redundancy (ugly but a lack of multi-inheritance has forced my hand)
While developing NativeGodotRx as a GDExtension, I learned a lot of techniques to improve this project. The changes I would want to make in a future refactors: