Stories
Slash Boxes
Comments
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
 Full
 Abbreviated
 Hidden
More | Login | Reply
Loading... please wait.
  • The only real (non car-based :) example I can remember seeing for static class variables is reference counting:

    public class MyBaseObject {

        public static int REFCOUNT;

        public MyBaseObject() {
            REFCOUNT++;
        }
    }

    public class DerivedObject extends MyBaseObject {

        public DerivedObject() {
            super();
        }

        public static void main(String[] args) {
            for (int i = 0 ; i
    • In other words, my Car example, but without the Car. :)

      Is it common to want to implement reference counting in this way? What's the use case?

      • Doh. Yes, I didn't think that through really, did I?

        I have never used static class variables in Java. They seem like a subtle disaster waiting to happen. Also I try (where possible) to program without side-effects.

        Moreover, Java doesn't have proper destructors, so you can't decrease the count in any reasonable way.

        Is there perhaps a more reasonable use case for a kind of object-level namespace? It would be horrible in practice, but something like public static HashMap MyBaseObject.OBJECT_VARIABLES...

        Sounds
  • class Car { # this is Perl 6 code
        my $cars-produced = 0;
        has $.cars-produced := $cars-produced;

        submethod BUILD() {
            ++$cars-produced;
        }
    }

    So you have a shared counter, an alias of it per instance (which seems redundant, but makes it work*... perhaps by some means one could persuade the compiler to compile it away, as it's constant as a reference), and accessors for inheriting.

    Rakudo doesn't like the 'has $.x := $y' construct (ye

    • I was reminded by TimToady that something very much like this is already possible class Car { my $.cars-produced = 0; #`[...] }. It's spec'd and everything, in S12:731. Hope that helps. :)

      • Oh, yes, that's exactly the thing.

        I think has $.x := $y would have its uses, too; i'll poke around (in spec, code, #perl6) to see what might block/enable it.

  • I found this interesting post where Gilad Bracha rants about static state [blogspot.com] in objects. Makes me think Perl 6, for all the static state it hasn't, maybe has a bit too much anyway. :)

  • I keep finding other blog posts about static state. This post [plover.com] by Mark Dominus warns against keeping object information outside of the object. He does so in an almost embarrassingly reasonable way. Though he doesn't mention static state, he does argue against global state, of which static state is merely a milder version.