The point about JavaScript's 100 + [11,22,33] producing '10011,22,33' really drives this home. We've collectively normalized arithmetic that silently coerces to string concatenation, but treat rank polymorphism as exotic.
The Lil design decision to reshape the right argument instead of erroring on mismatched lengths is interesting. It's a bold trade — you gain those clean inflection-point and cartesian product idioms, but you lose the safety net of catching shape mismatches early. NumPy's broadcasting sits somewhere in between: it'll stretch dimensions of size 1 but still raises on genuinely incompatible shapes like (3,) + (4,).
Curious whether in practice the "no runtime errors" constraint in Lil leads to silent bugs from accidental length mismatches, or whether the kinds of programs people write in Lil tend to make that a non-issue.
DeepMarket_live•1h ago