adopt printf
new block scoping helper

like “let … where …” in Haskell; an expression so it will return a
value, and local variable support through default args
typo: samle-line-30 => same-line-30
new yjl compiler