TGViewer
DON'T STOP AND CODE DON'T STOP AND CODE @start_py · 100 subscribers
Post #640 89
[Вы знакомы с Expression Problem?]

Правда, чем больше я работаю, чем больше я погружаюсь в тему программирования, тем больше пониманию сколько всего. Например, сегодня узнал о том, что обыденная проблема безопасного и удобного внесения изменений в готовый код имеет классическое определение и решение. Тема оказалась крайне интересной.

"Expression Problem показывает фундаментальное ограничение как объектно-ориентированных, так и функциональных языков: ни один из них не поддерживает удобное расширение как по оси типов, так и по оси операций."
-- Philip Wadler, 12 November 1998

Обратите внимание на год.

Оказывается Expression Problem - это лакмусовая бумажка выразительности языка. Идеальный язык должен позволять:
- добавить новый тип данных, не трогая старые функции
- добавить новую операцию, не трогая старые классы

Если язык программирования имеет решение, то его называют expressive (выразительным).
В Python есть решение - структурная типизация через Protocol (добавили в 2017 году в версии 3.8).

Например, вот мой путь:
1️) ООП с наследованием (ABC) - легко добавлять новые типы, но операции сложно
2️) ФП с матчингом - легко добавлять новые функции, но типы сложно
3️) Protocols - золотая середина в Python

Если погрузиться в "PEP 544 – Protocols: Structural subtyping (static duck typing)", то можно сделать вывод что это по сути официальное решение Expression Problem в Python.

Лайфхак:
Когда проектируешь систему, нужно спросить себя: "Что вероятнее будет расширяться - типы данных или операции над ними?" Исходя из ответа, нужно выбирать один подход из перечисленных выше.

Кажется, в современном быстроменяющемся мире, при проектировании систем нужно предпочтение отдавать Protocols. Так система должна легко поддерживать "удобное расширение как по оси типов, так и по оси операций".
  • 👀 3
  • 👍 2
More from @start_py
  1. Sep 25, 2026[Скорость моделей] Стал обращать исключительное внимание в работе на скорость ответа ии-мо…
  2. Aug 16, 2026[Санкции] Failed to load URL https://www.nvidia.com/ru-ru/geforce/billboards/displaydriver…
  3. Jul 29, 2026[Будни вайбкодера. Или как ИИ не мог выключить проверку SSL] Сейчас была очередная забавна…
  4. Jul 20, 2026[Про впн, прокси и первый опыт с живыми пользователями] Этой весной, когда начались массов…
  5. Jul 7, 2026Наше время ограничено. "На экзистенциальном уровне :) у нас не так уж и много времени на э…
  6. Jul 2, 2026"если вам нужно прочитать исходный код функции, чтобы понять, что она делает (в частности,…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →