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.

Reply via email to