Поняття, яке ви шукаєте, називається виразністю, і Маттіас Феллейзен має математично суворе визначення:
" Про виразну силу мов програмування "
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
і вам не доведеться турбуватися про перерахунок будь-яких зрушень стрибка вручну.