Цю статтю потрібно повністю переписати відповідно до Вікіпедії. (серпень 2020) |
Occam — мова паралельного програмування високого рівня, розроблена на початку 1980-х років групою вчених з Оксфорду під керівництвом [en] за завданням англійської компанії INMOS Ltd. в рамках робіт зі створення трансп'ютерів. Названий на честь англійського філософа XIV століття Вільяма Оккамського, а його сентенція, відома як бритва Оккама, є девізом проекту.
Occam | |
---|---|
Парадигма | конкурентні обчислення, процедурне програмування і імперативне програмування |
Дата появи | 1983 |
Творці | d |
Розробник | d |
Під впливом від | Взаємодія послідовних процесів |
Між мовою Occam і трансп'ютерами існує безпосередній зв'язок: INMOS-трансп'ютери спроектовані так, щоб об'єкти й конструкції Occam реалізовувалися у їхній системі команд найкращим чином. Фактично, трансп'ютер є «кремнієвою реалізацією» мови Occam. Довгий час INMOS стверджувала, що трансп'ютерам не потрібна система програмування типу «Асемблер», оскільки її цілком замінює Occam.
Проте, Occam є типовою мовою високого рівня, синтаксично схожою на Паскаль та Сі.
В основі мови лежить так звана CSP (концепція комунікуючих послідовних процесів), розроблена Тоні Гоаром. По суті, CSP — це формалізм для опису відповідної обчислювальної моделі, досить виразний, щоб на ньому можна було записувати та доводити теореми, досить потужний і однозначний, щоб бути мовою програмування (відомо кілька реалізацій). Згідно CSP, спочатку вводиться безліч елементарних подій (алфавіт), потім з них конструюються процеси, причому з тільки що описаних процесів можна будувати нові. Процеси, які виконуються паралельно, обмінюються інформацією, використовуючи безбуферний обмін інформацією типу «Рандеву» між парою процесів за допомогою спеціального об'єкта — каналу. При взаємодії той учасник обміну, який звернувся до каналу першим, чекає готовності партнера (точки рандеву); при настанні останньої ініціюється обмін. Використання загальної для декількох паралельних процесів пам'яті в CSP не допускається.
Базовим поняттям мови Occam є обчислювальний процес; основною характеристикою процесу є те, що він може бути розпочатий і завершений. У мові визначено кілька простих процесів: процес привласнення, процеси введення і виведення через канал (позначаються символами «?» і «!»), формальні процеси SKIP і STOP (перший завершується відразу ж, другий — ніколи), процеси читання таймера і таймерної затримки. Всі інші процеси можуть бути отримані ієрархічною побудовою. Для цієї мети Occam надає набір конструкторів процесів: SEQ (визначає процес послідовного виконання процесів), PAR (визначає процес паралельного виконання процесів), а також конструктор умовного процесу IF, циклічного процесу WHILE, процесу вибору процесів ALT. При цьому діє правило, згідно з яким процес типу SEQ і PAR вважається виконаним, коли завершені всі складові його процеси. Процеси можуть бути названі і викликані на ім'я з передачею параметрів. Процеси SEQ, PAR, IF і ALT можуть бути розмножені за допомогою реплікатору FOR. Процес ALT (як і PAR) додає в мову індетермінізм, позаяк вважається, що при одночасному виконанні декількох умов точно передбачити подальший хід подій неможливо.
приклад: Мультиплексор, нескінченно читає з масиву каналів in[] і передає в загальний канал out, використовуючи змінну temp WHILE TRUE INT temp : ALT i=0 FOR N in[i] ? temp out ! temp
приклад: Каскад мультиплексорів, які працюють одночасно. На вході — масив з M*N каналів in[], на виході — канал out. Масив з M каналів ch[] використовується для зв'язку між мультиплексорами каскаду: PAR -- каскад паралельних мультиплексорів вводу PAR i=0 FOR M -- M паралельних мультиплексорів, які обробляють по N каналів з in[] кожний WHILE TRUE INT temp : ALT j=i*N FOR N in[j] ? temp ch[i] ! temp WHILE TRUE -- мультиплексор, який читає M каналів ch[] INT temp : ALT i=0 FOR M ch[i] ? temp out ! temp
приклад: Процес буферизації вводу-виводу. Запуск процесу buffer( in, out, N) дозволяє каналу out відстати від каналу in на N повідомлень, які будуть буферизовані всередині процесу buffer: PROC buffer( CHAN OF INT in, out, INT N) CHAN OF INT in.wait, out.wait : INT n : -- лічильник буферизованих значень [N]INT buff : SEQ n:=0 PAR—input INT i, any: -- i — вказівка запису в буфер SEQ i:=0 WHILE TRUE SEQ WHILE n<(N-1) SEQ in ? buff[i] n:=n+1 IF n=1 out.wait ! any TRUE SKIP i:=(i+1) MOD N in.wait ? any—output INT j, any: -- j — вказівка читання з буферу SEQ j:=0 WHILE TRUE SEQ out.wait ? any WHILE n>0 SEQ out ! buff[j] n:=n-1 IF n=(N-2) in.wait ! any TRUE SKIP j:=(j+1) MOD N :
Вивчаючи приклади, слід мати на увазі, що символ «два мінуси» — означає початок коментаря до кінця рядка, а символ «крапка» може бути в Occam частиною ідентифікатора і не несе ніякого спеціального навантаження. Символ «двокрапка»: має значення «кінець опису». Occam чутлива до великих/малих букв у ідентифікаторах.
Цікавою особливістю мови Occam є включення індентації (відступів, «драбинки») в його синтаксис. Цей популярний і вельми виразний засіб виділення структури в Occam є єдиним способом вказівки області дії конструкторів. В ряду безумовних переваг такого рішення можна назвати зменшення кількості службових символів при записі конструкції (відпадає необхідність в словах типу BEGIN-END, або фігурних дужках) і стандартизація оформлення текстів, що підвищує їх читабельність.
Приклад важливості «драбинки»: SEQ proc1() PAR proc21() proc22() proc3() спершу тут буде виконаний процес proc1, потім буде паралельно виконуватися proc21 та proc22, і після закінчення найбільш тривалого з них починається proc3. Якщо змістити виклик proc3 на рівень вправо, то proc3 починається одночасно з proc21 і proc22: SEQ proc1() PAR proc21() proc22() proc3()
Версії та реалізації
Офіційно у складі TDS (Transputer Development System), компанією INMOS Ltd. були випущені реалізації Occam 1.0, Occam 2.0 і Occam 2.1. Після покупки компанії і згортання розробок по трансп'ютерному проекту, розробниками Occam була опублікована специфікація Occam 3. Пізніше група ентузіастів здійснила реалізацію мови Occam 2.5, яка являла собою Occam 2.1 з деякими нововведеннями з Occam 3. Останній же в повному обсязі реалізований не був.
Розвиток мови Occam ішов у бік додавання нових типів даних, високорівневих понять і засобів, що полегшують програмування.
Існують реалізації Occam для інших (не трансп'ютерних архітектур), в основному, аматорські.
Відомі також бібліотеки, які реалізують примітиви базової для Occam концепції CSP, що дозволяє програмувати в стилі Occam на інших мовах.
Дивитись також
Література
- Geraint Jones; Michael Goldsmith (2001). (англ.). Архів оригіналу за 21 грудня 2018. Процитовано 24 червня 2019.
Посилання
- CSP [ 1 лютого 2021 у Wayback Machine.]
- (Документация и реализации)
- The Transterpreter, «Транстерпретер», виртуальная occam-машина [ 3 березня 2017 у Wayback Machine.]
- KRoC — Kent Retargettable occam Compiler, реализация Occam 2.5 [ 15 липня 2020 у Wayback Machine.]
Цю статтю треба для відповідності Вікіпедії. (січень 2017) |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Cyu stattyu potribno povnistyu perepisati vidpovidno do standartiv yakosti Vikipediyi Vi mozhete dopomogti pererobivshi yiyi Mozhlivo storinka obgovorennya mistit zauvazhennya shodo potribnih zmin serpen 2020 Occam mova paralelnogo programuvannya visokogo rivnya rozroblena na pochatku 1980 h rokiv grupoyu vchenih z Oksfordu pid kerivnictvom en za zavdannyam anglijskoyi kompaniyi INMOS Ltd v ramkah robit zi stvorennya transp yuteriv Nazvanij na chest anglijskogo filosofa XIV stolittya Vilyama Okkamskogo a jogo sentenciya vidoma yak britva Okkama ye devizom proektu OccamParadigma konkurentni obchislennya procedurne programuvannya i imperativne programuvannyaData poyavi 1983Tvorci dRozrobnik dPid vplivom vid Vzayemodiya poslidovnih procesiv Mizh movoyu Occam i transp yuterami isnuye bezposerednij zv yazok INMOS transp yuteri sproektovani tak shob ob yekti j konstrukciyi Occam realizovuvalisya u yihnij sistemi komand najkrashim chinom Faktichno transp yuter ye kremniyevoyu realizaciyeyu movi Occam Dovgij chas INMOS stverdzhuvala sho transp yuteram ne potribna sistema programuvannya tipu Asembler oskilki yiyi cilkom zaminyuye Occam Prote Occam ye tipovoyu movoyu visokogo rivnya sintaksichno shozhoyu na Paskal ta Si V osnovi movi lezhit tak zvana CSP koncepciya komunikuyuchih poslidovnih procesiv rozroblena Toni Goarom Po suti CSP ce formalizm dlya opisu vidpovidnoyi obchislyuvalnoyi modeli dosit viraznij shob na nomu mozhna bulo zapisuvati ta dovoditi teoremi dosit potuzhnij i odnoznachnij shob buti movoyu programuvannya vidomo kilka realizacij Zgidno CSP spochatku vvoditsya bezlich elementarnih podij alfavit potim z nih konstruyuyutsya procesi prichomu z tilki sho opisanih procesiv mozhna buduvati novi Procesi yaki vikonuyutsya paralelno obminyuyutsya informaciyeyu vikoristovuyuchi bezbufernij obmin informaciyeyu tipu Randevu mizh paroyu procesiv za dopomogoyu specialnogo ob yekta kanalu Pri vzayemodiyi toj uchasnik obminu yakij zvernuvsya do kanalu pershim chekaye gotovnosti partnera tochki randevu pri nastanni ostannoyi iniciyuyetsya obmin Vikoristannya zagalnoyi dlya dekilkoh paralelnih procesiv pam yati v CSP ne dopuskayetsya Bazovim ponyattyam movi Occam ye obchislyuvalnij proces osnovnoyu harakteristikoyu procesu ye te sho vin mozhe buti rozpochatij i zavershenij U movi viznacheno kilka prostih procesiv proces privlasnennya procesi vvedennya i vivedennya cherez kanal poznachayutsya simvolami i formalni procesi SKIP i STOP pershij zavershuyetsya vidrazu zh drugij nikoli procesi chitannya tajmera i tajmernoyi zatrimki Vsi inshi procesi mozhut buti otrimani iyerarhichnoyu pobudovoyu Dlya ciyeyi meti Occam nadaye nabir konstruktoriv procesiv SEQ viznachaye proces poslidovnogo vikonannya procesiv PAR viznachaye proces paralelnogo vikonannya procesiv a takozh konstruktor umovnogo procesu IF ciklichnogo procesu WHILE procesu viboru procesiv ALT Pri comu diye pravilo zgidno z yakim proces tipu SEQ i PAR vvazhayetsya vikonanim koli zaversheni vsi skladovi jogo procesi Procesi mozhut buti nazvani i viklikani na im ya z peredacheyu parametriv Procesi SEQ PAR IF i ALT mozhut buti rozmnozheni za dopomogoyu replikatoru FOR Proces ALT yak i PAR dodaye v movu indeterminizm pozayak vvazhayetsya sho pri odnochasnomu vikonanni dekilkoh umov tochno peredbachiti podalshij hid podij nemozhlivo priklad Multipleksor neskinchenno chitaye z masivu kanaliv in i peredaye v zagalnij kanal out vikoristovuyuchi zminnu temp WHILE TRUE INT temp ALT i 0 FOR N in i temp out temp priklad Kaskad multipleksoriv yaki pracyuyut odnochasno Na vhodi masiv z M N kanaliv in na vihodi kanal out Masiv z M kanaliv ch vikoristovuyetsya dlya zv yazku mizh multipleksorami kaskadu PAR kaskad paralelnih multipleksoriv vvodu PAR i 0 FOR M M paralelnih multipleksoriv yaki obroblyayut po N kanaliv z in kozhnij WHILE TRUE INT temp ALT j i N FOR N in j temp ch i temp WHILE TRUE multipleksor yakij chitaye M kanaliv ch INT temp ALT i 0 FOR M ch i temp out temp priklad Proces buferizaciyi vvodu vivodu Zapusk procesu buffer in out N dozvolyaye kanalu out vidstati vid kanalu in na N povidomlen yaki budut buferizovani vseredini procesu buffer PROC buffer CHAN OF INT in out INT N CHAN OF INT in wait out wait INT n lichilnik buferizovanih znachen N INT buff SEQ n 0 PAR input INT i any i vkazivka zapisu v bufer SEQ i 0 WHILE TRUE SEQ WHILE n lt N 1 SEQ in buff i n n 1 IF n 1 out wait any TRUE SKIP i i 1 MOD N in wait any output INT j any j vkazivka chitannya z buferu SEQ j 0 WHILE TRUE SEQ out wait any WHILE n gt 0 SEQ out buff j n n 1 IF n N 2 in wait any TRUE SKIP j j 1 MOD N Vivchayuchi prikladi slid mati na uvazi sho simvol dva minusi oznachaye pochatok komentarya do kincya ryadka a simvol krapka mozhe buti v Occam chastinoyu identifikatora i ne nese niyakogo specialnogo navantazhennya Simvol dvokrapka maye znachennya kinec opisu Occam chutliva do velikih malih bukv u identifikatorah Cikavoyu osoblivistyu movi Occam ye vklyuchennya indentaciyi vidstupiv drabinki v jogo sintaksis Cej populyarnij i velmi viraznij zasib vidilennya strukturi v Occam ye yedinim sposobom vkazivki oblasti diyi konstruktoriv V ryadu bezumovnih perevag takogo rishennya mozhna nazvati zmenshennya kilkosti sluzhbovih simvoliv pri zapisi konstrukciyi vidpadaye neobhidnist v slovah tipu BEGIN END abo figurnih duzhkah i standartizaciya oformlennya tekstiv sho pidvishuye yih chitabelnist Priklad vazhlivosti drabinki SEQ proc1 PAR proc21 proc22 proc3 spershu tut bude vikonanij proces proc1 potim bude paralelno vikonuvatisya proc21 ta proc22 i pislya zakinchennya najbilsh trivalogo z nih pochinayetsya proc3 Yaksho zmistiti viklik proc3 na riven vpravo to proc3 pochinayetsya odnochasno z proc21 i proc22 SEQ proc1 PAR proc21 proc22 proc3 Versiyi ta realizaciyiOficijno u skladi TDS Transputer Development System kompaniyeyu INMOS Ltd buli vipusheni realizaciyi Occam 1 0 Occam 2 0 i Occam 2 1 Pislya pokupki kompaniyi i zgortannya rozrobok po transp yuternomu proektu rozrobnikami Occam bula opublikovana specifikaciya Occam 3 Piznishe grupa entuziastiv zdijsnila realizaciyu movi Occam 2 5 yaka yavlyala soboyu Occam 2 1 z deyakimi novovvedennyami z Occam 3 Ostannij zhe v povnomu obsyazi realizovanij ne buv Rozvitok movi Occam ishov u bik dodavannya novih tipiv danih visokorivnevih ponyat i zasobiv sho polegshuyut programuvannya Isnuyut realizaciyi Occam dlya inshih ne transp yuternih arhitektur v osnovnomu amatorski Vidomi takozh biblioteki yaki realizuyut primitivi bazovoyi dlya Occam koncepciyi CSP sho dozvolyaye programuvati v stili Occam na inshih movah Divitis takozhOpenMP Parallel computing Transp yuterLiteraturaGeraint Jones Michael Goldsmith 2001 angl Arhiv originalu za 21 grudnya 2018 Procitovano 24 chervnya 2019 PosilannyaCSP 1 lyutogo 2021 u Wayback Machine Dokumentaciya i realizacii The Transterpreter Transterpreter virtualnaya occam mashina 3 bereznya 2017 u Wayback Machine KRoC Kent Retargettable occam Compiler realizaciya Occam 2 5 15 lipnya 2020 u Wayback Machine Cyu stattyu treba vikifikuvati dlya vidpovidnosti standartam yakosti Vikipediyi Bud laska dopomozhit dodavannyam dorechnih vnutrishnih posilan abo vdoskonalennyam rozmitki statti sichen 2017