Введение
Разделение языков программирования на системное программирование и скриптирование
Дихотомия Остерхаута — это классификация, предложенная учёным-компьютерщиком Джоном Остерхаутом, согласно которой языки программирования высокого уровня обычно делятся на две группы, каждая из которых обладает различными свойствами и областями применения: языки системного программирования и языки скриптов – сравните программирование в большом и программирование в малом. Языки системного программирования (или языки прикладного программирования) обычно характеризуются следующими свойствами:
Они статически типизированы.
Они поддерживают создание сложных структур данных.
Программы на них компилируются в машинный код.
Программы на них предназначены для работы преимущественно независимо от других программ.
Языки системного программирования обычно используются для компонентов и приложений с большим объёмом внутренней функциональности, таких как операционные системы, серверы баз данных и веб-браузеры. Эти приложения обычно используют сложные алгоритмы и структуры данных и требуют высокой производительности. Типичными примерами языков системного программирования являются C, OCaml и Modula 2. В отличие от них, языки скриптов (или языки-связки) обычно обладают следующими свойствами:
Они динамически типизированы.
Они обладают ограниченными или отсутствующими возможностями для работы со сложными структурами данных.
Программы на них (скрипты) интерпретируются.
Языки скриптов обычно используются для приложений, где большая часть функциональности обеспечивается другими программами (часто реализованными на языках системного программирования); скрипты используются для объединения других программ или добавления дополнительных слоёв функциональности поверх существующих программ. Остерхаут утверждает, что скрипты, как правило, короткие и часто пишутся менее опытными программистами, поэтому эффективность выполнения менее важна, чем простота и удобство взаимодействия с другими программами. Распространённые области применения скриптов включают генерацию веб-страниц, генерацию отчётов, графические пользовательские интерфейсы и системное администрирование. Типичными примерами языков скриптов являются Python, AppleScript, C shell, пакетные файлы DOS и Tcl. Дихотомия Остерхаута лежит в основе разработки его языка Tcl.
They are typed statically
They support creating complex data structures
Programs in them are compiled into machine code
Programs in them are meant to operate largely independently of other programs
System programming languages tend to be used for components and applications with large amounts of internal functionality such as operating systems, database servers, and Web browsers. These applications typically employ complex algorithms and data structures and require high performance. Prototypical examples of system programming languages include C, OCaml and Modula 2. By contrast, scripting languages (or glue languages) tend to have the following properties:
They are typed dynamically
They have little or no provision for complex data structures
Programs in them (scripts) are interpreted
Scripting languages tend to be used for applications where most of the functionality comes from other programs (often implemented in system programming languages); the scripts are used to glue together other programs or add additional layers of functionality on top of existing programs. Ousterhout claims that scripts tend to be short and are often written by less sophisticated programmers, so execution efficiency is less important than simplicity and ease of interaction with other programs. Common applications for scripting include Web page generation, report generation, graphical user interfaces, and system administration. Prototypical examples of scripting languages include Python, AppleScript, C shell, DOS batch files, and Tcl. Ousterhout's dichotomy underlies the design of his language Tcl.
История
Дихотомия была полностью изложена в , хотя Остерхаут проводил это различие ещё со времен разработки Tcl (1988) и неоднократно публично высказывался на этот счёт. Ранним эпизодом стала "Война Tcl" в конце сентября и октябре 1994 года, когда Ричард Столлман опубликовал статью, критикующую Tcl, под названием "Почему не стоит использовать Tcl", на что Остерхаут ответил, сформулировав свою дихотомию:
Критика
Критики считают, что данная дихотомия весьма произвольна, и называют её заблуждением Остерхаута или ложной дихотомией Остерхаута. Хотя статическая и динамическая типизация, сложность структур данных и зависимые и независимые системы могут считаться несвязанными характеристиками, основная критика дихотомии Остерхаута направлена на его противопоставление компиляции и интерпретации. Ни семантика, ни синтаксис существенно не зависят от того, компилирует ли реализация языка в машинный код, интерпретирует ли его, разбивает ли на токены или компилирует в байт-код при каждом запуске, или использует любую комбинацию этих подходов. Более того, практически ни один из широко используемых языков не является чисто интерпретируемым без компилятора; это делает противопоставление компиляции и интерпретации сомнительным критерием в таксономии языков программирования.