Joyce (programovací jazyk) - Joyce (programming language) - Wikipedia
![]() | Tento článek má několik problémů. Prosím pomozte vylepši to nebo diskutovat o těchto problémech na internetu diskusní stránka. (Zjistěte, jak a kdy tyto zprávy ze šablony odebrat) (Zjistěte, jak a kdy odstranit tuto zprávu šablony)
|
Paradigma | souběžně, rozkazovací způsob, strukturovaný |
---|---|
Rodina | Wirth Pascal |
Navrhl | Per Brinch Hansen |
Poprvé se objevil | 1987 |
Stabilní uvolnění | 1 / 1987 |
Psací disciplína | Silný |
Ovlivněno | |
Komunikace postupných procesů, Pascal, Souběžný Pascal | |
Ovlivněno | |
SuperPascal |
Joyce je bezpečný programovací jazyk pro souběžné výpočty navrhl Per Brinch Hansen v 80. letech.[1] Je založen na sekvenčním jazyce Pascal a principy komunikující sekvenční procesy (CSP). Byl vytvořen s cílem řešit nedostatky CSP, které mají být použity jako programovací jazyk, a poskytnout nástroj, zejména pro výuku, pro distribuované výpočty implementace systému.
Jazyk je založen na konceptu agenti; souběžně prováděné procesy, které komunikují pouze pomocí kanálů a předávání zpráv. Agenti mohou aktivovat subagenty dynamicky a rekurzivně. Vývoj Joyce tvořil základ jazyka SuperPascal, vyvinutý také Hansenem kolem roku 1993.
Funkce
Joyce je založen na malé podskupině Pascal, rozšířené o funkce inspirované CSP pro souběžnost.[2] V následujících částech jsou popsány některé z novějších funkcí, které byly představeny.
Agenti
Agent je procedura skládající se ze sady příkazů a případně vnořených definic dalších agentů. Agent může dynamicky aktivovat podřízené subjekty, které provádějí souběžně se svými tvůrce. Agent může ukončit pouze v případě, že byly ukončeny také všechny jeho podřízené subjekty. Například agent proces2
aktivuje proces1
:
činidlo proces1(X, y: celé číslo);začít ...konec;činidlo proces2();použití proces1;začít proces1(9, 17);konec;
Aktivace agenta vytváří nové instance všech lokální proměnné a hodnota každého formálního parametru je zkopírována do místní proměnné. Agenti proto nemají přístup proměnné jiných agentů a smí komunikovat pouze pomocí kanálů. Toto omezení zabraňuje problémům spojeným s používáním sdílených proměnných, jako je podmínky závodu.
Sdělení
Agenti komunikují prostřednictvím volaných entit kanály. Kanály mají abecedu, která definuje sadu symbolů, které mohou být přenášeny. Kanály jsou vytvářeny dynamicky a jsou přístupné pomocí přístav proměnné. Typ portu je definován odlišnou sadou symbolů tvořících jeho abecedu. Symboly s více hodnotami jsou definovány konkrétním typem. Například:
proud = [int(celé číslo), eos];
Symbol int (celé číslo)
označuje a zpráva symbol volal int
jakékoli celočíselné hodnoty. Druhá deklarace symbolu bez typu eos
(konec proudu) je pojmenován a signál. Jakmile je definován typ portu, lze deklarovat proměnnou portu tohoto typu:
ven : proudv : proud
A pak entitu kanálu, interní pro agenta, který ji vytváří, lze aktivovat následovně:
+ven;
Symboly lze poté odesílat a přijímat na kanálech pomocí operátorů vstupu a výstupu ve stylu CSP ?
a !
resp. Ke komunikaci může dojít, pouze pokud existuje přijímající agent odpovídající odesílajícímu agentovi. Přijímající agent musí očekávat, že obdrží odesílaný typ symbolu. Například hodnota 9 následovaná eos
symbol je odeslán na port ven
:
ven ! int(9)ven ! eos
A celočíselná zpráva je přijata do proměnné typu shody, následovaná znakem eos
:
obdržel : celé číslov ? int(obdržel)v ? eos
Výzvy k hlasování
Výzvy k hlasování vycházejí z konceptu CSP chráněných alternativ. Příkaz dotazování je tvořen sadou příkazů, každý chráněn příkazem vstupního kanálu. Když se shoduje komunikace mezi vysílajícím agentem a strážcem, strážce se provede a následuje odpovídající prohlášení. Například:
hlasování v ? X -> X := X + 1 | v ? Y -> y := y + 1konec
Kde je přístav v
je sledován pro signály X
nebo Y
, na odpovídající komunikaci, odpovídající proměnné X
nebo y
jsou zvyšovány.
Bezpečnostní
Joyce byl navržen jako zajistit jazyk v tom smyslu, že překladač by byl schopen detekovat všechna porušení pravidel jazyka.
Ukázkový program
Následuje kompletní ukázkový program převzatý z původního článku představujícího programovací jazyk Joyce,[1] implementace algoritmu pro generování prvočísel na základě techniky prosévání pro generace prvočísel. A síto
agentovi je zaslán proud celých čísel od jeho předchůdce, přičemž první je prvočíslo. Odstraní všechny násobky tohoto prime ze streamu a aktivuje následníka. Toto pokračuje až do eos
signál se šíří podél sady sít.
činidlo síto(inp, ven: proud);var více: booleovský; X, y: celé číslo; succ: proud;začít hlasování inp?int(X) -> +succ; síto(succ, ven); více := skutečný | inp?eos -> ven!eos; více := Nepravdivé konec; zatímco více dělat hlasování inp?int(y) -> -li y mod X <> 0 pak succ!int(y) | inp?eos -> ven!int(X); succ!eos; více := Nepravdivé konec;konec;
Následující agent inicializuje sadu sítových agentů a vstupuje do nich proud celých čísel mezi 3 a 9999.
činidlo připraví;použití generovat, síto, tisk;var A, b: proud;začít +A; +b; generovat(A, 3, 2, 4999); síto(A, b); tisk(b)konec;
Implementace
Přidělení zásobníku
Kvůli souběžnému provádění procedur agenta konvenční sekvenční zásobník alokační schéma nelze použít, protože záznamy o aktivaci volání agenta se neřídí vzorem last-in first-out. Místo toho vztahy mezi tvůrcem a zástupcem tvoří hromádku se stromovou strukturou. K implementaci tohoto chování se používá jednoduché schéma, které funguje tak, že se v horní části zásobníku přidělují nové aktivační záznamy a propojují se aktivační záznamy subagentů se záznamem jejich tvůrce. Tyto záznamy se uvolní pouze v případě, že agent skončil a jsou v horní části zásobníku.[3] Účinnost tohoto schématu závisí na struktuře a chování programu, což v některých případech povede ke špatnému využití paměti. Efektivnější schéma bylo implementováno v Hansenově jazyce SuperPascal.
Reference
- ^ A b Hansen, Brinch (2002). "Joyce: Programovací jazyk pro distribuované systémy". V Hansen, Per Brinch (ed.). Původ souběžného programování: Od semaforů po vzdálená volání procedur. New York, New York: Springer. 464–492. doi:10.1007/978-1-4757-3472-0. ISBN 978-1-4419-2986-0. S2CID 44909506.
- ^ Hansen, Brinch (Červen 1989). „Zpráva o Joyceově jazyce“. Software: Praxe a zkušenosti. John Wiley & Sons. 19 (6): 553–578. doi:10.1002 / spe. 4380190606.
- ^ Hansen, Brinch (Červen 1989). „Multiprocesorová implementace Joyce“. Software: Praxe a zkušenosti. John Wiley & Sons. 19 (6): 579–592. doi:10.1002 / spe. 4380190606.
externí odkazy
Oficiální webové stránkyArchiv Brinch Hansen, sada jeho papírů