Кіріспе

Кеңейтілетін бағдарламалау – компьютерлік ғылымда бағдарламалау тілін, компиляторды және орындалу ортасын кеңейтуге арналған механизмдерге бағытталған бағдарламалау стилін сипаттау үшін қолданылатын термин. Осы бағдарламалау стилін қолдайтын кеңейтілетін бағдарламалау тілдері 1960 жылдары қарқынды дамыған, бірақ 1970 жылдары бұл бағыт екінші планға түсірілді.

Тарихи қозғалысы

Кеңейтілетін бағдарламалау тілдері қозғалысымен байланысты алғашқы мақала М. Дуглас Макилройдың 1960 жылғы жоғары деңгейдегі бағдарламалау тілдері үшін макростар туралы мақаласы болып табылады. Кеңейту принципі туралы тағы бір ерте сипаттама Брукер мен Морристің 1960 жылғы компилятор компиляторы туралы жұмысында кездеседі. Бұл қозғалыстың шыңы 1969 және 1971 жылдары өткен екі академиялық симпозиуммен белгіленді. 1975 жылы Томас А. Стендиштің қозғалыс туралы шолу мақаласы жарық көрді.

1969 жылғы конференцияда Simula кеңейтілетін тіл ретінде таныстырылды. Стендиш тілдік кеңеюдің үш класын сипаттады, оларды ол парафраза, орфофраза және метафраза деп атады (парафраза мен метафраза аударма терминдері есебінен). Парафраза бұрын анықталған (немесе анықталатын) нәрсені қалай алмастыруға болатынын көрсету арқылы мүмкіндікті анықтайды. Мысал ретінде макро анықтамалары, қарапайым процедура анықтамалары, грамматикалық кеңейтулер, деректер анықтамалары, оператор анықтамалары және басқару құрылымының кеңейтулері аталады. Орфофраза негізгі тілді пайдаланып қол жеткізуге болмайтын мүмкіндіктерді тілге қосады, мысалы, бастапқыда енгізу/шығару (I/O) примитивтері жоқ негізгі тілге I/O жүйесін қосу. Кеңейтулерді әрқашан белгілі бір негізгі тілге қатысты орфофраза ретінде қарастыру керек, өйткені негізгі тілде анықталмаған мүмкіндік басқа тілде анықталуы тиіс. Бұл қазіргі заманғы плагиндер ұғымына сәйкес келеді. Метафраза бұрыннан бар өрнектерді түсіндіру ережелерін өзгертеді. Бұл қазіргі заманғы рефлексивті бағдарламалау (рефлексия) ұғымына сәйкес келеді.

Тарихи қозғалыстың өлімі

Standish кеңейту қозғалысының сәтсіздігін кезекті кеңейтімдерді бағдарламалаудың қиындығына байланысты деп есептейді. Бағдарламашы негізгі тілдің айналасына макростардың бірінші қабатын құруы мүмкін. Содан кейін, егер макростардың екінші қабаты осыған негізделген болса, кез келген келесі бағдарламашы негізгі тілмен де, алғашқы қабатпен де жақсы таныс болуы керек. Үшінші қабатта негізді, сондай-ақ бірінші және екінші қабаттарды білу қажет, және т.б. Бағдарламашыны төменгі деңгейдегі мәліметтерден қорғау – кеңейту қозғалысын ығыстырған абстракция қозғалысының мақсаты. Simula-ның кеңейтілетін тіл екендігі туралы бұрынғы ұсынысына қарамастан, 1975 жылғы Standish-тің зерттеуі практикалық тұрғыда жаңа абстракцияға негізделген технологияларды қамтымаған сияқты (бірақ ол кеңейтілетіндіктің техникалық тұрғыдан оларды қамтуы мүмкін болатын өте жалпы анықтамасын қолданды). 1978 жылғы компьютер ойлап табыс етілгеннен бастап сол кезге дейінгі бағдарламалау абстракциясы тарихы макростарды есімдерімен атамады және кеңейтілетін тілдер қозғалысы болған екенін көрсетпеді. 1980-жылдардың соңында макростар абстракция қозғалысына шартты түрде қабылданды (мүмкін, гигиеналық макростардың пайда болуына байланысты), оларға синтаксистік абстракциялар деген ат берілді.

Қазіргі заманғы қозғалысы

Қазіргі заманғы түсінік бойынша, кеңейтілген бағдарламалауды қолдайтын жүйе төменде сипатталған мүмкіндіктердің бәрін ұсынады.

Кеңейтілетін синтаксис

Бұл қарапайымды түрде бастапқы тілдерді құрастыру үшін жабық, тоқталған немесе өзгеріссіз болуын қажет етпейді дегенді білдіреді. Бастапқы тілдерге жаңа кілт сөздер, түсініктер және құрылымдар қосуға мүмкіндік болуы керек. Пайдаланушы анықтаған синтаксиспен құрылымдарды қосуға рұқсат беретін тілдерге Coq, Racket, Camlp4, OpenC++, Seed7, Red, Rebol және Felix жатады. Кейбір негізгі және ішкі тілдік мүмкіндіктер өзгермейтін болуы мүмкін, бірақ жүйе тек осы тілдік мүмкіндіктерге ғана тәуелденбеуі керек. Жаңаларын қосуға мүмкіндік болуы тиіс.

Ұзартылатын жұмыс уақыты

Орындау кезінде кеңейтілетін бағдарламалау жүйелері тілдерге рұқсат етілген операциялар жиынтығын кеңейтуге мүмкіндік беруі тиіс. Мысалы, егер жүйе байт-код интерпретаторын пайдаланса, жаңа байт-код мәндерін анықтауға рұқсат беруі керек. Кеңейтілетін синтаксис сияқты, өзгеріссіз негізгі немесе ішкі операциялардың кішкентай жиынтығы болуы мүмкін. Дегенмен, жаңа немесе қосымша мүмкіндіктерді қолдау үшін осы ішкі операцияларды қайта анықтау немесе кеңейту мүмкіндігі болуы керек.

Құрамында нысаннан бөлек

Кеңейтілетін бағдарламалау жүйелері бағдарламаларды өңделетін деректер ретінде қарауы керек. Бұл бағдарламаларда ешқандай форматтау ақпараты болмауы тиіс. Бағдарламаларды пайдаланушыларға визуалды түрде көрсету және өңдеу – кеңейтілетін компилятормен қамтамасыз етілетін аударма функциясы болуы керек, ол бағдарламалық деректерді қарауға немесе өңдеуге ыңғайлы формаларға аударады. Әрине, бұл екі жақты аударма болуы керек. Бұл маңызды, себебі кеңейтілетін бағдарламаларды әртүрлі тәсілдермен оңай өңдеуге мүмкіндік болуы керек. Бастапқы тілдегі жазуды тек өңдеу, қарау және машиналық кодқа аудару үшін ғана пайдалануға болмайды. Бағдарламаларды кездейсоқ өңдеуді жеңілдету үшін бастапқы кірісті оның қалай өңделуі керек екендігінің (форматталуы, сақталуы, көрсетілуі, өңделуі және т.б.) талаптарынан ажырату қажет.

Түпнұсқа тілінің қатесін түзетуді қолдау

Кеңейтілетін бағдарламалау жүйелері бағдарламаны орындау үшін қолданылған кеңейтулер мен түрлендірулерге қарамастан, бастапқы код тілінің құрылымдарын пайдалана отырып, бағдарламаларды жөндеуді қолдауы тиіс. Ең маңыздысы, орындалу кезіндегі деректерді көрсетудің жалғыз жолы – құрылымдар немесе массивтер деп есептеуге болмайды. Дебьюгер, немесе дәлірек айтқанда, "бағдарлама инспекторы", орындалу кезіндегі деректерді бастапқы тілге сай келетін форматта көрсетуге мүмкіндік беруі керек. Мысалы, егер тіл бизнес-процестер немесе жұмыс ағыны үшін деректер құрылымын қолдайтын болса, жөндеушіге осы деректер құрылымын балық қаңқасы сияқты немесе плагин арқылы ұсынылған басқа форматта көрсетуге мүмкіндік болуы керек.