Hi all,

I just wanted to provide a nice data point. Lately I've been writing
code with very little stack shuffling at all. Using the cleave
combinators, and just plan common sense eliminates most shufflers.

Right now I'm working on a new code generator for the compiler:

slava-pestovs-macbook-pro:factor slava$ egrep
'(tuck|dupd|swapd|rot|pick|3dup)' `find work/compiler -name \*.factor`
work/compiler/cfg/builder/builder.factor:        dupd successors>> push
work/compiler/cfg/cfg.factor:    3dup nip at* [ -rot set-at drop ] [
2drop 2drop ] if ; inline
work/compiler/cfg/vn/liveness/liveness.factor:    dup vreg>vn tuck vn>vreg =
work/compiler/machine/simplifier/simplifier.factor:            tuck
useless-branch?

Only 4 occurrences of the hairy shufflers! This is despite there being
more than 1500 lines of code here:

slava-pestovs-macbook-pro:factor slava$ wc `find work/compiler -name \*.factor`
     269    1150    7046 work/compiler/cfg/builder/builder.factor
      47     186    1192 work/compiler/cfg/cfg.factor
      56     294    1698 work/compiler/cfg/elaboration/elaboration.factor
       9      37     264 work/compiler/cfg/kill-nops/kill-nops.factor
      12      43     339 work/compiler/cfg/predecessors/predecessors.factor
      25      61     653 work/compiler/cfg/simplifier/simplifier.factor
      36     176    1052 work/compiler/cfg/stack/height/height.factor
      66     382    2304 work/compiler/cfg/stack/liveness/liveness.factor
      17      72     510 work/compiler/cfg/vn/constant-fold/constant-fold.factor
      64     285    1711 work/compiler/cfg/vn/expressions/expressions.factor
      37     157     875 work/compiler/cfg/vn/graph/graph.factor
      29     169    1108 work/compiler/cfg/vn/idempotent/idempotent.factor
      37     193    1092 work/compiler/cfg/vn/liveness/liveness.factor
      46     146     985 work/compiler/cfg/vn/propagate/propagate.factor
     215    1169    5836 work/compiler/cfg/vn/simplify/simplify.factor
      30     119     941 work/compiler/cfg/vn/vn.factor
      26      99     724 work/compiler/cfg/write-barrier/write-barrier.factor
      21      89     544 work/compiler/lvops/lvops.factor
      50     193    1367 work/compiler/machine/builder/builder.factor
      39     130    1059 work/compiler/machine/debug/debug.factor
      18      85     536 work/compiler/machine/simplifier/simplifier.factor
     190     764    4359 work/compiler/vops/builder/builder.factor
     169     725    4067 work/compiler/vops/vops.factor
    1508    6724   40262 total

We see a similar pattern with the web framework. Whereas my older code
had a lot more shufflers. Partly because we didn't have the nice
language features that do now, and partly because I wasn't as good of
a programmer back then as I am now.

I think once we figure out more idioms and document them, Factor will
become much easier for beginners to learn and program in.

Slava

-------------------------------------------------------------------------
Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW!
Studies have shown that voting for your favorite open source project,
along with a healthy diet, reduces your potential for chronic lameness
and boredom. Vote Now at http://www.sourceforge.net/community/cca08
_______________________________________________
Factor-talk mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/factor-talk

Reply via email to