Поняття, яке ви шукаєте, називається виразністю, і Маттіас Феллейзен має математично суворе визначення:
" Про виразну силу мов програмування "
www.ccs.neu.edu/scheme/pubs/scp91-felleisen.ps.gz (версія сценарію)
Інтуїція, що стоїть за ідеєю, полягає в тому, що якщо у вас є дві еквівалентні програми на двох різних мовах - скажімо, програма A мовою X і програма B мовою Y-- і якщо ви внесете локальну зміну на A, що вимагає глобальної зміни на B , то X більш виразний, ніж Y.
Одним із прикладів, який надає Felleisen, є призначення: У мовах програмування схеми ви можете видалити оператор присвоєння та все ще мати повну мову Тюрінга. Однак у такій мові з обмеженим доступом додавання функції, яка була б локалізована, якщо призначення було дозволено, вимагало б глобальної зміни програми без призначення.
Моя дискусія спростила деякі деталі, і ви повинні прочитати саму статтю, щоб отримати повний рахунок.
Щоб відповісти на ваше інше запитання: Ви можете сказати, що Java є більш виразною, ніж збірка, оскільки ви можете додати новий клас до своєї програми Java, а потім отримати переваги поліморфізму, якщо інші частини програми називають її методи без глобальної модифікації. Поводження з винятками - ще один приклад, коли Java є більш виразною, ніж збірка: Вам просто потрібно написати одне throwтвердження, щоб перенести контроль над стеком. На більш елементарному рівні ви також можете додати нове caseвисловлювання на початку a, switchі вам не доведеться турбуватися про перерахунок будь-яких зрушень стрибка вручну.