Pipeline style

A very common idiom is "pipeline code". The simplest code in a stack language is where each word takes a single value from the stack and leaves a new value there; such words can be chained together much like commands in the Unix shell. For example, here is some Factor code:

"/etc/passwd" ascii file-lines
[ "#" head? not ] filter
[ ":" split first ] map

This is very similar to the following Unix shell script:

cat /etc/passwd | grep -v '^#' | sed -e 's/:.*//'

However of course Factor is more expressive and has a simpler syntax.

A variation on pipeline code can be found in the UI framework. Here, we are building a tree of gadgets, so it is not quite a pipeline: we create child gadgets, build them up, then add them to the parent using add-gadget ( parent child -- parent ). Here is an elaborate example:

<pile>
    "Hello" <label> add-gadget
    "Click me" [ drop beep ] <bevel-button> add-gadget
    <shelf>
        "A" <label>
            red solid >>interior
        add-gadget
        "B" <label>
            green solid >>interior
        add-gadget
        "C" <label>
            green solid >>interior
        add-gadget
    add-gadget
5 <border>
    black solid >>boundary
"Test" open-window

Notice it reads almost like a declarative description, but really it is just stack code.

This revision created on Fri, 2 Jan 2009 22:06:30 by slava