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