logoalt Hacker News

Partial Operator Precedence

21 points • by tosh • last Monday at 5:22 PM • 6 comments • view on HN

Comments

sheept • today at 8:23 AM

JavaScript does something similar for the exponentiation operator. This is a syntax error:

    -a ** b
Someone who learned PEMDAS in school may argue it should be equivalent to -(a * b), while a programmer may be used to unary operators binding tightest, so (-a) * b.
skrebbel • today at 8:03 AM

I never realized that languages have so many strict precedence levels because that’s easier to implement than not having them.

This here seems like a very good idea and I hope other languages in active development take note. And als JS’ Prettier, which actively removes parentheses like these.

raphlinus • today at 8:08 AM

Worth noting, WGSL does this too, and is mostly a bit stricter than Zig: `a + b & c` and `a << b & c` are errors in WGSL but accepted by Zig. (Quick: off the top of your head, how do those parse)?

I'm thinking of doing this for symbolasm also.

Scaevolus • today at 7:58 AM

C/C++ obviously have far too many precedence levels, but you can easily have a more readable tower without forcing parentheses, like Go's 5 levels: https://go.dev/ref/spec#Operator_precedence

boxed • today at 7:54 AM

I like the compromise, although I still think operator precedence in itself is evil :P Lisp kinda made the right call by mistake.

➕ show 1 reply