Ko'prik (dasturlash) - Bridging (programming)

Yilda Kompyuter fanlari, ko'prik turli xil ish vaqti xaritalarini aks ettiruvchi tizimlarni tavsiflaydi dasturlash tillari shuning uchun ular umumiy resurslardan foydalanishlari mumkin. Ular ko'pincha "chet el" tillariga xost platformasining ona tilida ishlashiga ruxsat berish uchun ishlatiladi ob'ekt kutubxonalari, ko'prikning ikki tomoni bo'ylab ma'lumotlarni va holatni tarjima qilish. A orqali cheklangan ta'sir o'tkazishga imkon beradigan "ko'mish" tizimlari bilan qarama-qarshiliklarni ko'paytirish qora quti davlat almashinuvi cheklangan yoki umuman mavjud bo'lmagan mexanizm.

Apple Inc. bir necha marta, xususan, dastlabki versiyalarida ko'prikdan og'ir foydalangan Mac OS X yordamida eski "klassik" tizimlarga ulangan Uglerod tizim, shuningdek Java. Microsoft "s Umumiy til ishlash vaqti bilan tanishtirildi .NET Framework, boshidanoq ko'p tilli bo'lishi uchun ishlab chiqilgan va keng ko'lamli echimlar zaruriyatidan qochgan. Ikkala platformada ham yaqinda yangi ko'prik tizimlari qo'shildi JavaScript, Apple-ning ObjC-to-JS va Microsoft-ning HTML ko'prigi.

Tushunchalar

Funksiyalar, kutubxonalar va ish vaqti

Dasturlash tillarining aksariyati a tushunchasini o'z ichiga oladi subroutine yoki funktsiya, keng qo'llaniladigan kodni kapsulada saqlashga va dastur davomida qayta ishlatishga imkon beradigan mexanizm. Masalan, matematikadan og'ir foydalanadigan dastur uchun buni bajarish kerak bo'lishi mumkin kvadrat ildiz Dastur davomida turli xil raqamlar bo'yicha hisoblash, shuning uchun ushbu kod a-da ajratilishi mumkin sqrt (aNumber) kvadrat ildiz hisoblashni amalga oshiradigan raqamga "berilgan" va natijani "qaytaradigan" funktsiya. Ko'pgina hollarda, ushbu kod allaqachon mavjud yoki apparat tarkibida yoki asosiy qismi sifatida amalga oshiriladi operatsion tizim dastur ichida ishlaydi. Bunday hollarda kv funktsiyasini ichki kodni chaqirish orqali yanada soddalashtirish mumkin.

Funktsiyalar ko'pincha o'xshash imkoniyatlar, masalan, matematik funktsiyalar yoki matnli fayllar bilan ishlashning osonlikcha aniqlanadigan guruhlariga kiradi. Funktsiyalar ko'pincha ma'lum bo'lgan to'plamlarda to'planadi kutubxonalar tizim bilan ta'minlangan yoki odatda o'tmishda dasturlash tili. Har bir tilda funktsiyalarni chaqirishning o'ziga xos usuli mavjud, shuning uchun bitta til uchun yozilgan kutubxonalar boshqasi bilan ishlamasligi mumkin; funktsiyalarni chaqirish semantikasi C dan farq qiladi Paskal, shuning uchun odatda C dasturlari Paskal kutubxonalariga qo'ng'iroq qila olmaydi va aksincha. Ushbu muammoning keng qo'llaniladigan echimi bitta to'plamni tanlashdir semantikani chaqirish platforma uchun standart tizim sifatida, so'ngra barcha dasturlash tillari ushbu standartga mos keladi.

Ko'pgina kompyuter tillari va platformalarida odatda funktsiyalar qo'shilgan bo'lib, ularni funktsiya chaqirish / qaytarish modelida ifodalash mumkin emas. Axlat yig'ish Masalan, dasturning ishlash muddati davomida ishlaydi. Ushbu turdagi funktsiyalar dasturdan samarali ravishda "tashqarida" bo'lib, u mavjud, ammo to'g'ridan-to'g'ri dasturning o'zida ifodalanmaydi. Bu kabi funktsiyalar odatda o'sib borishda amalga oshiriladi ish vaqti dasturlarda to'plangan, lekin kod ichida ko'rinmasligi shart bo'lgan tizimlar, kutubxonalar.

Umumiy kutubxonalar va umumiy ish vaqti

Kirish umumiy kutubxona tizimlar an'anaviy dasturlarni qurish modelini sezilarli darajada o'zgartirdi. Ilgari kutubxona kodi to'g'ridan-to'g'ri "" tomonidan dasturlarga ko'chirilganbog'lovchi "va samarali dasturning bir qismi bo'ldi. bilan dinamik bog'lanish kutubxona kodi (odatda) faqat bitta joyda, tizimda sotuvchi tomonidan taqdim etilgan, barcha dasturlar birgalikda foydalanadigan fayl mavjud. Dastlabki tizimlar ko'plab muammolarni keltirib chiqardi, ko'pincha ishlash nuqtai nazaridan va umumiy kutubxonalar umuman operatsion tizimdan farqli o'laroq, ma'lum tillar yoki platformalar uchun ajratilgan edi. Ushbu muammolarning aksariyati 1990-yillarga qadar hal qilindi va 2000-yillarning boshlariga kelib eng katta platformalar butun tizim uchun asosiy interfeys sifatida umumiy kutubxonalarga o'tdilar.

Garchi bunday tizimlar yangi dasturlar uchun umumiy kod kutubxonalarini ta'minlash muammosini hal qilgan bo'lsa-da, odatda ushbu tizimlar o'zlarining ish vaqtlarini ham qo'shib qo'yishdi. Bu shuni anglatadiki, til, kutubxona va endi butun tizim ko'pincha bir-biri bilan chambarchas bog'langan. Masalan, ostida OpenStep butun operatsion tizim aslida bir edi Maqsad-C dastur. OpenStep-da taqdim etilgan keng ob'ektlar to'plamidan foydalanishni istagan har qanday dasturlar nafaqat Obj-C semantikasi yordamida ushbu kutubxonalarga qo'ng'iroq qilishlari kerak, balki dastur ustidan asosiy boshqaruvni ta'minlash uchun Obj-C ish vaqti bilan o'zaro aloqada bo'lishlari kerak.

Farqli o'laroq, Microsoft "s .NET Framework boshidanoq bir nechta tillarni qo'llab-quvvatlash imkoniyatiga ega bo'lish uchun ishlab chiqilgan C #, C ++ va ning yangi versiyasi Visual Basic. Buning uchun MS ob'ekt kutubxonalarini va ish vaqtini Umumiy til infratuzilmasi (CLI). To'g'ridan-to'g'ri kompilyatsiya qilinadigan dasturlar o'rniga manba kodi aksariyat tillarda bo'lgani kabi asosiy ish vaqti formatiga, CLI modeli ostida barcha tillar avval kompilyatsiya qilinadi Umumiy oraliq til (CIL), keyin esa uni chaqiradi Umumiy til ishlash vaqti (CLR). Nazariy jihatdan har qanday dasturlash tili CLI tizimidan foydalanishi va .NET ob'ektlaridan foydalanishi mumkin.

Ko'prik

OSX va .NET kabi platformalar dasturlash tillarining ko'pchiligini platformaning ishlash vaqtiga moslashtirish imkoniyatini taqdim etishiga qaramay, ushbu dasturlash tillari ko'pincha maqsadli ish vaqtini yodda tutishlari kerak - Maqsad-C asosan Obj-C ish vaqtini talab qiladi, C # esa CLR uchun xuddi shunday qiladi. Agar kimdir Obj-C ichida C # kodini ishlatishni xohlasa yoki aksincha bo'lsa, boshqa ish vaqtidan foydalanish uchun yozilgan versiyasini topishi kerak, ko'pincha u mavjud emas.

Ushbu muammoning keng tarqalgan versiyasi, o'zlarining ishlash vaqti va kutubxonalariga ega bo'lgan Java singari platformadan mustaqil bo'lgan tillardan foydalanishga tegishli. J # kabi asosiy tizimni chaqiradigan Java kompilyatorini yaratish mumkin bo'lsa ham, bunday tizim boshqa kompilyatsiya qilinmaguncha, boshqa Java kodlari bilan o'zaro aloqada bo'lolmaydi. Java kutubxonalarida kodga kirish qiyin yoki imkonsiz bo'lishi mumkin.

Ning ko'tarilishi veb-brauzer virtual operatsion tizim sifatida bu muammoni yanada keskinlashtirdi. Ostida zamonaviy "dasturlash" paradigmasi HTML5 o'z ichiga oladi JavaScript (JS) tili, Hujjat ob'ekti modeli asosiy kutubxona va brauzerning o'zi ish vaqti muhiti sifatida. CLS-da ishlaydigan JS versiyasini yaratish mumkin bo'lsa-da, lekin bu asosan operatsion brauzerlar uchun mo'ljallangan tilning maqsadini buzadi - agar bu kompilyator brauzer bilan bevosita aloqada bo'la olmasa, uni ishlatishda juda oz maqsad yo'q .

Bunday holatlarda va shunga o'xshash ko'p hollarda, ikkita ish vaqtini o'zaro ishlashga imkon beradigan tizimga ehtiyoj paydo bo'ladi. Bu ish vaqtlarini "ko'prik" sifatida tanilgan.

Misollar

olma

Bunga sabab bo'lgan dastlabki harakatlardan beri Apple ko'prik texnologiyalaridan sezilarli darajada foydalangan Mac OS X.

NeXT-ni birinchi marta Apple sotib olganida, reja o'sha paytda tanilgan OpenStep-ning yangi versiyasini yaratish edi Rapsodiya, bilan emulyator "klassik" Mac OS dasturlarini boshqaradigan Moviy quti sifatida tanilgan. Bu ishlab chiquvchilar jamoatchiligining orqaga qaytishiga olib keldi va Rapsodiya bekor qilindi.[1] O'z o'rnida, OS X ko'plab eski Mac OS chaqiruvlarini OpenStep-dagi asosiy funktsiyalarni amalga oshiradi va mavjud dasturlarning oldinga siljishi uchun yo'l beradi.

Buning uchun Apple OpenStep platformasidan foydali kodni oldi va yadro funktsiyasini sof-C kutubxonasida qayta nomlandi Asosiy fond, yoki qisqacha CF. CF kodini chaqiradigan OpenStep kutubxonalari Kakao API, Mac-ga o'xshash yangi C kutubxonalari esa Carbon API. Tizimning C va Obj-C tomonlari ma'lumot almashish uchun zarur bo'lganligi sababli va Obj-C tomonidagi ma'lumotlar odatda ob'ektlarda saqlangan (bazaviy turlardan farqli o'laroq), CF ga o'tish va undan o'tish juda qimmat bo'lishi mumkin. Apple ushbu ishlash jarimasini to'lashga tayyor emas edi, shuning uchun ular ushbu muammoni kamaytirish yoki yo'q qilishga yordam berish uchun "bepul ko'prik" deb nomlangan sxemani amalga oshirdilar.[2]

O'sha paytda, Java dasturlash dunyosining asosiy ishtirokchisiga aylanmoqda va Apple shuningdek, Java uchun ishlab chiqilgan ko'prik echimini taqdim etdi. WebObjects platforma. Java va OpenStep / CF turlari o'rtasida to'g'ridan-to'g'ri konversiyalar zarur bo'lganda kod bilan to'ldirilib, bu ko'proq klassik ko'prik echimi edi. Uglerod ostida CFStrings-dan foydalanadigan dastur NSString-dan foydalangan holda kakao ilovasi bilan bir xil kodni ishlatar edi va ikkalasi ham ko'prigi bepul bo'lishi mumkin edi. Java ko'prigi bilan CFStrings Java-ning o'z String moslamalariga tashlandi, bu esa ko'proq ishlashni talab qildi, lekin ko'chirishni aslida ko'rinmas holga keltirdi.[3] Boshqa ishlab chiquvchilar boshqa tillarni qo'llab-quvvatlash uchun shu kabi texnologiyalarni, shu jumladan Obj-C kodini .NET kodi ostida qo'ng'iroq qilishga imkon beradigan "peering" tizimidan keng foydalanishdi. Mono.[4]

Ushbu ko'chirish echimlariga ehtiyoj susayganligi sababli, uglerod va Java ko'prigi eskirgan va oxir-oqibat tizimning keyingi versiyalaridan olib tashlangan.[5][6] Java-ni qo'llab-quvvatlash Java mahalliy interfeysi (JNI), Java dunyosidan standart bo'lib, Java-ga C-ga asoslangan kod bilan o'zaro aloqada bo'lishga imkon berdi. OSX-da JNI Obj-C kodidan foydalanishga biroz qiyinchilik bilan ruxsat berdi.[7]

2012 yilga kelib Apple kompaniyasining keng ko'lamli ishlari WebKit imkon beradigan yangi ko'prik texnologiyasini joriy etishga olib keldi JavaScript Obj-C / Cocoa ish vaqtiga qo'ng'iroq qilish uchun dastur kodi va aksincha. Bu Obj-C yordamida brauzerni avtomatlashtirishga yoki navbat bilan JavaScript yordamida kakao dasturlarini avtomatlashtirishga imkon beradi. Dastlab Safari veb-brauzeri, 2013 yilda kod yangi OSX 10.9 ning bir qismi sifatida targ'ib qilindi.[8]

Microsoft

Ilgari ko'priklarni ishlatishga oid ba'zi bir misollar mavjud bo'lsa-da, Microsoft-ning CLI tizimi mahalliy ish vaqti va ko'prik ostida ishlash o'rniga, .NET tizimining yuqori qismida tillarni qo'llab-quvvatlashga mo'ljallangan edi. Bu CLI tizimida bir qator yangi tillarning amalga oshirilishiga olib keldi, ko'pincha ularning nomiga hash belgisi (#) yoki "Temir" qo'shildi. Ga qarang CLI tillari ro'yxati batafsilroq misollar to'plami uchun. Ushbu tushuncha MS ning misoli sifatida qaraldi quchoqlamoq, kengaytirmoq va o'chirmoq Java-ga o'xshash tillarni ishlab chiqarganligi sababli (C # va.) J # masalan) boshqa Java kodlari bilan ishlamagan yoki kutubxonalaridan foydalanmagan.

Shunga qaramay, Windows-ning "klassik" ekotizimi .NET dunyosida ishlatilishi kerak bo'lgan muhim kodlarni o'z ichiga oldi va bu vazifa uchun MS yaxshi qo'llab-quvvatlanadigan ko'prik tizimini taqdim etdi. Tizim .NET tizimida Windows yoki Visual Basic kodlaridan foydalanishni engillashtirish uchun ko'plab yordam dasturlari va til xususiyatlarini o'z ichiga olgan,[9] yoki aksincha.[10]

Microsoft shuningdek JavaScript ko'prik texnologiyasini taqdim etdi Kumush nur, HTML ko'prigi. Bridge JS turlarini .NET kodiga, .NET turlarini JS kodiga ta'sir qiladi va ular orasidagi xotira va kirish xavfsizligini boshqaradi.[11][12]

Boshqa misollar

Xuddi shu ko'prik texnologiyalari, ko'pincha JavaScript-ni bir tomonida, turli platformalarda keng tarqalgan. Masalan, JS ko'prigi Android OS misol sifatida yozilgan.[13]

Bu atama ba'zan ta'riflash uchun ham ishlatiladi ob'ekt-relyatsion xaritalash o'rtasida bo'linishni bartaraf etadigan tizimlar SQL ma'lumotlar bazasi dunyosi va zamonaviy ob'ekt dasturlash tillari.

Adabiyotlar