constructor/destructor - Javascript

This is a discussion on constructor/destructor - Javascript ; in a script (a simplified L-System) i do have objects constructing other (children) objects by : this.createChild=function(){ return new Ant(...); } all of the children finished their job before the parent one then, i wonder how to destroy (nullify?) those ...

+ Reply to Thread
Results 1 to 4 of 4

constructor/destructor

  1. Default constructor/destructor


    in a script (a simplified L-System) i do have objects constructing other
    (children) objects by :
    this.createChild=function(){
    return new Ant(...);
    }

    all of the children finished their job before the parent one then, i
    wonder how to destroy (nullify?) those no more usefull objects.

    saying 'o' is one of this new object i want to "destroy" it, is it
    siffuciant to do :

    o=null;

    ???

    even, is it usefull (freeing memory?)

    notice, by construction all of the children of a given parent, finished
    them job before the parent (the destruction could only be done from the
    parent, from where the child is named-identified).
    --
    Une Bévue

  2. Default Re: constructor/destructor

    unbewusst.sein@weltanschauung.com.invalid (Une Bévue) writes:

    > in a script (a simplified L-System) i do have objects constructing other
    > (children) objects by :
    > this.createChild=function(){
    > return new Ant(...);
    > }
    >
    > all of the children finished their job before the parent one then, i
    > wonder how to destroy (nullify?) those no more usefull objects.
    >
    > saying 'o' is one of this new object i want to "destroy" it, is it
    > siffuciant to do :
    >
    > o=null;
    >
    > ???


    Depends on how you define "sufficient". The emacscript spec does not
    define any garbabage collection mechanism, but its pretty obvious that
    any sane and efficient mechanism will only collect unreachable
    objects. IOW, you need to "clear out" any references to objects you
    want to clean up, either by explicitely assigning them some other
    value (as you do here), or by letting the references go out out scope.

    > even, is it usefull (freeing memory?)


    Depends on the implementation. In most browsers, it is, more or
    less. But you probably shouldn't rely on the memory being freed
    quickly unless you exit the page you're on and/or are running out of
    memory.

    > notice, by construction all of the children of a given parent, finished
    > them job before the parent (the destruction could only be done from the
    > parent, from where the child is named-identified).


    I don't understand what you mean. note that as I stated above there is
    no portable way to enforce destruction at all. you can only make
    object *eligible* for destruction/collection; you can't destruct or
    collect them "manually". the key to making object eligible for
    deletion is to make them unreachable.

    --
    Joost Diepenmaat | blog: http://joost.zeekat.nl/ | work: http://zeekat.nl/

  3. Default Re: constructor/destructor

    Joost Diepenmaat <joost@zeekat.nl> wrote:

    > the key to making object eligible for
    > deletion is to make them unreachable.


    OK, thanks, that's clear enough to me.
    --
    Une Bévue

  4. Default Re: constructor/destructor

    Joost Diepenmaat <joost@zeekat.nl> wrote:

    > IOW, you need to "clear out" any references to objects you
    > want to clean up, either by explicitely assigning them some other
    > value (as you do here), or by letting the references go out out scope.


    in fact, after your answer, i've tried tu nullify the reference to the
    object instance, without any effect, by doing simply :

    a_child=null;// from parent

    my object is a tree, where i create branches, when a branch (another
    instance of a tree) is finished to display (the objects are drawing
    lines over a canvas), i want to destroy it.

    the script reads a rule (a string) like that :
    "F+[-F...]+F..."

    when a parent reads a "[" symbol it creates a child which reads the
    (sub)rule to it's closing "]", it is there i want to destroy the child.

    for the time being the only way i've found to stop the child is to
    advance it's index to the end of the rule.

    line 126 :
    case ']':
    this.parent.restore(this);// returns action to the parent
    this.index=this.rule.length-1;// go to the end of rule
    break;

    line 71 :
    this.restore=function(child){
    this.penUp();
    ctx.moveTo(this.x,this.y);
    this.penDown();
    this.index=child.index+1;// continue action where the child left it
    this.actRule(this.rule);
    return this;
    };

    my testing code is at the page
    <http://thoraval.yvon.free.fr/Canvas/l_system.xhtml>


    --
    Une Bévue

+ Reply to Thread