Ousterhout's dichotomy
Ця стаття потребує додаткових посилань на джерела для поліпшення її перевірності. (May 2008) |
Ця стаття може містити оригінальне дослідження. (November 2010) |
Ця стаття має кілька недоліків. Будь ласка, допоможіть удосконалити її або обговоріть ці проблеми на сторінці обговорення. |
Дихотомія Остерхута— це класифікація розроблена комп’ютерним вченим Джоном Остерхутом[1] згідно з якою мови програмування високого рівня поділяють на дві групи, кожна з яких має різні властивості та використання: мови системного програмування та скриптові мови.
Системні мови програмування (або мови додатків ) зазвичай мають такі властивості:
- Вони набираються статично
- Вони підтримують створення складних структур даних
- Програми в них скомпільовані в машинний код
- Програми в них призначені для роботи в основному незалежно від інших програм
Мови системного програмування, як правило, використовуються для компонентів і програм із великою кількістю внутрішньої функціональності, таких як операційні системи, сервери баз даних і веб-браузери. Ці програми зазвичай використовують складні алгоритми та структури даних і вимагають високої продуктивності. Прототипні приклади мов системного програмування включають C, OCaml і Modula-2.
Натомість, скриптові мови (або з’єднувальні мови ) зазвичай мають такі властивості:
- Вони набираються динамічно
- У них мало або взагалі немає можливості для складних структур даних
- Програми в них ( скрипти ) інтерпретуються
Скриптові мови, як правило, використовуються для програм, де більша частина функціональних можливостей надходить з інших програм (часто реалізованих на мовах системного програмування); скрипти використовуються для склеювання інших програм або додавання додаткових рівнів функціональності поверх існуючих програм. Остерхут стверджує, що скрипти, як правило, короткі та часто пишуться менш досвідченими програмістами, тому ефективність виконання менш важлива, ніж простота та легкість взаємодії з іншими програмами. Загальні програми для створення скриптів включають створення веб-сторінок, створення звітів, графічний інтерфейс користувача та адміністрування системи. Прототипні приклади мов сценаріїв включають Python, AppleScript, C shell, пакетні файли DOS і Tcl.
Дихотомія Остерхута лежить в основі дизайну його мови Tcl.
Ця дихотомія була повністю викладена в статті Остерхута від 1998, хоча він проводив цю відмінність принаймні з моменту розробки Tcl (1988) і неодноразово заявляв про це публічно. Раннім епізодом була « Війна Tcl » кінця вересня та жовтня 1994 року, де Річард Столмен опублікував статтю з критикою Tcl під назвою «Чому не варто використовувати Tcl», на яку Остерхут відповів, висловлюючи свою дихотомію:
I think that Stallman's objections to Tcl may stem largely from one aspect of Tcl's design that he either doesn't understand or doesn't agree with. This is the proposition that you should use *two* languages for a large software system: one, such as C or C++, for manipulating the complex internal data structures where performance is key, and another, such as Tcl, for writing small-ish scripts that tie together the C pieces and are used for extensions.
Я думаю, що заперечення Столмена проти Tcl можуть випливати здебільшого з одного аспекту дизайну Tcl, який він або не розуміє, або з яким не погоджується. Це припущення, що ви повинні використовувати *дві* мови для великої програмної системи: одну, таку як C або C++, для маніпулювання складними внутрішніми структурами даних, де продуктивність є ключовою, а іншу, таку як Tcl, для написання невеликих скриптів, які об’єднують частини C і використовуються для розширень.
Критики вважають, що дихотомія дуже довільна, і називають її помилкою Остерхута або помилковою дихотомією Остерхута.[2] У той час як статичне проти динамічного типування, складність структури даних і залежне проти автономного можна назвати не пов’язаними функціями, звичайна критика дихотомії Остерхута полягає в її відмінності між компіляцією та інтерпретацією. Ні семантика, ні синтаксис суттєво не залежать від того, чи мовна реалізація компілюється в машинну мову, інтерпретує, токенізує чи байт-компілює на початку кожного запуску, або будь-яку суміш цих. Крім того, в основному жодна з широко поширених мов не інтерпретується без компілятора; це робить компіляцію чи інтерпретацію сумнівним параметром у таксономії мов програмування.
- ↑ Ousterhout, John (March 1998). Scripting: Higher Level Programming for the 21st Century (PDF). IEEE Computer magazine. Процитовано 27 березня 2020.
- ↑ Stuart Halloway. Osterhout's Dichotomy Isn't. Архів оригіналу за 4 травня 2023. Процитовано 25 травня 2024.