[DGD] LWO
bart at wotf.org
bart at wotf.org
Sat Aug 8 12:05:05 CEST 2015
Creating an LWO is easy:
object src;
object lwo;
src = find_object( "/path/to/some/object" );
lwo = new_object( src );
lwo will be the lightweight object, src is a blueprint object used as a
template for the lwo.
Note that an object does not have to do anything special to be usable as lwo,
but there are some differences between a clone of a blueprint object and an lwo:
Very important: lightweight objects do not get destructed explicitly, they
simply are forgotten when nothing references them anymore. This means (very
important if you are trying to do any kind of object management or data
storage on destruct) there will be NO calls to the lwo informing it that it is
going to be destructed. This is a simple fact and not something that you can
code your way around, it is a consequence of the nature of LWOs.
LWOs can *NOT* have call_outs. Again, this is a consequence of the nature of
LWOs. Do not use LWOs for code that must use call_outs or move the call_outs
to some other bit of code not in an LWO.
LWOs are kept in the storage space of the object that created them (did the
call to new_object()). ALL the things that apply to arrays and mappings that
are passed by reference from one object to another also apply to LWOs. This
means they will only be shared until the end of the execution round, after
which a copy will be made and both objects involved will end up having their
own copy of the LWO. For example, you might want to keep track of some
centralized counter for something. You decide to stick this in some object,
and let everything that needs this counter call the object. So far so good,
and this works with blueprints (as you can simply use find_obect() and are
guaranteed to end up at that blueprint) or clones (you have to pass the object
reference to code that needs it). Doing this with an LWO however may or may
not work depending on exactly how you implement this:
- pass lwo reference to other object, which uses it to reference the counter
and then forgets it, all in the same execution round: this works
- pass lwo reference to another object which stores it and then later on (as
the result of a call_out or other user action) tries to use it: this will not
work as expected as the LWO is no longer the one that was stored originally,
it is a copy of it.
Also important, LWOs support features that regular clones do not, especially
operator overloading (see the git commit log for dgd, look for the keyword
operator).
Anyway, there are things for which LWOs are an absolutely brilliant solution,
things like building advanced data types (for example mappings that can
contain a lot more then 16384 key/value pairs), but also things for which they
are a very cumbersome solution that is best be avoided.
So.. creating them is easy, making good use of them however requires some more
careful thought really, they are not 'just an alternative for clones', rather,
they are something totally different then clones, and generally things that
need clones cannot easily be done with LWOs and the other way around.
Bart.
On Sat, 08 Aug 2015 03:33:39 -0400, Littlefield, Tyler wrote
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Hello all:
> I've been looking for examples. Is there a syntax for creating an
> LWO? Any help appreciated. Thanks, - -- Take care, Ty twitter: @sorressean
> web:http://tysdomain.com
> pubkey: http://tysdomain.com/files/pubkey.asc
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v2
>
> iQEcBAEBAgAGBQJVxbDTAAoJEAdP60+BYxejpxwH/0DDz+OVTixfxpSa/IFzohUP
> Y4XoPZxLsk1VQE2HhI1PBBau0tKDezpEGbhYYaM/EvseQ3OuwmkyNwUQlStpCyDd
> HBManyxOSK0u6mOWkkImtXfCQEoovmzPW1CN6+9rzqYyMlYk0vq+I7E1y9AnoNTa
> KyDTuIMtgDuNx0IBVBv/ilIegNtToaUjlYufK9by5vOjKfrit18CiT49NV/xdulV
> u2XmdP3RGaL0UkWnORWT/pBzSksrq250Xqz5QJDfphugR0K/BL8qI0RyfDG/9edK
> XZ7VHuVSiCJZYVfh8eFVeJ5KfUqVqFMMemMG7446+xf0NtMRcwJkkOjraSSky/M=
> =mV3K
> -----END PGP SIGNATURE-----
> ____________________________________________
> https://mail.dworkin.nl/mailman/listinfo/dgd
--
http://www.flickr.com/photos/mrobjective/
http://www.om-d.org/
More information about the DGD
mailing list