Кіріспе

Компьютерлік ғылымда алғаш рет 1973 жылы жарияланған Актер моделі - бір мезгілде есептеудің математикалық моделі.

Жағдайлар реті мен жаһандық жағдай

Актерлік модельді анықтаудағы негізгі қиындық - ол жаһандық жағдайларды қамтамасыз етпегендіктен, есептеу қадамын бір жаһандық жағдайдан келесі жаһандық жағдайға өту ретінде анықтауға болмайды, өйткені бұл барлық алдыңғы есептеу модельдерінде жасалған. 1963 жылы Жасанды интеллект саласында Джон Маккарти Ситуациялық калькульда логикадағы жағдайлық айнымалыларды енгізді. 1969 жылы Маккарти мен Хейс жағдайды "уақыт сәтіндегі ғаламның толық жағдайы" деп түсіндіреді. Осыған байланысты Маккарти жағдайлары Актер моделіне қолдануға жарамсыз, өйткені оның жаһандық жағдайы жоқ. Актердің анықтамасынан көптеген оқиғалардың орын алуын көруге болады: жергілікті шешімдер, Актерлерді құру, хабарлама жіберу, хабарламалар қабылдау және келесі хабарламаға қалай жауап беру керектігін белгілеу. Мұндай оқиғалардың ішінара реттелгендігі Актер модельінде аксиоматизацияланды және олардың физикамен қарым-қатынасы зерттелді (Актер модельінің теориясын қараңыз).

Физикамен байланысы

Хьюиттің (2006) айтуынша, Актер моделі математикалық логикаға, көпшілік теориясына, алгебраға және т.б. негізделген басқа есептеу модельдеріне қарағанда физикаға негізделген. Физика Актер моделінің көптеген бағыттарына, әсіресе кванттық физика мен релятивистік физикаға әсер етті. Бір мәселе - Actor жүйелері туралы не байқауға болады. Бұл сұраққа нақты жауап жоқ, өйткені ол кванттық физика негіздерін құру кезінде туындаған теориялық және байқаушылық қиындықтарға ұқсас. Актерлік жүйелер үшін нақты жағдайда, әдетте, біз Актер үшін хабарламалардың келу тәртібі анықталатын мәліметтерді байқай алмаймыз (бір мезгілде есептеудегі белгісіздікті қараңыз). Бұл нәтижеге әсер етеді және тіпті басқа жаққа да жылжытады. Мысалы, электроникадағы метастабильділікті қараңыз. Актерлік есептеулердің аралық процестерінің ішкі жақтарын бақылаудың орнына біз нәтижелерді күтеміз.

Actor моделіне дейінгі модельдер

Актерлік модель алдыңғы есептеу модельдеріне негізделген.

Симулятор

Simula 67 дискретті оқиғаларды симуляциялау қолданбалары арқылы хабарды есептеу үшін пайдалануды бастады. Бұл қолданбалар алдыңғы симуляция тілдерінде үлкен және модульсіз болды. Әрбір уақыт қадамында үлкен орталық бағдарламаға әр симуляция объектісінің жағдайын жаңарту керек, ол сол қадамда өзара әрекеттескен кез келген симуляция объектісінің жағдайына байланысты өзгерді. Кристен Найгаард пен Оле Йохан Даль идеясын (алғаш рет 1967 жылы IFIP семинар-тренингінде сипатталған) әр объектінің басқа объекттердің хабарламаларына негізделген өзінің жергілікті жағдайын жаңартатын әдістерін әзірлеу идеясын әзірледі. Сонымен қатар олар мұрагерлік объектілер үшін сынып құрылымын енгізді. Олардың жаңалықтары бағдарламалардың модульділігін айтарлықтай жақсартты. Алайда, Simula шын бір мезгілдестіктің орнына coroutine басқару құрылымын қолданды.

Кішкене әңгіме

Алан Кей Smalltalk 71 бағдарламасын әзірлеуде Planner-ді шақыру үлгісінде хабарламаларды жіберу арқылы әсер еткен. Хьюитт Smalltalk 71 бағдарламасына қызығушылық танытты, бірақ оны көптеген өрістермен, соның ішінде жаһандық, жіберуші, қабылдаушы, жауап беру стилі, мәртебесі, жауап, оператор таңдаушысы және т.б. шақыруды қамтитын байланыстың күрделілігі тоқтатты. 1972 жылы Кей MIT-ге барып, Сеймур Паперттің Logo еңбегі мен балаларға бағдарламалауды үйрету үшін қолданылатын "кішкентай адам" есептеу моделінің негізінде Smalltalk 72 үшін кейбір идеяларын талқылады. Алайда, "Smalltalk 72" бағдарламасының хабарларын жеткізу өте күрделі болды. Аудармашы тілдегі кодты тек белгілер ағыны ретінде қарастырды. Ден Ингаллс кейіннен сипаттағандай: (программада) кездескен алғашқы (токен) келесі хабарламаның алушысын анықтау үшін динамикалық контекстте қаралды. Атау іздеу ағымдағы белсендірудің сынып сөздігімен басталды. Бұл жерде сәтсіздікке ұшыраса, ол сол белсенділіктің жіберушісіне және сол сияқты жіберуші тізбегіне көтеріледі. Токен үшін байлау табылған кезде, оның мәні жаңа хабарламаның қабылдағышы болды, ал интерпретатор сол объектінің класы үшін кодты іске қосты. Осылайша Smalltalk 72-дегі хабарламаны өткізу моделі белгілі бір машина моделіне және бағдарламалау тілінің синтаксисіне тығыз байланысты болды, ол бір мезгілдестікке берілмеді. Сонымен қатар, жүйе өзінен-өзі басталғанмен, тіл конструкциялары Eval хабарламаларына жауап беретін объектілер ретінде ресми түрде анықталмаған (төмендегі талқылауды қараңыз). Бұл кейбір адамдарға хабарды өткізуге негізделген бір мезгілде есептеудің жаңа математикалық моделі Smalltalk 72-ден қарапайым болуы керек деп сенуге әкелді. Smalltalk тілінің кейінгі нұсқалары негізінен бағдарламалардың хабарламаларды өткізу құрылымында Simula виртуалды әдістерін пайдалану жолын ұстанды. Алайда Smalltalk 72 бүтін сандар, жылжымалы нүктелі сандар және т.б. сияқты примитивтерді жасады. нысандарға айналдыру. Simula авторлары мұндай примитивтерді нысандарға айналдыруды қарастырды, бірақ тиімділік себептерімен көбінесе бас тартты. Java бастапқыда бүтін сандардың, жылжымалы нүктелі сандардың және т.б. бастапқы және объекттік нұсқаларын пайдаланудың тиімділігін қолданды. C# бағдарламалау тілі (жана Java-ның кейінгі нұсқалары, Java 1.5 бастап) бокстау мен бокссыздануды пайдаланудың әдепсіз шешімін қабылдады, оның нұсқасы бұрын кейбір Lisp іске асырылуларында қолданылған болатын. Smalltalk жүйесі өте ықпалды болды, бит карта дисплейлерінде, жеке компьютерлерде, сынып браузерінің интерфейсінде және басқа да көптеген жолдарда инновация жасады. Толығырақ "Кейдің кішігірім әңгімелерінің ерте тарихы" кітабынан қараңыз. Осы арада MIT-дегі Actor-тің күш-жігері жоғары деңгейдегі бір мезгілдестіктің ғылым мен инженериясын дамытуға бағытталған. (Жан Пьер Бриоттың Smalltalk-тің кейінгі нұсқаларына кейіпкердің бір мезгілдестігін қалай енгізу туралы ойлар туралы қараңыз.)

Петри торлары

Актерлік модельдің дамуына дейін Петри желілері нондетерминистік есептеулерді модельдеу үшін кеңінен қолданылған. Алайда, олардың маңызды шектеулілігі бар екені кеңінен танылды: олар басқару ағынын модельдейді, бірақ дерек ағыны емес. Нәтижесінде, олар оңай құрастырылмайды, осылайша олардың модульділігін шектейді. Хьюит Петри торларының тағы бір қиындыққа тоқталды: бір мезгілде әрекет ету. Яғни, Петри желілеріндегі есептеудің атомдық қадамы - бұл өтпелі кезеңнің кіріс орындарынан бір мезгілде жоғалып, шығыс орындарында пайда болатын токендер. Бұл түрдегі бір мезгілделікпен примитивті қолданудың физикалық негізі оған күмәнді көрінді. Осы көрнекті қиындықтарға қарамастан, Петри желілері бәсекелестікті модельдеудің танымал тәсілі болып табылады және әлі де белсенді зерттеудің тақырыбы болып табылады.

Сызықтар, бұғаттамалар және буферлер (каналдар)

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

Жүзеге асырудың егжей-тегжейін талдау

Actor моделін анықтаудағы маңызды мәселе - іске асырудың егжей-тегжейін ажырату болды. Мысалы, келесі сұраққа назар аударыңыз: "Әрбір Актердің өз хабарламалары Актер қабылдағанға дейін сақталатын кезегі бар ма?" Карл Хьюит актерлік модельдің ажырамас бөлігі ретінде осындай кезектерді қосуға қарсы болды. Бір ескерту, мұндай кезектер өздері хабарларды және коммуникацияларды алатын актерлер ретінде үлгіленуі мүмкін. Тағы бір мәселе, кейбір актерлер мұндай кезектерді нақты іске асыру кезінде қолданбайды. Мысалы, Актерде төрешілердің желісі болуы мүмкін. Әрине, математикалық абстракция бар, ол - Актер алған хабарлардың реті. Бірақ бұл тізбектегілер актердің әрекетін ғана көрсетеді. Шын мәнінде, осы реттіліктің ретін анықтау мүмкін емес (бір мезгілде есептелген кездегі белгісіздікті қараңыз). Актёрлік модельдің ажырамас бөлігі болуы керек пе?" деген сұраққа жауап беру керек. Түсіндіру идеясы - актердің бағдарламалық скрипттің хабарларды қалай өңдегенімен анықталады. (Бұл жолмен Актерлер Lisp-ке ұқсас түрде анықталады, ол Lisp-те жазылған деп аталатын мета шеңберлі аудармашы процедурасымен "таңдалады"). Хьюит интерпретацияны Актер моделіне интегралды етуді қарсы алды. Бір ескерту, хабарларды өңдеу үшін Актердің бағдарламалық сценарийде бағдарламалық сценарий болуы керек еді (оның өз кезегінде болуы керек еді)! Тағы бір мәселе, кейбір актерлер өздерінің шынайы түсіндірулерінде аудармалық әдісті қолданбайды. Мысалы, Actor аппараттық құралда іске асырылуы мүмкін. Әрине, түсіндірудің өзі жаман емес. Сондай-ақ, хабарламаларды пайдаланатын аудармашыларды іске асыру Lisp-тің монолитті аудармашы тәсілінен гөрі модульді және кеңейтілетін.

Операциялық модель

Дегенмен, модельді дамытудың прогресі тұрақты болды. 1975 жылы Айрин Грайф өзінің диссертациясында алғашқы операциялық модельді жариялады.

Схема

Джеральд Сассман мен Гай Стил кейінірек актерлерге қызығушылық танытты және олардың схемалық аудармашы туралы мақала жариялады, онда олар "біз 'актерлер' мен ламбда өрнектерінің іске асырылуы бірдей екенін анықтадық" деп қорытындылады. Хьюиттің айтуынша, ламбдалық есептеу параллелизмнің кейбір түрлерін білдіре алады, бірақ, жалпы алғанда, Актер моделіне сәйкес емес. Екінші жағынан, Актер моделі барлық параллелизмді Ламбда-калькулда көрсете алады.

Актерлер үшін заңдар

Грайф өзінің операциялық моделін жариялағаннан екі жыл өткен соң, Карл Хьюит және Генри Бейкер актерлер үшін заңдарды жариялады.

Есептелетін функциялардың сабақтастығын дәлелдеу

Актерлік модельдің заңдарын пайдаланып, Хьюит пен Бейкер кез келген функцияға ұқсайтын кез келген Актер Дана Скотт анықтаған мағынада үздіксіз екенін дәлелдеді (денотациялық семантиканы қараңыз).

Анықтамалар мен дәлелдемелер

Аки Йонезава өзінің Актерлер үшін спецификациясын және тексеру әдістерін жариялады. Рас Аткинсон мен Карл Хьюит сериализаторлардың спецификациясы мен дәлелдеу әдістері туралы мақала жариялады, бұл қатарлас бақылау үшін ортақ ресурстарды капсулалаудың тиімді шешімін ұсынады.

Домен теориясын пайдалана отырып математикалық сипаттама

Ақырында, алғашқы Актер жарияланғанынан сегіз жыл өткен соң, Уилл Клингер (Ирен Грейфтің 1975 жылғы еңбегіне сүйене отырып, Гордон Плоткин 1976, Майкл Смит 1978, Генри Бейкер 1978, Франц, Хоар, Леман және де Ровер 1979, Милн және Милнор 1979) 1981 жылы өзінің диссертациясында домен теориясын пайдалана отырып, шексіз нондетерминизмді қамтитын алғашқы қанағаттанарлық математикалық денотациялық модельді жариялады (Клингердің моделін қараңыз). Кейіннен Hewitt [2006] диаграммаларды келу уақыттарымен кеңейтіп, түсіну оңай, техникалық қарапайым белгілік модельді жасады. Денотациялық семантиканың тарихы.