Кіріспе

Бағдарламалау парадигмасы – компьютерлік бағдарламалау техникасы.

Метапрограммалау – компьютерлік бағдарламалардың басқа бағдарламаларды мәлімет ретінде өңдеуге қабілетті бағдарламалау техникасы. Яғни, бағдарлама басқа бағдарламаларды оқу, жасау, талдау немесе өзгерту үшін, тіпті жұмыс істеп тұрғанда өзін өзі модификациялау үшін құрыла алады. Кейбір жағдайларда бұл бағдарламашыларға шешімді тұжырымдау үшін кодтың көлемін азайтуға, соның салдарынан әзірлеу уақытын қысқартуға мүмкіндік береді. Бұл бағдарламаларға қайта компиляциялаусыз жаңа жағдайларға тиімді бейімделуге де мүмкіндік береді. Метапрограммалау есептеулерді жұмыс уақытынан компиляция уақытына жылдыру, компиляция уақытындағы есептеулерді пайдаланып код жасау және өзін-өзі өзгертетін кодты іске асыру үшін қолданылуы мүмкін. Бағдарламалау тілінің өзінің метатілі болу қабілеті – рефлексия деп аталады. Рефлексия – метапрограммалауды жеңілдетуге арналған бағалы тіл мүмкіндігі. Метапрограммалау 1970-1980 жылдары LISP сияқты тізімдік өңдеу тілдерін пайдалану арқылы кең таралды. LISP аппараттық машиналары 1980 жылдары танымал болды және кодты өңдей алатын қосымшаларды іске қосуға мүмкіндік берді. Олар жиі жасанды интеллект саласындағы қолданбалар үшін қолданылды.

Қадамдар

Метапрограммалау дамытушыларға жалпы бағдарламалау парадигмасына жататын бағдарламаларды жазуға және кодты әзірлеуге мүмкіндік береді. Бағдарламалау тілінің өзі бірінші сыныпты деректер түрі ретінде (Lisp, Prolog, SNOBOL немесе Rebol сияқты) болуы да өте пайдалы; бұл гомоиконизм деп аталады. Жалпылама бағдарламалау, деректер түрлерін нақты көрсету қажеттілігінсіз кодты жазуға мүмкіндік беру арқылы тілдегі метапрограммалау мүмкіндігін қолданады, себебі олар қолданылған кезде параметрлер ретінде берілуі мүмкін. Метапрограммалау әдетте үш жолдың бірімен жұмыс істейді. Бірінші тәсіл – NET IL эмиттеріне ұқсас қолданбалы бағдарламалау интерфейстері (API) арқылы бағдарламалау кодына орындалу уақытының қозғалтқышының ішкі құрылымын ашу. Екінші тәсіл – бағдарламалық командаларды қамтитын өрнектерді динамикалық орындау, көбінесе жолдардан құралады, бірақ JavaScript сияқты аргументтер немесе контекстті пайдаланатын басқа әдістерден де болуы мүмкін. Осылайша, «бағдарламалар бағдарлама жаза алады». Екі тәсіл де бір тілде қолданылса да, көптеген тілдер біреуіне көбірек бейімділік көрсетеді. Үшінші тәсіл – тілден толығымен шығу. Тіл сипаттамаларын қабылдайтын және осы тілдерде кез келген өзгерістерді жүзеге асыратын компиляторлар сияқты жалпы мақсаттағы бағдарламаны түрлендіру жүйелері – жалпы метапрограммалаудың тікелей іске асырылуы болып табылады. Бұл метапрограммалауды мақсатты тілдің өзінде метапрограммалау мүмкіндігі бар-жоғына қарамастан, кез келген мақсатты тілге қолдануға мүмкіндік береді. Мұны Scheme-нің жұмысында және оның C-де кездесетін кейбір шектеулерді C-ді кеңейту үшін Scheme тілінің құрамына кіретін құрылымдарды пайдалану арқылы шешуге мүмкіндік беретінін көруге болады. Lisp, тарихи маңыздылығы және метапрограммалаудың қарапайымдылығы мен қуатының арқасында, метапрограммалау мүмкіндіктері бар ең маңызды тіл болып саналады. Lisp метапрограммасында, unquote операторы (әдетте үтір) бағдарламаны орындау уақытында емес, бағдарлама анықталған кезде бағаланатын кодты енгізеді. Метапрограммалау тілі хост бағдарламалау тілімен бірдей, сондықтан қалаған жағдайда, қолданыстағы Lisp процедураларын метапрограммалау үшін тікелей қайта пайдалануға болады. Бұл тәсіл бағдарламаның деректерімен тікелей жұмыс істейтін интерпретаторды бағдарламаға қосу арқылы басқа тілдерде де іске асырылды. Мұндай іске асырулар кейбір танымал жоғары деңгейдегі тілдер үшін де бар, мысалы, RemObjects’ Pascal Script – Object Pascal үшін.

Кодты есептеу

Метапрограммалаудың бір қолданылуы – динамикалық бағдарламалық талдау жүргізу үшін бағдарламаларды тексеру.

Тәуелді типтер

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

Қолданылу

Ерекше метапрограммалау жүйелерінің тізімі «Бағдарлама түрлендіру жүйелерінің тізімі» бетінде ұсталып тұрады.