Кіріспе
Бағдарламалау тілдерін жүйелік бағдарламалау және скрипттеуге бөлу
Остерхауттың дихотомиясы – компьютерлік ғалым Джон Остерхауттың жоғары деңгейдегі бағдарламалау тілдері екі топқа жататындығын сипаттауы, олардың әрқайсысының ерекше қасиеттері мен қолданылуы бар: жүйелік бағдарламалау тілдері және скрипт тілдері – үлкен және шағын бағдарламалауды салыстырыңыз. Жүйелік бағдарламалау тілдері (немесе қолданба тілдері) әдетте мынадай қасиеттерге ие:
Олар статикалық түрде типтеледі.
Олар күрделі деректер құрылымдарын құруды қолдайды.
Олардағы бағдарламалар машиналық кодқа компиляцияланады.
Олардағы бағдарламалар басқа бағдарламалардан тәуелсіз жұмыс істеуге арналған.
Жүйелік бағдарламалау тілдері операциялық жүйелер, деректер қоры серверлері және веб-браузерлер сияқты ішкі функционалдылығы көп компоненттер мен қолданбалар үшін қолданылады. Бұл қолданбалар әдетте күрделі алгоритмдер мен деректер құрылымдарын қолданады және жоғары өнімділікті қажет етеді. Жүйелік бағдарламалау тілдерінің прототиптік мысалдары – 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) жобаланғаннан бері айқындап келген және оны әр түрлі уақытта жариялаған. 1994 жылдың қыркүйек және қазан айларының соңындағы "Tcl соғысы" осы мәселенің алғашқы эпизоды болды, онда Ричард Столлман "Неліктен Tcl-ді пайдаланбау керек" деген мақала жариялап, Tcl-ді сынады, ал Остерхаут өзінің дихотомиясын түсіндіре отырып жауап берді:
Сын
Сыншылар бұл дихотомияның өте ерікті екенін айтады және оны Остерхауттың қателігі немесе Остерхауттың жалған дихотомиясы деп атайды. Статикалық және динамикалық типтеу, дерек құрылымының күрделігі, тәуелді және жеке-дара ерекшеліктер байланыссыз сипаттамалар болуы мүмкін, бірақ Остерхауттың дихотомиясына қатысты негізгі сын – компиляция мен интерпретация арасындағы айырмашылық. Тілдің семантикасы мен синтаксисі тілдің іске асырылуы машиналық тілге компиляциялануына, интерпретациялануына, токенделуіне немесе әр рет орындалғанда байт-компиляциялануына, не осылардың кез келген комбинациясына едәуір дәрежеде тәуелді емес. Бұған қоса, кеңінен қолданылатын тілдердің ешқайсысы компиляторсыз таза интерпретацияланбайды; бұл бағдарламалау тілдерінің классификациясында компиляциялау мен интерпретациялауды күмәнді параметр етеді.