Ikona (programovací jazyk)

ikona
Sémantika multiparadigma : imperativ , logický
Jazyková třída programovací jazyk
Typ provedení tlumočník
Objevil se v 1974
Autor Ralph E. Griswold
Uvolnění
Typový systém dynamický
Hlavní implementace Ikona, Jcon, Unicon
Byl ovlivněn Snobol , Algol
ovlivnil Krajta
webová stránka cs.arizona.edu/icon
ikona

Snímek obrazovky WinIcon v.9.3.2 s příkladem VQUEENS.ICN, který je součástí IPL.
Typ Překladatel
Vývojář Ralph E. Griswold , Gregg Townsend
Operační systém Unix ( testujeme sestavení Linuxu a BSD ), MacOS a Microsoft Windows s Cygwin
První vydání 1977
Nejnovější verze 9.5.1 ( 6. června 2013 )
Licence GNU GPL
webová stránka cs.arizona.edu/icon/
Unicon

Snímek obrazovky UniconIDE v.12.0.2
Typ Překladatel
Vývojář Clint Jeffery
Operační systém Linux a Microsoft Windows
První vydání 1977
Nejnovější verze 12.1.0 [3] ( 27. srpna 2012 )
Licence GNU GPL
webová stránka unicon.sf.net

Icon  je programovací jazyk, který zdědil ideologii dřívějšího jazyka od stejného autora, Snobola . Název jazyka nemá nic společného s „ikonami“, ale je zkratkou pro slovo angličtina.  ikonoklastický (ikonoklastický), používaný ve smyslu boje proti konformismu při vývoji programovacích jazyků.

Je to programovací jazyk na super vysoké úrovni , který integruje porovnávání vzorů a zpětné sledování , čímž se přibližuje logickým programovacím jazykům .

Jazyk je dynamicky typován a má vestavěné výkonné datové typy. Procedury v Icon jsou hodnoty první třídy , což znamená, že proměnným lze přiřadit hodnoty samotných procedur, nikoli výsledky jejich provádění .  Existuje mechanismus společného vyjádření , který vám umožňuje vytvářet korutiny .  

Základní syntaxe

Syntaxe Icon je zděděna z rodiny programovacích jazyků Algol a podobá se syntaxi C nebo Pascalu . Icon je spíše Pascal, k přiřazení používá znak :=, klíčové slovo procedureatd. Icon naproti tomu používá složené závorky ve stylu C k seskupování příkazů jazyka a program začíná procedurou nazvanou „main“.

Procedury jsou základním stavebním kamenem programů Icon, nicméně na rozdíl od procedur Pascal mohou (stejně jako funkce C a Pascal) vracet hodnoty; functionv ikoně není žádné klíčové slovo .

procedure doSomething(aString) write(aString) end

Účelné provedení

Jakákoli věta (operátor) jazyka Icon je vlastně výraz a může vracet hodnoty. Výrazy v Icon, kromě jejich skutečných návratových hodnot, které mohou být libovolné číslo, vytvářejí jeden ze dvou stavů - úspěch Ing.  úspěch nebo neúspěch angl.  selhání . Úspěch nebo neúspěch výrazů se používá namísto booleovských hodnot řídicími strukturami ikon. Díky tomu můžeme psát konstrukce jako:

if a := read() then write(a)

Kromě toho, protože stav „selhání“ má tendenci se objevovat z volání vnořených funkcí v důsledku vnější funkce, lze použít i kratší idiomy, jako například:

while write(read())

pro čtení vstupního toku a jeho duplikování do výstupního toku (echo).

Porovnávací operace jako >a <mohou uspět a přinést výsledek rovný hodnotě jejich druhého argumentu, nebo selžou a nepřinesou žádný výsledek. Díky tomu if a < b < c thenlze v Icon zapsat výrazy jako ….

Koncept spojený s úspěchem a neúspěchem se v Icon nazývá účelné provedení .  cílená realizace . Je to způsob, kterým může výpočet pokračovat, dokud není dosaženo určitého cíle. Ve výše uvedeném příkladu echa je cílem přečíst celý obsah vstupního souboru, dokud nenarazíte na konec souboru. Cíl je nastaven přímo, nikoli pomocí dalších kontrol návratových kódů nebo něčeho podobného. Účelný výpočet je realizován pomocí backtrackingu , což je velmi výkonný mechanismus.

Generátory

Zásadní novinkou jazyka jsou generátory, které zobecňují mechanismus iterátorů [4] . Právě z ikony se myšlenka generátorů dostala do jazyků jako Python [5] .

Thomas W. Christopher, autor příručky Icon Programming Language Handbook, píše: "Největší rozdíl mezi Icon a jinými programovacími jazyky je v tom, že výrazy v Icon jsou generátory."

Příklad použití generátoru:

procedura main() L:=["1","22","333"] # Seznam řetězců každý píše(" ",! L) konec ---- Výstup: 1 22 333

Vliv na následující jazyky

Jazyky Icon a Snoball sloužily jako jakési testovací pole pro některé programátorské idiomy , zejména pro konstrukce obsahující &&nebo ||a první jazyk používající regulární výrazy (byť ve formě odlišné od té současné). Následně byly tyto mechanismy použity v prostředí Unix , v jazycích C , AWK a Perl .

Zde je příklad takového idiomu:

[ $ringing != 0 ]&&echo Telefon zvoní!!!

Další příklad, mějme konstrukci shellu :

xview -root ` gtk-shell -t "Který obrázek?" -fs` _

I když nezvolíte název souboru obrázku, xview bude stále fungovat. A v jazyce ikon by se to nikdy nestalo.

Analogy regulárních výrazů jsou součástí jazyka samotného, ​​což umožňuje použití systémů zpracování textu neomezené složitosti.

Flexibilita jazyka umožňuje zaznamenat velmi velké množství akcí, aniž by se snížila čitelnost textu.

Implementace a dialekty

Autorská implementace Icon napsaná na University of Arizona (tzv. Arizona icon ) je distribuována pod licencí GNU GPL .

Icon 9.3 (poslední verze s nativní podporou Windows ) byla implementována jako kompilátor bajtkódu, generující spustitelný soubor obsahující interpret pro tento bajtový kód. Od verze 9.4 je Arizona Icon implementována jako klasický unixový skriptovací jazyk .

Po smrti autora jazyka byl vývoj klasické ikony Arizona na dlouhou dobu zmrazen, předposlední verze Icon v.9.4.3 vyšla 14. listopadu 2005 , ale nyní byla její podpora obnovena jeho student Greg Townsend. 12. dubna 2010 byla vydána nová verze překladače.

Aktivně se rozvíjející větví Icon je jazyk Unicon , jehož překladač je založen na jeho kódu a je také distribuován pod licencí GNU GPL . Jedná se o objektově orientovaný dialekt jazyka s vylepšenou integrací s prostředím OS , včetně například podpory interakce s databází . Podobně jako icon v.9.3 je Unicon kompilátor zaměřený na generování spustitelných souborů.

Dialekt ObjectIcon se nadále vyvíjí, založený na dřívějších verzích Uniconu a je rozvětvením posledně jmenovaného. ObjectIcon, jak název napovídá, je rozšířená objektově orientovaná verze Icon, konkrétně na rozdíl od Unicon má ObjectIcon modifikátory přístupových polí metod. V ObjectIcon se značně změnila skladba knihoven (většina IPL byla silně přepracována - některé moduly byly odstraněny, grafické knihovny byly zcela změněny.), byla přidána podpora Unicode, přidána podpora jmenného prostoru, vícenásobná dědičnost a byla přidána automatická inicializace konstant a proměnných - a nyní je to moderní a výkonný jazyk OOP. Vyvinutý Robertem Parlettem a distribuován pod licencí MIT . K dispozici ke stažení na SourceForge a běží na Linux/Unix.

Potomkové jazyky

Laurence Tratt, jeden z vývojářů Icon 9.5 a ObjectIcon, je také autorem podobně koncipovaného jazyka Converge [6] .

V roce 2015 Greg Townsend představil jazyk Goaldi (od Goal Direction ). Jedná se o objektově orientovaný jazyk implementovaný v Go , který zdědí mnoho funkcí Icon. Implementuje uzávěry , paralelní programování , podporu jmenného prostoru a zpracování Unicode . Zároveň postrádá takové ikonické funkce, jako je skenování řetězců jako základní jazyková operace (místo toho používá srovnání na úrovni funkcí s regulárními výrazy ) a související datové typy, jako jsou znakové sady, neexistuje žádná libovolně přesná aritmetika a chyby jsou nejsou převedeny na selhání řešená backtrackingem, ale jsou řešeny mechanismem výjimek [7] .

Literatura

Poznámky

  1. https://www2.cs.arizona.edu/icon/v95u.htm
  2. 1 2 https://github.com/gtownsend/icon/releases
  3. Unicon Sourceforge . Získáno 26. března 2013. Archivováno z originálu 10. září 2012.
  4. Michael Lee Scott. 6.5.4. Generátory v ikoně // Pragmatika programovacího jazyka . - III ed .. - Morgan Kaufmann, 2009. - S.  268 . — 941 s. — ISBN 9780080922997 .
  5. Steve Holden, David M. Beazley. aplikace. 2. Změna od Pythonu 2.0 // Python Web Programming. - Sams Publishing, 2002. - S. 612. - 691 s. — ISBN 9780735710900 .
  6. Laurence Tratt. Zkušenosti s ikonickým systémem hodnocení výrazů  // Sborník příspěvků ze 6. sympozia o dynamických jazycích. — New York, NY, USA: ACM, 2010-01-01. — S. 73–80 . — ISBN 9781450304054 . - doi : 10.1145/1869631.1869640 . Archivováno z originálu 14. srpna 2016.
  7. Projekt Goaldi na GitHubu

Odkazy

Dialekty a distribuce