Типизация (0–2): 2 — полностью динамический (JS, Python, PHP); 1 — динамический с возможностью строгой типизации (TypeScript); 0.5 — статический с возможностью динамического кода (C#); 0 — полностью статический (Go, Rust, C, C++)
Память (0–1): 1 — небезопасная (C, C++); 0 — безопасная (Rust, Go, Java, C#, Python, JS, TypeScript)
Платформозависимость (0–3): 3 — сильно привязан к платформе (C#/.NET Windows); 2 — оптимизирован под платформу (Swift/Apple); 1 — частично оптимизирован, работает на других (Objective-C/Linux); 0 — полностью кроссплатформенный (Go, Rust, JS)
Компиляция в другой язык (0–0.5): 0.5 — требует компиляцию в другой язык (TypeScript → JS); 0 — исполняется напрямую (C, Go, Python)
Обработка ошибок (0–2): 2 — ошибки можно игнорировать (JS, C++); 1 — частично обязательна (Java); 0 — ошибки обязательны (Go, Rust, Ada)
Компактность / простота (0–3): 0 — очень компактный и простой синтаксис (Go, Python, Lua); 1 — относительно простой синтаксис, немного избыточных конструкций (Java, Rust); 2 — сложный, много деталей, разные способы выражения (C++, C#, Perl); 3 — крайне сложный, множество уникальных конструкций, вариативный синтаксис (Perl, ранние PHP, Brainfuck)
Нестандартные синтаксические конструкции (0–3): 0 — минимальный синтаксис (Go, Python); 0.5 — немного необычных конструкций (часть C#); 1 — среднее количество конструкций (Java); 2 — много сложных конструкций (C++, C# полностью); 3 — очень много странных или исторически обусловленных конструкций (Perl, ранние PHP)
Нарушение обратной совместимости (0–2): 0 — major ломает только в beta / апгрейд 2→3 (Go, Python 3); 1 — рядовой апдейт слегка ломал совместимость (Python 2→3, деление); 2 — рядовой апдейт ломал совместимость значительно (Ruby 1.8→1.9)
Количество способов сделать одно и то же (0–2): 0 — один способ (Go); 1 — несколько способов (Java); 2 — много способов, легко запутаться (C++)
Implicit behavior / hidden state (0–2): 0 — полностью явное поведение (Go, Rust); 1 — несколько скрытых механизмов (Python GIL, C# свойства, Java autoboxing); 2 — много implicit/hidden state (JS, PHP, C++ copy elision, Python mutable default args)
Синтаксические ловушки / edge cases / undefined behaviour (0–2): 0 — нет ловушек (Go, Rust); 1 — несколько мелких edge cases (Python mutable default args); 2 — много ловушек/UB (C, C++, JS hoisting, Perl)
Open Source (0–1): 0 — полностью открыт (Go, Rust, Python, JS, TypeScript, Ruby); 1 — закрытый / привязан к компании (C# исторически)
Сложный корпоративный подход к развитию языка (0–3): 0 — простой подход (Go); 1 — умеренно добавляются конструкции (Rust); 2 — активно добавляются сложные фичи (C++ новые стандарты); 3 — сильное корпоративное влияние, много сложных идиоматик (C# — async/await, LINQ, pattern matching, nullable ref types, record types)
Скидки: Domain-specific: 5% — небольшая специализация (Awk), 10% — средняя (R), 20% — строго domain-specific (SQL); Однопарадигменность: 10% (Go, C, Haskell); Эзотеричность: 20% (Brainfuck, Befunge); “Всем нелюбим без причины”: 10% (COBOL); Проверенность временем: >10 лет →10% (C, Pascal), >20 лет →20% (C, C++, Fortran, Java), >30 лет →30% (C, Assembly конкретный)
Hype / маркетинг: Hype +1 (Rust), Агрессивный маркетинг +1 (C#, TypeScript; Go →0)
Быстродействие с поправкой на интерпретируемость: Компилируемые напрямую: +3 если медленный, 0 если быстрый; Компилируемые в байт-код: +2 если медленный, 0 если быстрый; Интерпретируемые: +1 если медленный, 0 если быстрый