Є кілька визначень сили, що виходять за межі повноти Тьюрінга. Марк цитував те, що я схильний вважати "визначенням Пола Грема". Це досить хороше визначення, з одним серйозним недоліком: це неправильно. Теоретично це дуже добре визначення мовної сили, але ви знаєте, що вони кажуть про різницю між теорією та практикою ...
Якби кожен зміг написати ідеальний код, не лише ідеально відсутній помилок, а й ідеально стійкий до майбутнього, послідовно, то визначення Пола Грема було б правильним. Але це очевидно не так. У реальному світі більшість часу та зусиль, що спрямовуються на розробку програмного забезпечення, забираються не первинним створенням продукту, а технічним обслуговуванням. Залежно від того, яку статистику ви слухаєте (і вона, мабуть, дуже різниться від проекту до проекту), обслуговування може становити від 60% до 90% від загального обсягу зусиль, які спрямовані на програму.
Технічне обслуговування часто виконується іншими людьми, ніж особа, яка написала код спочатку, і часто через місяці чи навіть роки після первинного написання коду, це означає, що навіть для оригінального кодера це може бути "чужим кодом" цим бал. Якщо ви хочете бути продуктивними під час технічного обслуговування, вам потрібно мати можливість швидко встановити початковий намір коду, прочитавши його.
Тому більш потужна мова - це мова, яка полегшує швидке читання коду , а не мова, яка полегшує швидке записування коду . Існує тенденція до великої кількості збігів між ними, але поняття також часто є перехресними цілями, оскільки короткий синтаксис часто опускає деталі, про які компілятор / інтерпретатор може зробити висновок набагато простіше, ніж програміст технічного обслуговування.
EDIT: Є ще один важливий момент в описі сили мови: коло понять, які ви можете висловити, і те, як легко ви можете вдарити по обидва його кінці. Пол Грехем любить оцінювати це за тим, наскільки високий рівень абстракції ви можете досягти, але це лише половина. Будь-яка мова, що накладає нижню межу абстрагування, під якою ви не можете переходити, коли це необхідно, є калікою, оскільки деталі, які вилучаються далеко, є з причини. Це різниця між легко читабельною іграшковою мовою, такою як COBOL, та легко читабеною потужною мовою: COBOL не має вказівників та доступу до вбудованої вбудованої системи, де ви можете висловити будь-які обчислення, навіть ті, до яких COBOL не підходить.
COBOL також не особливо хороший у попаданні на високий кінець спектра абстракції. Згідно з Вікіпедією, він не має "визначених користувачем типів і не визначених користувачем функцій", що ускладнює створення алгоритмів і структур даних.