Why Sponsor Oils? | blog | oilshell.org
Yesterday I wrote about combining Shell, Awk, and Make. Today we show the a program written in each language, showing their similar ALGOL-like features:
stdout
)The programs do the same thing, but their syntax is wildly different. Although I know the languages, I still consulted Google several times for each example.
f() {
echo "hello $1";
}
if test -n "$NAME"; then
f $NAME
else
for i in $(seq 3); do
f $i
done
fi
function f(name) {
print "hello " name
}
BEGIN {
if (ENVIRON["NAME"]) {
f(ENVIRON["NAME"])
} else {
for (i = 1; i <= 3; ++i) {
f(i)
}
}
}
define f
echo hello $(1)
endef
default:
ifdef NAME
$(call f,$(NAME))
else
$(foreach i,1 2 3,$(call f,$i))
endif
The programs have the same output when run with NAME
unset:
$ sh demo/hello-func.sh hello 1 hello 2 hello 3
$ awk -f demo/hello-func.awk </dev/null hello 1 hello 2 hello 3
$ make --quiet -f demo/hello-func.mk hello 1 hello 2 hello 3
And with NAME
set:
$ NAME=world sh demo/hello-func.sh hello world
$ NAME=world awk -f demo/hello-func.awk </dev/null hello world
$ NAME=world make --quiet -f demo/hello-func.mk hello world
I've written about eight projects that oil can parse, the last one being git. It now parses a dozen more without error or with only known problems like the undecidable parse.
So it's time to release the parser -- I hope to do that in the next week or so. Then I can start writing about the Oil language . I introduced the idea of combining Shell, Awk, and Make in the last two posts so I can talk about their influence on its design.