Kengaytiriladigan dasturlash - Extensible programming

Kengaytiriladigan dasturlash ichida ishlatiladigan atama Kompyuter fanlari kengaytiruvchi mexanizmlarga yo'naltirilgan kompyuter dasturlash uslubini tavsiflash dasturlash tili, kompilyator va ish vaqti muhiti. Dasturlashning ushbu uslubini qo'llab-quvvatlaydigan kengaytiriladigan dasturlash tillari 1960-yillarda faol ish maydoni bo'lgan, ammo bu harakat 1970-yillarda chetga surilgan.[1] Kengaytiriladigan dasturlash XXI asrda yangi qiziqish mavzusiga aylandi.[2]

Tarixiy harakat

Odatda birinchi qog'oz[1][3] kengaytiriladigan dasturlash tili harakati bilan bog'liq M. Duglas Makilroyniki 1960 yil qog'oz makrolar yuqori darajadagi dasturlash tillari uchun.[4] Kengayish printsipining yana bir dastlabki ta'rifi Brooker va Morrisning 1960 yilgi maqolasida uchraydi Tuzuvchi-Tuzuvchi.[5] Harakatning eng yuqori cho'qqisi 1969 va 1971 yillarda ikkita akademik simpoziumlar bilan belgilandi.[6][7] 1975 yilga kelib, Tomas A. Standishning harakati to'g'risida so'rovnoma maqolasi[1] aslida o'limdan keyingi o'lim edi. The To'rtinchi dasturlash tili istisno edi, lekin bu aslida e'tiborga olinmadi.

Tarixiy harakatning xarakteristikasi

Odatda taxmin qilinganidek, kengaytiriladigan dasturlash tili boshlang'ich hisoblash imkoniyatlarini ta'minlovchi asosiy tildan va a meta tili asosiy tilni o'zgartirishga qodir. Keyin dastur meta-til modifikatsiyalari va o'zgartirilgan asosiy tilda kodlardan iborat edi.

Harakatda ishlatiladigan tilni kengaytirishning eng ko'zga ko'ringan usuli bu so'l ta'rif edi. Grammatikani o'zgartirish ham harakat bilan chambarchas bog'liq edi, natijada adaptiv grammatik formalizmlar. The Lisp tilshunoslik kengayadigan tillar jamoasidan alohida bo'lib qoldi, chunki bir tadqiqotchi kuzatganidek

Dasturlar va ma'lumotlar asosan bir-birining o'rnini bosadigan har qanday dasturlash tili kengaytiriladigan til sifatida qaralishi mumkin. ... buni Lispning yillar davomida kengaytiriladigan til sifatida ishlatilganligidan juda oson ko'rish mumkin.[8]

1969 yilgi konferentsiyada Simula kengaytiriladigan dasturlash tili sifatida taqdim etildi.

Standish o'zi chaqirgan uchta kengaytirilgan tilni tavsifladi parafraz, orfrazemava metafraza (aks holda parafraza va metafraza mavjud tarjima atamalar).

  • Parafraza ob'ektni avval belgilangan (yoki belgilanadigan) narsaga qanday almashtirishni ko'rsatib belgilaydi. Misol tariqasida u so'l ta'riflar, oddiy protsedura ta'riflari, grammatik kengaytmalar, ma'lumotlar ta'riflari, operator ta'riflari va boshqaruv tuzilmasi kengaytmalarini eslatib o'tadi.
  • Ortofraza tilga tayanch tildan foydalanib erishib bo'lmaydigan xususiyatlarni qo'shadi, masalan, avvalgi kirish ibtidosi bo'lmagan asosiy tilga i / o tizimini qo'shadi. Kengaytmalar orfrazema deb tushunilishi kerak nisbiy ba'zi bir asosiy tillarga, chunki asosiy til nuqtai nazaridan aniqlanmagan xususiyat boshqa ba'zi tillar bilan belgilanishi kerak. Ortofraza zamonaviy tushunchasiga mos keladi plaginlari.
  • Metafraz oldindan mavjud bo'lgan iboralar uchun ishlatilgan talqin qoidalarini o'zgartiradi. Bu zamonaviy tushunchaga mos keladi aks ettirish.

Tarixiy harakatning o'limi

Stendish kengayuvchanlik harakatining muvaffaqiyatsizligini ketma-ket kengaytmalarni dasturlash qiyinligi bilan izohladi. Oddiy dasturchi asosiy til atrofida makroslarning bitta qobig'ini qurishi mumkin, ammo agar uning atrofida makroslarning ikkinchi qobig'i qurilishi kerak bo'lsa, dasturchi asosiy til bilan ham, birinchi qobiq bilan ham yaqindan tanish bo'lishi kerak edi; uchinchi qobiq taglik va birinchi va ikkinchi chig'anoqlar bilan tanishishni talab qiladi; va hokazo. (E'tibor bering, dasturchini quyi darajadagi tafsilotlardan himoya qilish maqsadidir mavhumlik kengayish harakatini to'xtatgan harakat.)

Simulaning ilgari kengaytirilishi mumkin bo'lgan taqdimotiga qaramay, 1975 yilga kelib, Standish so'rovnomasida abstraktsiyaga asoslangan yangi texnologiyalar kiritilmagan ko'rinadi (garchi u texnik jihatdan o'z ichiga olishi mumkin bo'lgan kengayishning keng ta'rifidan foydalansa ham). 1978 yilda kompyuter ixtiro qilinganidan (o'sha paytgacha) dasturlash abstraktsiyasi tarixida makrolar haqida hech narsa aytilmagan va tillar harakati kengayganligi to'g'risida hech qanday ishora qilmagan.[9] Makroslar abstraktsion harakatga 1980-yillarning oxiriga kelib taxminiy ravishda qabul qilingan (ehtimol paydo bo'lishi bilan bog'liq) gigienik makrolar ), taxallusni berish orqali sintaktik abstraktlar.[10]

Zamonaviy harakat

Zamonaviy ma'noda kengaytiriladigan dasturlashni qo'llab-quvvatlaydigan tizim ta'minlanadi barchasi quyida tavsiflangan xususiyatlar[iqtibos kerak ].

Kengaytiriladigan sintaksis

Bu shuni anglatadiki, kompilyatsiya qilinadigan manba tili yopiq, sobit yoki harakatsiz bo'lmasligi kerak. Manba tiliga yangi kalit so'zlar, tushunchalar va tuzilmalarni qo'shish imkoniyati bo'lishi kerak. Foydalanuvchi tomonidan belgilangan sintaksis bilan konstruktsiyalarni qo'shishga imkon beradigan tillarga quyidagilar kiradi Camlp4, OpenC ++, 7. Urug ',[11] Qizil, Rebol va Feliks. Ba'zi bir asosiy va ichki til xususiyatlari o'zgarmas bo'lishi uchun maqbul bo'lsa-da, tizim faqat ushbu til xususiyatlariga ishonmasligi kerak. Yangilarini qo'shish imkoniyati bo'lishi kerak.

Kengaytiriladigan kompilyator

Kengaytiriladigan dasturlashda kompilyator manba kodini ikkilik bajariladigan chiqishga o'zgartiradigan monolitik dastur emas. Kompilyatorning o'zi kengaytirilishi kerak, chunki u haqiqatan ham manba tiliga kirishni tarjima qilishga yordam beradigan plaginlar to'plamidir. har qanday narsa. Masalan, kengaytiriladigan kompilyator ob'ekt kodini, kod hujjatlarini, qayta formatlangan manba kodini yoki boshqa istalgan chiqishni yaratishni qo'llab-quvvatlaydi. Kompilyatorning arxitekturasi o'z foydalanuvchilariga kompilyatsiya jarayoniga "kirish" va kompilyatsiya jarayonida har bir oqilona qadamda muqobil ishlov berish vazifalarini taqdim etishlari kerak.

Dastlabki kodni kompyuterda bajarilishi mumkin bo'lgan narsaga tarjima qilish vazifasi uchun kengaytiriladigan kompilyator quyidagilarni bajarishi kerak:

  • funktsiyasining deyarli barcha jihatlari uchun plagin yoki komponentlar arxitekturasidan foydalaning
  • qaysi til yoki til varianti tuzilayotganligini aniqlang va ushbu tilni tanib olish va tasdiqlash uchun tegishli plaginni toping
  • o'zboshimchalik bilan manba tillarini sintaktik va tizimli ravishda tasdiqlash uchun rasmiy til xususiyatlaridan foydalaning
  • tegishli tasdiqlash plaginini chaqirish orqali o'zboshimchalik bilan manba tillarini semantik tekshirishda yordam berish
  • foydalanuvchilarga turli xil kod generatorlarini tanlashga imkon bering, natijada bajariladigan dastur turli xil protsessorlar, operatsion tizimlar, virtual mashinalar yoki boshqa ijro etuvchi muhit uchun mo'ljallangan bo'lishi mumkin.
  • xatolarni yuzaga keltirish va uni kengaytirish uchun imkoniyatlarni taqdim etish
  • tugunlarining yangi turlariga ruxsat berish mavhum sintaksis daraxti (AST),
  • AST tugunlarida yangi qiymatlarga ruxsat berish,
  • tugunlar orasidagi yangi qirralarga ruxsat berish,
  • kirish AST yoki uning qismlarini tashqi "o'tish" orqali o'zgartirilishini qo'llab-quvvatlash
  • AST kiritilishini yoki uning qismlarini boshqa tashqi "o'tish" orqali boshqa shaklga tarjima qilishni qo'llab-quvvatlash
  • ichki va tashqi paslar o'rtasidagi axborot oqimiga ko'maklashish, chunki ular ASTni yangi AST yoki boshqa vakolatxonalarga o'zgartirishi va tarjima qilishi mumkin.

Kengaytirilgan ish vaqti

Ish paytida, kengaytiriladigan dasturlash tizimlari tillarga ruxsat beradigan operatsiyalar to'plamini kengaytirishga ruxsat berishi kerak. Masalan, agar tizim a dan foydalansa bayt-kod tarjimon, yangi bayt-kod qiymatlarini aniqlashga imkon berishi kerak. Kengaytiriladigan sintaksisda bo'lgani kabi, o'zgarmas bo'lgan ba'zi bir (kichik) fundamental yoki ichki operatsiyalar to'plami bo'lishi qabul qilinadi. Shu bilan birga, yangi yoki qo'shimcha xatti-harakatlarni qo'llab-quvvatlash uchun ushbu ichki operatsiyalarni haddan tashqari yuklash yoki oshirish mumkin bo'lishi kerak.

Shakldan ajratilgan tarkib

Kengaytiriladigan dasturlash tizimlari dasturlarni ishlov beriladigan ma'lumotlar sifatida ko'rib chiqishi kerak. Ushbu dasturlar har qanday formatlash ma'lumotlaridan butunlay mahrum bo'lishi kerak. Foydalanuvchilarga dasturlarning vizual ko'rinishi va tahriri kengaytiriladigan kompilyator tomonidan qo'llab-quvvatlanadigan, dastur ma'lumotlarini ko'rish yoki tahrirlash uchun qulayroq shakllarga o'tkazadigan tarjima funktsiyasi bo'lishi kerak. Tabiiyki, bu ikki tomonlama tarjima bo'lishi kerak. Bu juda muhimdir, chunki kengaytiriladigan dasturlarni osonlik bilan qayta ishlash imkoniyati bo'lishi kerak xilma-xillik yo'llari. Manba tilini kiritish usullaridan faqat tahrirlash, ko'rish va mashina kodiga tarjima qilish qabul qilinishi mumkin emas. Dasturlarning o'zboshimchalik bilan qayta ishlashiga, uni qayta ishlash usullarini (formatlash, saqlash, namoyish qilish, tahrirlash va h.k.) spetsifikatsiyalaridan manbani birlashtirish orqali yordam beradi.

Manba tilida disk raskadrovka yordami

Kengaytiriladigan dasturlash tizimlari dasturning bajarilishini amalga oshirish uchun uning kengaytirilganligi yoki o'zgartirilishidan qat'i nazar, asl manba tilining tuzilmalaridan foydalangan holda dasturlarning disk raskadrovka qilinishini qo'llab-quvvatlashi kerak. Eng muhimi, ish vaqti ma'lumotlarini namoyish qilishning yagona usuli deb o'ylash mumkin emas tuzilmalar yoki massivlar. Nosozliklarni tuzatuvchi yoki aniqroq "dastur inspektori" ish vaqti ma'lumotlarini manba tiliga mos shakllarda namoyish etishga ruxsat berishi kerak. Misol uchun, agar til ma'lumotlar tuzilishini qo'llab-quvvatlasa biznes jarayoni yoki ish oqimi, tuzatuvchida ushbu ma'lumotlar tuzilishini a sifatida ko'rsatish mumkin bo'lishi kerak baliq suyagi diagrammasi yoki plagin tomonidan taqdim etilgan boshqa shakl.

Misollar

Shuningdek qarang

Adabiyotlar

  1. ^ a b v Standish, Tomas A., "Dasturlash tili dizaynidagi kengayish ", SIGPLAN xabarnomalari 10 yo'q. 7 (1975 yil iyul), 18-21 betlar.
  2. ^ Gregori V. Uilson "XXI asr uchun kengaytiriladigan dasturlash ", ACM navbati 2 yo'q. 9 (2004 yil dekabr / yanvar).
  3. ^ Sammet, Jan E., Dasturlash tillari: tarixi va asoslari, Prentice-Hall, 1969, III.7.2-bo'lim
  4. ^ McIlroy, MD, "Kompilyator tillarining so'l ko'rsatmalarining kengaytmalari ", ACM aloqalari 3 yo'q. 4 (1960 yil aprel), 214–220-betlar.
  5. ^ Bruker, R.A. va Morris, D., "So'z birikmasi tillari uchun umumiy tarjima dasturi ", ACM jurnali 9 yo'q. 1 (1962 yil yanvar), 1-10 betlar. Qog'oz 1960 yilda qabul qilingan.
  6. ^ Kristensen, C. va Shou, KJ, nashr., Kengayadigan tillar simpoziumi materiallari, SIGPLAN xabarnomalari 4 yo'q. 8 (1969 yil avgust).
  7. ^ Schuman, S.A., ed., Kengayadigan tillar bo'yicha xalqaro simpozium materiallari, SIGPLAN xabarnomalari 6 yo'q. 12 (1971 yil dekabr).
  8. ^ Harrison, M.C., 1969 yildagi simpoziumning "Kengayish kontseptsiyasi paneli", 53-54 bet.
  9. ^ Guarino, L.R. "Dasturlash tillarida mavhumlik evolyutsiyasi ", CMU-CS-78-120, Kompyuter fanlari kafedrasi, Karnegi-Mellon universiteti, Pensilvaniya, 1978 yil 22 may.
  10. ^ Gabriel, Richard P., tahrir. "Umumiy prototip tizimiga qo'yiladigan talablar to'g'risida hisobot loyihasi ", SIGPLAN xabarnomalari 24 yo'q. 3 (1989 yil mart), 93ff-bet.
  11. ^ Zingaro, Doniyor, "Zamonaviy kengaytiriladigan tillar ", SQRL hisoboti 47 Makmaster universiteti (2007 yil oktyabr), 16-bet.

Tashqi havolalar

Umumiy

  1. Greg Uilsonning ACM navbatidagi maqolasi
  2. Slashdot munozarasi
  3. Zamonaviy kengaytiriladigan tillar - dan qog'oz Daniel Zingaro

Asboblar

  1. MetaLkengaytiriladigan dasturlash kompilyatori dvigatelini amalga oshirish
  2. XPS - kengaytirilgan dasturlash tizimi (ishlab chiqishda)
  3. MPS - JetBrains metaprogramma tizimi

Kengayadigan sintaksis bilan dasturlash tillari

  1. OpenZz
  2. xtc - eXTensible C
  3. Inglizcha yozuv
  4. Nemerle makrolari
  5. Boo sintaktik makrolari
  6. Stenford universiteti oraliq formati kompilyatori
  7. Seed7 - kengaytiriladigan dasturlash tili
  8. Katahdin - ishlash vaqtida o'zgarishi mumkin bo'lgan sintaksis va semantikaga ega dasturlash tili
  9. π - kengaytirilgan sintaksisga ega bo'lgan boshqa dasturlash tili Earley tahlilchisi