ParaSail (programovací jazyk) - ParaSail (programming language)
![]() | tento článek příliš spoléhá na Reference na primární zdroje.Října 2017) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
![]() Logo navrhl Abouzar Abbasi | |
Paradigma | sestaven, souběžně, rozkazovací způsob, strukturovaný, objektově orientovaný |
---|---|
Navrhl | S. Tucker Taft |
Vývojář | AdaCore |
Poprvé se objevil | 2009 |
Stabilní uvolnění | 8. 4. / 2. listopadu 2019 |
Psací disciplína | silný, statický |
Plošina | x86 |
OS | Linux, Operační Systém Mac, Okna |
Licence | GPL v3 |
Přípony názvu souboru | .psi, .psl |
webová stránka | parasail-lang |
Hlavní, důležitý implementace | |
psli, pslc | |
Ovlivněno | |
Modula, Ada, Pascal, ML | |
Ovlivněno | |
Nim[1] |
Jazyk paralelní specifikace a implementace (ParaSail) je objektově orientovaný paralelní programovací jazyk. Jeho design a průběžná implementace jsou popsány v blogu[2] a na jeho oficiálních webových stránkách.[3]
ParaSail používá a ukazatel -zdarma programovací model, kde předměty může růst a zmenšovat se a pro přiřazení se používá sémantika hodnot. Nemá globální odpadky shromážděny halda. Namísto, správa paměti podle regionu se používá v celém textu. Typy mohou být rekurzivní, pokud jsou deklarovány rekurzivní komponenty volitelný. Neexistují žádné globální proměnné, žádné aliasy parametrů a všechny dílčí výrazy výrazu lze hodnotit paralelně. Tvrzení, předpoklady, dodatečné podmínky, třídní invarianty atd. jsou součástí standardní syntaxe pomocí a Hoare - jako notace. Je to možné podmínky závodu jsou detekovány v čas kompilace.
Počáteční návrh ParaSailu začal v září 2009 S. Tucker Taft.
Oba tlumočník pomocí ParaSail virtuální stroj a LLVM - na základě ParaSail překladač jsou dostupné. Krádež práce se používá k plánování nízké hmotnosti ParaSailu vlákna. Nejnovější verzi lze stáhnout z webu ParaSail.[3]
Popis
![]() | Tato sekce potřebuje expanzi. Můžete pomoci přidávat k tomu. (Února 2018) |
The syntax ParaSail je podobný Modula, ale s objektově orientovaným programovacím modelem založeným na třídě a rozhraní, který je více podobný Jáva nebo C#.
V poslední době byly paralelní konstrukty ParaSail přizpůsobeny jiným syntaxím, aby vytvořily Jáva -jako, Krajta -jako, a Ada -jako paralelní jazyky, dabovaný, respektive Javallel, Parython a Sparkel (pojmenovaný podle podmnožiny Ada JISKRA na kterém je založen). Překladače a tlumočníci pro tyto jazyky jsou součástí implementace ParaSail.[3]
Příklady
Toto je a Program Hello world v ParaSail:
func Ahoj světe(var IO) je IO.Println("Ahoj světe");konec func Ahoj světe;
Toto je rozhraní k základnímu mapovému modulu:
rozhraní BMap<Key_Type je Objednané<>; Typ prvku je Přiřaditelné<>> je op "[]"() -> BMap; // Vytvořit prázdnou mapu func Vložit(var BMap; Klíč : Key_Type; Hodnota : Typ prvku); func Nalézt(BMap; Klíč : Key_Type) -> volitelný Typ prvku; func Vymazat(var BMap; Klíč : Key_Type); func Počet(BMap) -> Univ_Integer;konec rozhraní BMap;
Zde je možná implementace tohoto mapového modulu pomocí binárního stromu:
třída BMap je rozhraní Binární_uzel<> je // Jednoduchý „konkrétní“ modul binárního uzlu var Vlevo, odjet : volitelný Binární_uzel; var Že jo : volitelný Binární_uzel; konst Klíč : Key_Type; var Hodnota : volitelný Typ prvku; // null znamená smazáno konec rozhraní Binární_uzel; var Strom : volitelný Binární_uzel; var Počet := 0; vývoz op "[]"() -> BMap je // Vytvořit prázdnou mapu vrátit se (Strom => nula, Počet => 0); konec op "[]"; func Vložit(var BMap; Klíč : Key_Type; Hodnota : Typ prvku) je // Hledat klíč, přepsat, pokud je nalezen, vložit nový uzel, pokud ne pro M => BMap.Strom smyčka -li M je null pak // Již není na mapě; přidej to M := (Klíč => Klíč, Hodnota => Hodnota, Vlevo, odjet => nula, Že jo => nula); BMap.Počet += 1; jiný případ Klíč =? M.Klíč z [#méně] => pokračovat smyčka s M.Vlevo, odjet; [#větší] => pokračovat smyčka s M.Že jo; [#rovnat se] => // Klíč je již na mapě; // počet nárazů, pokud byla hodnota null; -li M.Hodnota je null pak BMap.Počet += 1; konec -li; // v každém případě přepište pole Hodnota M.Hodnota := Hodnota; vrátit se; konec případ; konec -li; konec smyčka; konec func Vložit; func Nalézt(BMap; Klíč : Key_Type) -> volitelný Typ prvku je // Vyhledejte klíč, vraťte přidruženou hodnotu, pokud je k dispozici, nebo jinak null pro M => BMap.Strom zatímco M nenulový smyčka případ Klíč =? M.Klíč z [#méně] => pokračovat smyčka s M.Vlevo, odjet; [#větší] => pokračovat smyčka s M.Že jo; [#rovnat se] => // Našel jsem to; vrátit hodnotu vrátit se M.Hodnota; konec případ; konec smyčka; // Nenalezeno v BMap vrátit se nula; konec func Nalézt; func Vymazat(var BMap; Klíč : Key_Type) je // Hledat klíč; odstranit přidružený uzel, pokud je nalezen pro M => BMap.Strom zatímco M nenulový smyčka případ Klíč =? M.Klíč z [#méně] => pokračovat smyčka s M.Vlevo, odjet; [#větší] => pokračovat smyčka s M.Že jo; [#rovnat se] => // Našel jsem to; pokud je maximálně jeden podstrom nenulový, přepsat // to; jinak nastavte jeho hodnotové pole na null // (aby se zabránilo složitějšímu opětovnému vyvážení). -li M.Vlevo, odjet je null pak // Přesuňte pravý podstrom do M M <== M.Že jo; elsif M.Že jo je null pak // Přesuňte levý podstrom do M M <== M.Vlevo, odjet; jiný // Nelze okamžitě získat uzel; // místo toho nastaví pole hodnoty na null. M.Hodnota := nula; konec -li; // Počet poklesů BMap.Počet -= 1; konec případ; konec smyčka; // Nenalezeno na mapě konec func Vymazat; func Počet(BMap) -> Univ_Integer je // Vrátí počet položek v mapě vrátit se BMap.Počet; konec func Počet;konec třída BMap;
Zde je jednoduchý testovací program pro modul BMap:
import PSL::Jádro::Náhodný;import BMap;func Test_BMap(Num : Univ_Integer; Semínko : Univ_Integer) je // Otestujte mapu založenou na binárních stromech var Běžel : Náhodný := Start(Semínko); // Spustí sekvenci náhodných čísel // Deklarujte mapu z celých čísel na řetězce var M : BMap<Key_Type => Univ_Integer, Typ prvku => Univ_String>; M := []; // Inicializuje mapu na prázdnou mapu pro Já v 1..Num*2 vpřed smyčka // Přidání prvků do mapy konst Klíč := další(Běžel) mod Num + 1; konst Val := „Val“ | To_String(Já); Println(„About to insert“ | Klíč | " => " | Val); Vložit(M, Klíč, Val); konec smyčka; Println("Count =" | Počet(M)); pro Já v 1..Num smyčka // Hledání prvků na mapě konst Klíč := další(Běžel) mod Num + 1; Println("Hledat " | Klíč | ", nalezeno " | Nalézt(M, Klíč)); konec smyčka; pro Já v 1..Num/3 smyčka // Odstranit některé prvky z mapy konst Klíč := další(Běžel) mod Num + 1; Println(„Chystáte se smazat“ | Klíč); Vymazat(M, Klíč); konec smyčka; Println("Count =" | Počet(M)); pro Já v 1..Num vpřed smyčka // Vyhledejte znovu prvky na mapě Println("Hledat " | Já | ", nalezeno " | Nalézt(M, Já)); konec smyčka;konec func Test_BMap;
Reference
- ^ Rumpf, Andreas (19. října 2017). "Nim bez GC". Araq's Musings. Citováno 1. září 2020.
- ^ Blog ParaSail
- ^ A b C Web ParaSail
Obecné odkazy
- Graham-Rowe, Duncan (28. července 2011). „Nový jazyk pro paralelní programování“. Recenze technologie. MIT.
- Clarke, Peter (28. července 2011). "SofCheck připravuje paralelní jazyk ParaSail". EETimes. UBM Electronics.
- Taft, S. Tucker (9. června 2012). „ParaSail: Méně je více s vícejádrovými“. EETimes. UBM Electronics.
- Selwood, Dick (18. července 2012). „Potřebuje svět nový programovací jazyk?“. EEJurnál. techfocus media, vč.