[DGD] LWO

bart at wotf.org bart at wotf.org
Thu Aug 13 11:11:13 CEST 2015


I use them first of all for creating things 
like bigmap and bigarray implementations 
(ie, mappings and arrays which scale beyond 
16384 elements) and for example to create a 
kind of interface/session objects. 

You may have seen some comments from me 
regarding a rdbm and sql implementation. 
Besides sql, this also has a native lpc 
interface that uses LWOs.

Maybe you are familiar with perl and the way 
you can bind a mapping to a bdb or gnudb. 
What my code does with help of LWOs is allow 
lpc code to access databases is if they are 
mappings or as objects, depending on what 
you want to do and on preference.

For example, there is a database logdb with 
a table logcfg. Logcfg has a column 'keep' 
which tells how long a certain message 
should be kept in the lig.

Modifying the 'keep' for a log can be done 
in a few ways:

run_sql( "use logdb; update syslog set ( 
keep = 3600 ) where log = logname;" );

Or:

open_database("logdb")->set_value("syslog", 
"keep", 3600 );

Or:

open_database("logdb")["syslog"]["keep"]
["logname"] = 3600;

The 3rd variation uses LWOs with operator 
overloading

Bart
On Wed, 12 Aug 2015 19:08:59 -0500, Blain 
wrote
> Bart:  What are some practical 
applications for operator overloading?
> On Aug 9, 2015 8:00 AM, <bart at wotf.org> 
wrote:
> 
> > I noticed 2 bugs in the code I posted 
(not handling ranges properly when
> > beginning or end not specified, and not 
handling the difference between 0
> > and
> > nil in the | operator), both fixed.
> >
> > As to open-sourced libraries for DGD, 
Iirc Shentino is maintaining an
> > open-sourced lib (or 2 actually?), and 
there is klib of course (also
> > maintained by Shentino nowadays if I'm 
not mistaken), and Felix maintains a
> > lib called cloudlib, which is very 
interesting codewise, but seems rather
> > incomplete for as far as building a mud 
goes.
> >
> > Every so often, when people ask about 
things, I'll post some examples (if
> > possible as public domain, so they can 
be used by everyone without
> > licensing
> > concerns).
> >
> > Beyond the things mentioned above, I 
don't think there is anything
> > open-sourced that runs on modern 
versions of DGD and can take advantage of
> > at
> > least some of the features that make DGD 
special.
> >
> > In general, you'll have to make some 
choices. Current Gurbalib seems to
> > aim at
> > simplifying the codebase to provide 
something that is relatively easy to
> > understand and use, but at the expense 
of some of the complexity,
> > infrastructure and restrictions needed 
to run DGD as a persistent server
> > and
> > for example support for a verb based 
user interface.
> >
> > This doesn't have to be an issue if you 
want to use it for a classic lpmud
> > style lib for example, but may be 
limiting if you aim for a 'new'
> > persistent
> > mud with a persistent world and managed 
in-game economy.
> >
> > Picking between those 2 styles or 
consciously deciding on a mix (and on
> > solutions to the various conflicts this 
causes) is very important, doing so
> > much later on will involve lots and lots 
and lots of extra work, and
> > depending
> > on the size of your codebase, may not 
even be a feasable option (trust me
> > on
> > this one, I went this way with Way of 
the Force, and it took about half a
> > decade to find and address the more 
prominent issues).
> >
> > At any rate, Gurbalib is your best 
starting point when wanting to run
> > something lpmud alike, and has an active 
maintainer and a small but active
> > community, but its not a very good 
starting point if you aim at something
> > that
> > isn't very lpmud like.
> >
> > Bart.
> >
> > On Sat, 08 Aug 2015 19:38:53 -0400, 
Littlefield, Tyler wrote
> > > -----BEGIN PGP SIGNED MESSAGE-----
> > > Hash: SHA1
> > >
> > > This is cool, thanks. I got what I was 
trying for working today.
> > > Are there many different systems open-
sourced in LPC? I'd like to see
> > > how things are done, most especially 
with DGD.
> > >
> > > Thanks,
> > > On 8/8/2015 10:19 AM, bart at wotf.org 
wrote:
> > > > An example LWO can be found at:
> > > >
> > > > 
http://wotf.org/downloads/lpc/kvset.c
> > > >
> > > > It should work on gurbalib directly 
(and with little or no
> > > > modification on about every other 
lib).
> > > >
> > > > It implements a variation on the 
mapping type that adds support for
> > > > &, | and - operators.
> > > >
> > > > Bart
> > > >
> > > > On Sat, 8 Aug 2015 12:05:05 +0200, 
bart wrote
> > > >> 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
> > > > 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
> > >
> > > >>> 
____________________________________________
> > > >>> 
https://mail.dworkin.nl/mailman/listinfo/dgd
> > > >>
> > > >> -- 
http://www.flickr.com/photos/mrobjective/
> > > >> http://www.om-d.org/
> > > >>
> > > >> 
____________________________________________
> > > >> 
https://mail.dworkin.nl/mailman/listinfo/dgd
> > > >
> > > >
> > > > -- 
http://www.flickr.com/photos/mrobjective/ 
http://www.om-d.org/
> > > >
> > > > 
____________________________________________
> > > > 
https://mail.dworkin.nl/mailman/listinfo/dgd
> > > >
> > >
> > > - --
> > > Take care,
> > > Ty
> > > twitter: @sorressean
> > > web:http://tysdomain.com
> > > pubkey: 
http://tysdomain.com/files/pubkey.asc
> > > -----BEGIN PGP SIGNATURE-----
> > > Version: GnuPG v2
> > >
> > > 
iQEcBAEBAgAGBQJVxpMNAAoJEAdP60+BYxejo5wH/iat
nZXyhqU2+p0WbZBnXJWI
> > > 
QxOTC35kNHGfQJjd1B/+DZ+WGTeG3lrgJadDHwOu/kPs
3fEGZsHvioT0jDxQomnB
> > > 
F5aNw3/QT0XCIt0xQ4gjRFbBQ18Q9Ffd22RFriIh9y3E
XBSKXwaazx5YD172CRgH
> > > 
/jhyxfVIgtjRzs6bgtpkdyUAkivwU7dH3Xkf9AcPf71z
HwD36vmJyvQEDhvt+zjU
> > > 
7W+KG5KaO03/pPEqk+YXf4M+etMXcnMVlpZqgYkcqQNm
KW2KWa8T5AFkKG/A5Bzj
> > > 
abUmxPOT0PV7EIA5HmTEmC8m/okqFkAz4jm6VzVPchOy
5a0ZX9SL/ynbyIipsCc=
> > > =iaK9
> > > -----END PGP SIGNATURE-----
> > > 
____________________________________________
> > > 
https://mail.dworkin.nl/mailman/listinfo/dgd
> >
> >
> > --
> > 
http://www.flickr.com/photos/mrobjective/
> > http://www.om-d.org/
> >
> > 
____________________________________________
> > 
https://mail.dworkin.nl/mailman/listinfo/dgd
> 
____________________________________________
> 
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