CAL aktyor tili - CAL Actor Language

CAL aktyor tili
ParadigmaDataflow
Birinchi paydo bo'ldi2001
PlatformaPlatformadan mustaqil
Fayl nomi kengaytmalari.cal, .xdf
Mayor amalga oshirish
RVC-CAL kompilyatorini oching, OpenDF doirasi

CAL (the Kal aktyor tili) a yuqori darajadagi dasturlash tili[1] yozish uchun (ma'lumotlar oqimi ) aktyorlar ma'lumotlar bazalarining kirish belgilarini (jetonlarni) chiqish oqimlariga o'zgartiradigan davlat operatorlari. CAL bir xil yadroli protsessorlar, ko'p yadroli protsessorlar va dasturlashtiriladigan turli xil maqsadli platformalarda to'plangan apparat. U bir nechta dastur sohalarida, shu jumladan ishlatilgan video va qayta ishlash, siqilish va kriptografiya. The MPEG Qayta sozlanadigan video kodlash (RVC)[2] ishchi guruh standartlashtirish ishlari doirasida CAL-ni qabul qildi.

Tarix va kirish

CAL aktyor tili 2001 yilda Ptolemey II loyihasi doirasida ishlab chiqilgan Kaliforniya universiteti da Berkli. CAL - bu multimediyani qayta ishlash, boshqarish tizimlari kabi turli xil dastur sohalariga yo'naltirilgan ma'lumotlar oqimi tili. tarmoqqa ishlov berish va boshqalar.

Ma'lumot oqimini tanlashning yana bir keng tarqalgan sababi shundaki, bu maqsad ketma-ket dasturlash tilidan foydalanish qiyin yoki imkonsiz bo'lgan samarali parallel amalga oshirishdir. Ketma-ket ketma-ket tillarni umuman parallel qilish juda qiyin, shuning uchun samarali parallel dasturlar odatda foydalanuvchidan muhim ko'rsatmalarni talab qiladi. CAL ma'lumotlar oqimi dasturi sodda, tushunarli va kuchli abstraktsiyalarni taqdim etadi, ular ko'p yoki ozroq xususiyatlarga ega bo'lishga imkon beradi. parallellik talab qilinadiganidek, hisoblash tizimining bir vaqtning o'zida tuzilishini ishlatadigan murakkab dasturlarni ishlab chiqarishga imkon beradigan vositalar.

Dataflow-da dasturlashda dasturchi odatda umumiy ketma-ketlik dasturidan farq qiladigan hisoblash tizimining bir vaqtda tavsifini tuzadi. An-ning bosqichma-bosqich bajarilishi bilan shug'ullanishdan ko'ra algoritm, ma'lumotlar oqimi dasturchisi tizim yaratadi asenkron ravishda aktyorlar deb nomlangan aloqador shaxslar. Dasturlash ishlarining katta qismi aktyorlar orasida muammoning yaxshi omilini topishga va ushbu aktyorlar o'rtasida tegishli aloqa usullarini yaratishga qaratilgan.

CAL xususiyatlari

Aktyorlarning tuzilishi

Aktyorlar o'zlarining hisob-kitoblarini "otishma" deb nomlangan bosqichlar ketma-ketligida bajaradilar. Ushbu qadamlarning har birida:

  • 1. aktyor kirish portlaridan nishonlarni iste'mol qilishi mumkin,
  • 2. u o'zining ichki holatini o'zgartirishi mumkin,
  • 3. u chiqish portlarida tokenlarni ishlab chiqarishi mumkin.

Binobarin, aktyorni tavsiflash uning tashqi interfeysini, portlarini, ichki holatining tuzilishini, shuningdek, bajarishi mumkin bo'lgan qadamlarni, ushbu qadamlarning nima qilishini (tokenlarni ishlab chiqarish va iste'mol qilish nuqtai nazaridan, shuningdek, aktyor holati) va aktyor qanday qadam tashlashi kerak ijro etish Keyingisi. Ushbu bo'limda ushbu masalalar bilan shug'ullanadigan CAL tilidagi ba'zi tuzilmalar muhokama qilinadi. Amallar aktyorning qadam tashlashi paytida yuz beradigan voqealarni tasvirlab bering. Darhaqiqat, qadam amalni bajarishdan iborat, deyish to'g'ri. Eslatib o'tamiz, aktyor bir qadam qo'yganda, kirish belgilarini iste'mol qilishi va chiqish belgilarini yaratishi mumkin.

Shuning uchun, kirish naqshlari quyidagilarni bajaradi:

  • Ular harakat bajarilganda (ishdan bo'shatilganda) sarflanadigan nishonlar sonini (har bir port uchun) belgilaydi.
  • Ular o'zgaruvchan belgilarni e'lon qilishadi, ular orqali harakatni o'qqa tutish uchun sarflangan belgilar nishonga yo'naltiriladi.
  • Ular harakatni otish shartini belgilaydilar, ya'ni harakatni otish uchun bajarilishi kerak bo'lgan shart.

Amalning chiqish tomoni biroz soddalashtirilgan, chiqadigan iboralar har bir chiqish portida har bir chiqish portida ishlab chiqariladigan chiqish belgilarining soni va qiymatlarini aniqlab beradi. Kirish naqshlari yoki chiqish iboralari qo'llaniladigan portning aniq nomlanishini qoldirish joizdir, agar harakat kirish portlari qancha bo'lsa, shuncha kirish naqshlarini yoki chiqish portlarini ko'rsatadigan darajada taqdim etsa. Bunday holda, naqshlar yoki iboralar port deklaratsiyasiga nisbatan pozitsiyaga mos keladi.

Aktyor haqida fikr yuritish usullaridan biri operator ma'lumotlar oqimlarida - tokenlar ketma-ketligi uni kirish portlariga kiritadi va belgilar ketma-ketliklari uni chiqish portlarida qoldiradi. Aktyorning ishlashini muhokama qilayotganda, ko'pincha unga oqimlar operatori sifatida qarash foydali bo'ladi. Aktyorlar parametrlarga ega bo'lishi mumkin. Ular aktyor ijro etilishida doimiylik vazifasini bajaradilar va aktyor aktyorlar tarmog'ining bir qismi sifatida qo'zg'alganda aniq qiymat beriladi. Aktyor parametrlarining asosiy maqsadi - dasturchilarga ko'pgina kodlarni takrorlamasdan, qarindosh aktyorlarning oilalarini ko'rsatishga imkon berish.

Determinizm

A deterministik bo'lmagan aktyor - bir xil kirish ketma-ketligi uchun bir nechta yugurish va bir nechta mumkin bo'lgan chiqishga imkon beradigan narsadir. Determinizm mos ravishda ishlatilganda juda kuchli bo'lishi mumkin, ammo bu juda xavfli xatolar manbai bo'lishi mumkin. Alohida tashvish shundaki, noaniq determinizm aktyorga beixtiyor kiritilishi mumkin, ya'ni muallif aktyor bunday bo'lmasa ham, deterministik deb o'ylaydi. CAL tilini loyihalashtirishning asosiy maqsadlaridan biri bu deterministik bo'lmagan aktyorlarning tavsifiga imkon berish edi, shu bilan birga mumkin bo'lmagan determinizm manbalarini aniqlash uchun vositalarga ruxsat berib, foydalanuvchini ular haqida ogohlantirishi mumkin edi.

Kabi deterministik bo'lmagan aktyorning asosiy natijasi NDMerge Haqiqiy ijro paytida uning chiqishi uni kiritish vaqtiga bog'liq bo'lishi mumkin. Agar uning ikkala kirish navbati bo'sh bo'lsa va NDMerge kirishni kutmoqda, keyin keyingi belgi keladigan har qanday chiqish chiqishi yonida ko'chirilgan bo'lishi mumkin. Binobarin, aktyorlar tarmog'idagi tadbirlarning rejalashtirilganligi yoki aktyorga o'xshash aktyorning ovqatlanish tezligining nisbiy tezligi. NDMerge tizimning chiqishiga ta'sir qilishi mumkin. Bu vaqti-vaqti bilan, xohlagan holda, ba'zida esa bunday bo'lmasligi mumkin. Har qanday holatda ham, bu odam bilishi kerak bo'lgan xususiyatdir.

Aktyorni tokenlarni kelish vaqtining aniq vaqtiga bog'liq bo'lishiga olib keladigan turdagi determinizmni ko'rib chiqishning bir usuli shundaki, bunday aktyor faqat oqimlar operatori sifatida qaraladigan bo'lsak, u deterministik bo'lmagan ko'rinadi. ijro etishning vaqtinchalik xususiyatlaridan va shu tariqa harakatlar otishma ketma-ketligini aniqlash uchun foydalaniladigan ma'lumotni maqsadli ravishda yo'q qiladi. CAL tili nuqtai nazaridan bu mutlaqo to'g'ri emas, ammo shunga qaramay, biz jetonlar vaqti va aktyorni amalga oshirish vaqtlari to'g'risida hamma narsani bilsak ham, deterministik bo'lmagan deterministik bo'lmagan aktyorlarni yozish oson, masalan. quyidagi:

Himoyalangan harakatlar

Harakatning qo'riqlash bandi, harakatni o'qqa tutish uchun hamma to'g'ri bo'lishi kerak bo'lgan bir qator iboralarni o'z ichiga oladi. Birinchi harakatni yoqib yuborish uchun kiruvchi belgi nolga teng yoki kattaroq bo'lishi kerak, bu holda u chiqishga yuboriladi P. Aks holda, bu harakat olov qila olmaydi. Aksincha, ikkinchi harakatni o'qqa tutish uchun token noldan kam bo'lishi kerak, u holda u N chiqish uchun yuboriladi, bu aktyorning yugurishi shunday ko'rinishi mumkin: agar aktyor hech qachon duch kelmasa, muammoga duch kelishi mumkin nol belgisi, chunki uning biron bir harakati unga o't qo'yolmaydi.

Ba'zi bir ma'lumotlarga ko'ra tugaydigan aktyorlarni yozish noqonuniy emas va aslida ba'zi tizimlarda ularning bir nechtasi bo'lishi muhim bo'lishi mumkin. Ammo bu odam o'zi bilishi kerak bo'lgan tuzoqdir. Ikkinchidan, qo'riqlash shartlari ham to'liq bo'lishidan tashqari, bir-biriga mos kelmaydi.

Va nihoyat, qo'riqchilarning shartlari kelib tushayotgan jetonlarni aslida ularni iste'mol qilmasdan "ko'zdan kechirishi" mumkinligiga e'tibor bering - agar qo'riqchilar yolg'on bo'lsa yoki harakat boshqa sabablarga ko'ra ishdan bo'shatilmagan bo'lsa va agar belgi boshqa harakat bilan iste'mol qilinmasa, u holda turgan joyida qoladi va keyingi otish uchun mavjud bo'ladi. (Yoki u erda abadiy qoladi, xuddi oldidagi nol belgisi kabi SplitDead, bu hech qachon o'chirilmaydi, chunki aktyor o'lgan.)

Quyidagi Select aktyor - himoyalangan harakatlardan foydalanishning yana bir misoli. Bu o'xshash NDMerge aktyor, ikkita oqimni birlashtirishi ma'nosida (uning A va B kirish portlariga keladigan oqimlar). Biroq, buni unga kelgan belgilarning (mantiqiy) qiymatlariga muvofiq amalga oshiradi S kirish porti.

Davlat bilan aktyorlar

Hozirgacha barcha aktyorlarda bironta o'q otish hech qanday ta'sir ko'rsatmasdan, xuddi shu aktyorning keyingi harakatlariga ta'sir qilmaydi. Vaziyat o'zgaruvchilaridan foydalanib, harakatni to'xtatish, xuddi shu aktyorning bir xil yoki boshqa harakatlarini keyingi o'qqa tutish uchun ma'lumot qoldirishi mumkin. Ushbu aktyorning yozilish usuli, keyingi kirish belgisini tanlash va tokenni chiqishga haqiqiy nusxalash bitta atom qadamidir.

Va ni tanlang IterSelect deyarli, lekin to'liq emas, tengdir. Birinchidan, IterSelect bir xil miqdordagi tokenlarni qayta ishlash uchun ikki baravar ko'p qadamlarni bajaradi. Ikkinchidan, u mos keladigan ma'lumot belgilarining mavjud bo'lishidan qat'i nazar, S kirish ma'lumotlarini o'qiydi va shuning uchun sarflaydi. A yoki B.

Jadvallar

The IterSelect oldingi bo'lim aktyori harakatlar tanlanishini boshqarish uchun holatdan foydalanishni tasvirlab berdi. Bu amalda juda keng tarqalgan narsa, va CAL tili bu maqsad uchun jadvallar ko'rinishida maxsus sintaksisni taqdim etadi. Kontseptual ravishda, jadvallarni holat o'zgaruvchisidan foydalanishning ma'lum bir namunasini kodlash deb hisoblash mumkin - ular ekspresivlik nuqtai nazaridan tilga hech narsa qo'shmaydi. Jadvallardan foydalanish asoslari ikki xil:

  1. Odatda ularni ishlatish osonroq va xato o'zgaruvchan holat o'zgaruvchisi va ko'plab qo'riqchilar va topshiriqlardan foydalanishga qaraganda kamroq.
  2. Asboblar jadvalda kodlangan ma'lumotlardan osonroq foydalanishi mumkin va shu bilan aktyorda yanada samarali kod ishlab chiqarishga yordam beradigan yoki amalga oshirish va loyihalashga yordam beradigan boshqa tahlillarni o'tkazadigan muntazamliklarni tan olishi mumkin.

Har bir holat o'tish jarayoni uch qismdan iborat: asl holat, harakatlar teglari ro'yxati va quyidagi holat. Shunisi e'tiborga loyiqki, aksiyalar soni ko'paygan - dastlabki uchta o'rniga, jadval bilan yangi versiyada to'rtta harakat mavjud. Sababi, harakat endi to'g'ridan-to'g'ri voris holatini tayinlay olmaydi, chunki asl nusxada bo'lgani kabi, bu erda ma'lumotni o'qish holatining qiymatiga qarab 1 yoki 2 qiymati beriladi. Jadvalga ega versiyada holat modifikatsiyasi davlat mashinasi tarkibida yashirin bo'lib, u qaysi harakatning yonishiga qarab sodir bo'ladi. Shunga ko'ra, jetonning qiymatini tekshiradigan shart harakat tanasi ichidan ikkita harakatning qo'riqchilariga o'tdi o'qingT va readF.

Afzalliklar

Agar u faqat kirish portlaridan biriga kirgan bo'lsa, hamma narsa shubhasizdir. Ammo, xuddi NDMerge singari, har ikkala kirish portida ham kirish imkoni bo'lishi bilan, u ikkala harakatning ham birini yoqib yuborishi mumkin va bu aktyor spetsifikatsiyasida uni boshqasini tanlashga majbur qiladigan hech narsa yo'q.

Hozircha hech qanday til konstruktsiyalari bunga imkon bermaydi. Ushbu jadvallardan farqli o'laroq, ko'rib chiqilishi mumkin sintaktik shakar chunki ular tilning mavjud elementlariga (davlat o'zgaruvchilari, qo'riqchilar va topshiriqlar) qisqartirilishi mumkin, bu holat aslida haqiqiy kengayishni talab qiladi - harakatlarning ustuvorliklari. Asosiy g'oya - harakatlarning o'q otish ustunligi bilan bog'liq bo'lgan bir qator tengsizlikni qo'shish.

Jadvallarda bo'lgani kabi, biz keyinroq murojaat qilishni istagan harakatlarni aniqlash uchun harakatlar teglaridan foydalanamiz - bu safar ustuvor tengsizlik ichida. Prioritetlar bloki faqatgina bitta tengsizlikni o'z ichiga oladi, bu amal qilingan konfiguratsiyani bitta teglangan jarayonga taalluqli bo'lib, ikkinchisiga nisbatan oldingi ustunlikni beradi. Albatta, hatto ushbu versiya ham vaqtga bog'liq. Bunday holda, bu muammo bo'lishi shart emas va aslida ushbu aktyorga o'z vazifasini bajarishi kerak bo'lgan talab bo'lishi mumkin. Ammo umuman olganda, to'g'ri natijalarga erishish uchun ustuvorliklar, ayniqsa avvalgi misolda ishlatilganda, yaxshi tushunilishi kerakligini tushunish muhimdir. Ayniqsa, tarmoq ichidagi aloqa vaqti haqida ma'lumot noaniq bo'lsa, ularni amalga oshirishning kuchli ko'rsatmalari deb o'ylash yaxshidir.

Bayonotlar va iboralar

Oldingi bobda, asosan, aktyorga xos tushunchalar bilan bog'liq bo'lgan CAL-dagi konstruktsiyalarga e'tibor qaratildi - token kirish va chiqish, harakatlar, harakatlarni tanlashni boshqarish va boshqalar. Ushbu bo'limda CALning ko'proq "piyodalar" qismlari, ma'lumotlar ob'ektlari va ekspres (ketma-ket) algoritmlarni boshqarish uchun ishlatiladigan iboralar va iboralar muhokama qilinadi. Tilning ushbu qismi ko'plab protsessual dasturlash tillarida mavjud bo'lgan narsalarga o'xshaydi (masalan C, Paskal, Java, Ada ), shuning uchun biz CAL-da biroz boshqacha bo'lishi mumkin bo'lgan sohalarga e'tibor qaratamiz.

Ifodalar

C kabi tillardan farqli o'laroq, CAL so'zlar va iboralar o'rtasida juda katta farq qiladi. Ular juda aniq rollarga, juda aniq ma'nolarga ega va ularni hech qachon bir-birining o'rnida ishlatib bo'lmaydi. CAL-dagi ifoda kodning bir qismi bo'lib, uning maqsadi faqat qiymatni hisoblashdir. Shuningdek, biz ifodaning qiymatga ega ekanligini yoki uni qiymatga qarab baholashini aytamiz. Ko'pgina iboralar uchun ular baholaydigan qiymat bir yoki bir nechta o'zgaruvchining qiymatiga bog'liq bo'ladi, bu ifoda baholanganda. O'zgaruvchan qiymatlar vaqt o'tishi bilan o'zgarishi mumkin bo'lganligi sababli, bir xil ifoda vaqtning turli nuqtalarida baholanganda har xil qiymatlarga ega bo'lishi mumkin.

Atom ifodalari

Ehtimol, eng asosiy iboralar doimiydir. Asosiy iboralarning yana bir guruhi - o'zgaruvchan havolalar. Sintaktik ravishda, o'zgaruvchi - bu har qanday harflar ketma-ketligi va raqamlar. Ning muhim xususiyati iboralar o'zgaruvchini o'zgartirmaslik kafolatlanganligi (bizda ularning nojo'ya ta'siri yo'q), demak, ifoda ichida bir xil o'zgaruvchiga bir nechta murojaat har doim bir xil natijani beradi.

Oddiy kompozitsion iboralar

CAL iboralar yaratish uchun ikki xil operatorlarga imkoniyat beradi: unary va [[Ikkilik amal} ikkilik]]. CAL-dagi unary operator har doim prefiks operatoridir, ya'ni u bitta operandidan oldin paydo bo'ladi. Ikkilik operator uning ikkita operandasi orasida bo'ladi.

Bayonotlar

Ba'zi yo'llar bilan, bayonotlar CAL-da iboralarning aksi: ular "qaytish qiymati" ga ega emas, lekin ular o'zgaruvchilar qiymatlarini o'zgartirishi mumkin. Darhaqiqat, o'zgaruvchilar qiymatlarini o'zgartirish - bu bayonotlarning butun mohiyati. Bayonotlar qat'iy ketma-ketlikda bajariladi va boshqacha ko'rsatilmagan bo'lsa, bayonotlarning bajarilishi dastur matnida qanday tartibda paydo bo'lsa, demak, bayonot tomonidan ishlab chiqarilgan har qanday o'zgaruvchan o'zgarishlar keyingi bayonotlarning bajarilishiga ta'sir qilishi mumkin.

Boshqarish oqimi

Ko'pgina boshqa dasturlash tillarida bo'lgani kabi, dastur ichidagi bayonotlarning bajarilish tartibini boshqarish uchun tuzilmalar mavjud. Ushbu tsiklning to'g'ridan-to'g'ri "har biriga kalit so'z - bu generator, xuddi ro'yxatdagi kabi.

Amal

  • Kirish naqshlari: o'zgaruvchilarni e'lon qilish
  • Qo'riqchi: shartlarni belgilash
  • Chiqish ifodalari: hisoblash belgilarini hisoblash
  • Asosiy qism: aktyor holatini o'zgartirish

Qo'llab-quvvatlash vositalari

OpenDF doirasi

RVC-CAL kompilyatorini oching

Adabiyotlar

  1. ^ CAL tili bo'yicha hisobot: CAL aktyor tilining spetsifikatsiyasi, Yoxan Eker va Yorn V. Janneck, Texnik Memorandum № UCB / ERL M03 / 48, Kaliforniya universiteti, Berkli, Kaliforniya, 94720, AQSh, 2003 yil 1-dekabr.
  2. ^ MPEG-ning qayta sozlanadigan video kodlash doirasiga umumiy nuqtai, Shuvra S. Battacharyya, Yoxan Eker, Yorn V. Yannek, Kristof Lyukars, Marko Mattavelli, Mikel Raulet, Signalni qayta ishlash tizimlari jurnali, 2009 yil, Springer

Tashqi havolalar