E (programovací jazyk) - E (programming language)
![]() | 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 | Multi-paradigma: objektově orientovaný, předávání zpráv |
---|---|
Navrhl | Mark S. Miller |
Poprvé se objevil | 1997 |
Psací disciplína | Silný, dynamický |
OS | Cross-platform |
Licence | Porce v různých licence zdarma |
webová stránka | chyby |
Hlavní, důležitý implementace | |
E-on-Java, E-on-CL | |
Ovlivněno | |
Joule, Originál-E, Jáva | |
Ovlivněno | |
Poník |
E je objektově orientované programování jazyk pro zajistit distribuované výpočty, vytvořil Mark S. Miller, Dan Bornstein, a další v Electric Communities v roce 1997. E pochází hlavně ze souběžného jazyka Joule az Original-E, sada rozšíření pro Javu pro bezpečné distribuované programování. E kombinuje zpráva -výpočet založený na Jáva -jako syntaxe. A konkurence model založený na smyčky událostí a sliby zajišťuje to zablokování nikdy nemůže nastat.[Citace je zapotřebí ]
Filozofie
Jazyk E je navržen s bezpečné výpočty na mysli; toho je dosaženo zejména přísným dodržováním objektově orientovaného výpočetního modelu, který ve své čisté podobě má vlastnosti podporující zabezpečené výpočty. Jazyk E a jeho standardní knihovna používají a na základě schopností filozofie designu v celém rozsahu s cílem pomoci programátorům vytvářet zabezpečený software a umožnit spolupráci softwarových komponent, i když si navzájem plně nedůvěřují. V E slouží odkazy na objekty jako funkce, proto funkce nepřidávají žádné výpočetní ani koncepční režijní náklady. Jazyková syntaxe je navržena tak, aby ji lidé mohli snadno auditovat kvůli bezpečnostním chybám. Například lexikální scoping omezuje množství kódu, který je třeba zkoumat z hlediska jeho účinků na danou proměnnou. Jako další příklad používá jazyk == operátor pro srovnání a := operátor pro přiřazení; aby se zabránilo možnosti záměny, neexistuje žádná = operátor.
Výpočtový model
V E jsou všechny hodnoty předměty a výpočet se provádí zasíláním zpráv objektům. Každý objekt patří a káď (analogicky k a proces ). Každá vana má jedno vlákno provedení, rámec zásobníku a frontu událostí. Distribuované programování jde jen o zasílání zpráv vzdáleným objektům (objektům v jiných nádržích). Veškerá komunikace se vzdálenými stranami je šifrované za běhu E. Příchozí zprávy jsou umístěny do fronty událostí vanu; smyčka událostí kádě zpracovává příchozí zprávy jednu po druhé v pořadí příjezdu.
E má dva způsoby odesílání zpráv: okamžité volání a případné odeslání. Okamžité volání je jako typické volání funkce nebo metody v nesouběžném jazyce: odesílatel čeká, dokud příjemce nedokončí a vrátí hodnotu. Případné odeslání odešle zprávu při vytváření zástupného symbolu pro výsledek zvaný a slib. Odesílatel okamžitě pokračuje s příslibem. Později, když příjemce dokončí a přinese výsledek, slib vyřeší výsledek. Protože při komunikaci se vzdálenými objekty jsou povolena pouze případná odeslání, zablokování se nemůže stát. V distribuovaných systémech mechanismus příslibu také minimalizuje zpoždění způsobená latencí sítě.
Syntaxe a příklady
Syntaxe E je nejpodobnější Jáva, i když se také trochu podobá Krajta a Pascal. Proměnné jsou dynamicky zadáno a lexikálně rozsahem. Na rozdíl od Javy nebo Pythonu je však E složeno výhradně z výrazy. Zde je extrémně jednoduchý program E:
tisk("Ahoj světe!")
Zde je rekurzivní funkce pro výpočet faktoriálu čísla napsaného v E. Funkce jsou definovány pomocí def klíčové slovo.
def faktoriál(n :int) :int { -li (n == 1) { vrátit se 1 } jiný -li (n > 0) { vrátit se n * faktoriál(n-1) } jiný { házet("neplatný argument pro faktoriál:"+n) } }
V prvním řádku : int je hlídat který omezuje argument a výsledek funkce. Stráž není totéž jako deklarace typu; stráže jsou volitelné a mohou určit omezení. První : int zajišťuje, že tělo funkce bude muset zpracovat pouze celočíselný argument. Bez druhého : int výše by funkce nebyla schopna vrátit hodnotu. Pro bezpečnostní audit je užitečné vidět dopředu, že informace unikají z funkce.
Jelikož E má podporovat bezpečnou spolupráci, kanonickým příkladem pro programy E je mincovna, jednoduchý systém elektronických peněz jen na několika řádcích E. Následující kód definuje funkci, která vyrábí mincovny, kde má každá mincovna vlastní měna. Každá mincovna může vyrábět peněženky, které drží její měnu, a kterýkoli držitel dvou peněženek stejné měny může bezpečně převádět peníze mezi peněženkami. Rychlým prozkoumáním zdrojového kódu může programátor E snadno ověřit, že pouze mincovny mohou změnit množství peněz v oběhu, že peníze lze vytvářet a nezničit pouze, že mincovny mohou vytvářet peníze pouze ze své vlastní měny a že pouze držitel kabelky může změnit její rovnováhu.
def makeMint(název) :žádný { def [pečetidlo, odpečetovač] := makeBrandPair(název) def máta { na makePurse(var Zůstatek :(int >= 0)) :žádný { def dekr(množství :(0..Zůstatek)) :prázdnota { Zůstatek -= množství } def peněženka { na getBalance() :int { vrátit se Zůstatek } na výhonek() :žádný { vrátit se máta.makePurse(0) } na getDecr() :žádný { vrátit se pečetidlo.těsnění(dekr) } na vklad(množství :int, src) :prázdnota { odpečetovač.odpečetit(src.getDecr())(množství) Zůstatek += množství } } vrátit se peněženka } } vrátit se máta }
Objekty v E jsou definovány pomocí def klíčové slovo a v rámci definice objektu na klíčové slovo začíná každou metodou. Výstražné výrazy v tomto příkladu ilustrují, jak určit omezení hodnoty (jako v : (int> = 0) nebo : (0.. zůstatek)).
Příklad mincovny využívá vestavěný mechanismus zvaný a pečetidlo. Funkce makeBrandPair vytvoří dva přidružené objekty, pečetidlo a odlepovač, takže pečetidlo může zalepit objekt v krabici a odpečetovač je jediný objekt, který může načíst obsah krabičky. Podrobnější vysvětlení tohoto příkladu peněz najdete na webu E.[1]
Viz také
Reference
- ^ Rees, Jonathan; Miller, Mark (2001). „Od objektů k schopnostem - jednoduché peníze“. erights.org. ERights. Citováno 8. července 2014.
Než představíme následující jednoduchý příklad peněz založených na schopnostech, musíme se pokusit odvrátit zmatek, který tento příklad opakovaně způsobuje. Nenavrhujeme skutečně vydělávat peníze tímto způsobem! Žádoucí peněžní systém musí také zajišťovat ...