Left to Right Programming 🔥 Горячее 💬 Длинная дискуссия
Программа должна оставаться валидной по мере набора.
Python-списковые включения плохи: пока вы не допишете for line in text.splitlines()
, редактор не знает тип line
, не может подсказать split()
и даже не понимает, существует ли переменная.
В Rust text.lines().map(|line| line.split_whitespace())
строится слева-направо: сразу после line.
доступны методы, и код всё время «жив».
Принцип progressive disclosure: сложность появляется ровно тогда, когда нужна. В C функции для FILE*
начинаются на f
; вводишь f
и видишь сотни вариантов, не понимая, какой подходит. В идеале file.
показал бы read
, close
и т. д. прямо во время набора.
Python и JS:
map(len, text.split())
— неясно, как называется длина (len
, length
, size
?).
text.split(" ").map(w => w.length)
— length
и map
подсказываются сразу после точки.
С ростом логики читаемость падает:
len(list(filter(lambda line: all([abs(x) >= 1 and abs(x) <= 3 for x in line]) ...
Комментарии (255)
- Обсуждение крутится вокруг того, что синтаксис многих языков (Python, SQL, JS) не «слева-направо», поэтому автодополнение работает плохо.
- Участники жалуются на право-левый порядок вложенных вызовов
f(g(h(x)))
, хвалят pipe-оператор|>
из F#, Rust, OCaml и ждут его в JS/TS. - Кто-то считает проблему надуманной: мол, надо просто знать язык, а не подстраиваться под автокопмлит.
- Другие предлагают IDE-шаблоны, структурное редактирование или даже использование LLM, чтобы «писать, не думая о синтаксисе».
- В целом спор свёлся к вопросу: оптимизировать ли язык и среду под скорость написания или под читаемость и понимание кода.