Comments (5)
init_pointee_move
treats the input as "uninit", which means it won't call the destructor on whatever data is in the pointer already, whereas move_pointee_into
will call the destructor of the old data before the move.
from mojo.
@bethebunny So s.move_pointee_into(t)
is t.init_pointee_move(s.take_pointee())
?
from mojo.
s.move_pointee_into(t)
should be equivalent to
_ = t.take_pointee()
t.init_pointee_move(s.take_pointee())
from mojo.
But the doctoring of move_pointee_into
says that dst
is assumed to be uninitialised, so it doesn't run the destructor.
If it calls the destructor of the old data, why can't we write
t[] = s[]^
from mojo.
The really difference seems to be that t.init_pointee_move(s.take_pointee())
calls moveinit
twice.
struct S:
var data: Float64
fn __init__(inout self, data: Float64):
self.data = data
fn __copyinit__(inout self, other: S):
print(" copyinit", other.data)
self.data = other.data
fn __moveinit__(inout self, owned other: S):
print(" moveinit", other.data)
self.data = other.data
fn __del__(owned self):
print(" del", self.data)
fn move_pointee_into():
print("move_pointee_into:")
var v = S(10)
var t = UnsafePointer[S].alloc(1)
var s = UnsafePointer.address_of(v)
s.move_pointee_into(t)
print()
_ = v
fn init_pointee_move():
print("init_pointee_move:")
var v = S(20)
var t = UnsafePointer[S].alloc(1)
var s = UnsafePointer.address_of(v)
t.init_pointee_move(s.take_pointee())
print()
_ = v
fn main():
move_pointee_into()
print()
init_pointee_move()
Result:
move_pointee_into:
moveinit 10.0
del 10.0
init_pointee_move:
moveinit 20.0
moveinit 20.0
del 20.0
from mojo.
Related Issues (20)
- [BUG] `atof` returns a wrong result for too big or too small exponents
- [BUG] Error encountered on update nightly/mojo HOT 3
- [BUG] Mojo compiler pretty prints `ImmutableStaticLifetime` incorrectly
- [Docs] HOT 1
- [Magic CLI] magic telemetry cannot find config
- [Magic CLI] error starting magic shell as notebook cell script (%%mojo) HOT 2
- [BUG] Tensor reshape only compiles when inlined
- [Feature Request] Add support for recursive `@parameter` closures HOT 2
- [BUG] Consume value with `_ = x^` HOT 4
- [BUG] `cannot implicitly convert 'K' value to 'K' in assignment` in condicional conformance
- [BUG] Calling functions stored in aliased collection segfaults
- [BUG] Inferring types from a function signature
- [BUG] Error inferring the right method when invoking conditional conformance with trait inheritance HOT 1
- [BUG] (nightly) Raising init causing `use of uninitialized variable` HOT 1
- [BUG] b64decode does not handle whitespaces HOT 3
- [BUG] Max Graph can't concat two custom ops
- [BUG] Accessing aliased list of lists gives nonsense HOT 2
- [BUG] mojo package generates .mojopkg files that cannot be used by the VSCode nightly LSP HOT 2
- The learner's path to get started with mojo is confusing and (maybe?) broken HOT 2
- [BUG] Can't use SIMD data types as keys for Dicts HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from mojo.