The major issue I see here is that Mojo's proposed memory/type model is confusing to anyone that does not do system programming. They want to use manual move semantics so `fn doThing(owned a: MyType)` requires you do `doThing(myData^)` even though we annotated `owned`. Not only this but you have to either implement hooks yourself or use annotations for instance the following type is invalid Mojo: struct MyType: var x: int var y: int Run
Since there is not a `__init__` with optional `__copyInit__` or `__moveInit__` it's an uninstantiatable type. One needs to either declare those manually or use `@value` or another annotation @value struct MyType var x: int var y: int Run For a language designed for python programmers they really introduced quite complex programming patterns. In my view they really should've copied the Nim move semantics as they're very programmer friendly.