I recently wrote an AWK interpreter in Go: https://github.com/benhoyt/goawk

It's a pretty simple implementation: hand-rolled lexer, recursive-descent 
parser, and tree-walk interpreter. It's pretty complete according to the 
POSIX spec, and it passes the AWK ("one true awk") test suite as well as my 
own unit tests.

In some quick tests I ran, I/O speed is on a par or better than AWK but the 
interpreter itself is quite slow -- about 5x slower for a lot of things. I 
hope to add some proper benchmarks soon. I have a pretty good of why and 
how to fix it: variable lookup and assignment is slow, and I'm planning to 
fix by resolving more things at parse time.

One thing that's a bit funky about AWK is its type handling: string values 
can be real strings or "numeric strings" (numbers that came from user 
input). I'm currently passing the "value" struct (see interp/value.go) 
around by value. I still need to test if that's a good idea 
performance-wise or not.

I'd love to hear any comments, bug reports, or -- especially -- code 
reviews.

-Ben

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to