Open
Description
Amidts the gigantic refactor that brough linear types and backpack to the engine, some corners were cut (making the underling monad the Linear IO Monad was already a huge endeavour).
The engine is still somewhat broken after that giant refactor (e.g. textures still don't work), and some bad decisions were made (linear-apecs
, leaking linear types out of the implementation onto the user)
Great things have happened, however. Especially the modularity of it all (because of backpack)
Now there are a couple of independent packages that depend on each other
ghengin-core
, where the ideal "core" of the engine, with which anything in the engine can be expressed (albeit less easily) (this is in light of GHC.Core). This module is abstract in the implementation of the renderer using backpack.ghengin-vulkan
, is the renderer implementation using vulkanghengin
, which depends onghengin-core
and instances it withghengin-vulkan
(that's the beauty of backpack)- some others like
ghengin-core-indep
which are depended on both byghengin-core
andghengin-vulkan
(since having ghengin-vulkan depend on ghengin-core doesn't yet work)
Currently,
ghengin-core
is unsafe-free! we don't useUnsafe.toLinear
anywhereghengin-core-indep
exposes some safe functions which use unsafe.toLinear under the hood -- those are part of our trusted baseghengin-vulkan
still uses Unsafe.toLinear extensively where it shouldn't -- it was required for me to see the refactor to the end, but I think there are bugs lurking (especially wrt reference-counted things, the wrong handling of which causes big problems)
Metadata
Metadata
Assignees
Labels
No labels