[Перевод] Выразительность против разрешимости: почему «мощные» системы тяжело анализировать
В программировании мы привыкли торговаться временем против памяти, но есть ещё один, менее очевидный, компромисс — между тем, что система в принципе умеет выражать, и тем, что о ней потом вообще можно строго сказать. Машины Тьюринга, PDA и DFA, Rust и Python, SAT и SMT, системы типов, макросы и метапрограммирование — всё это разные точки в одной и той же решётке «выразительность против разрешимости», просто по разным осям.В статье разберемся, почему достаточно «мощные» модели и языки неизбежно становятся плохо анализируемыми, почему это не линейный спектр, а набор пересекающихся измерений, и как этот компромисс проступает в очень практичных вещах — от систем типов и статанализа до архитектурных решений в реальных проектах. Читать разбор