Looks interested! But I find the function args syntax very confusing:
greet =: user msg
console log('hello #{user} #{msg}')
You're using whitespace as a message separator AND as an argument separator.Also, I don't think it is possible to implement lazy arg eval (opt-in callee evaluated messages) in a VM. That's why IO is an ast walking interpreter.
Good luck!