Pictogramă (limbaj de programare)

pictograma
Semantică multi- paradigma : imperativ , logic
Clasa de limba limbaj de programare
Tipul de execuție interpret
Aparut in 1974
Autor Ralph E. Griswold
Eliberare
Tip sistem dinamic
Implementări majore Icon, Jcon, Unicon
A fost influențat Snobol , Algol
influențat Piton
Site-ul web cs.arizona.edu/icon
pictograma

WinIcon v.9.3.2 captură de ecran care rulează exemplu VQUEENS.ICN, parte a IPL.
Tip de Traducător
Dezvoltator Ralph E. Griswold , Gregg Townsend
Sistem de operare Unix (compilările Linux și BSD în curs de testare ), MacOS și Microsoft Windows cu Cygwin
Prima editie 1977
ultima versiune 9.5.1 ( 6 iunie 2013 )
Licență GNU GPL
Site-ul web cs.arizona.edu/icon/
Unicon

Captură de ecran UniconIDE v.12.0.2
Tip de Traducător
Dezvoltator Clint Jeffery
Sistem de operare Linux și Microsoft Windows
Prima editie 1977
ultima versiune 12.1.0 [3] ( 27 august 2012 )
Licență GNU GPL
Site-ul web unicon.sf.net

Icon  este un limbaj de programare care a moștenit ideologia unui limbaj anterior de către același autor, Snobol . Numele limbii nu are nimic de-a face cu „icoane”, ci este o abreviere a cuvântului engleză.  iconoclastic (iconoclastic), folosit în sensul combaterii conformismului în dezvoltarea limbajelor de programare.

Este un limbaj de programare super-înalt care integrează potrivirea modelelor și backtracking , apropiindu-l de limbajele de programare logică .

Limbajul este tastat dinamic și are încorporate tipuri puternice de date. Procedurile din Icon sunt valori de primă clasă , ceea ce înseamnă că variabilelor li se pot atribui valorile procedurilor în sine, și nu rezultatele executării lor .  Există un mecanism de co-exprimare care vă permite să creați corutine .  

Sintaxa de bază

Sintaxa icoanei este moștenită din familia de limbaje de programare Algol și seamănă cu sintaxa lui C sau Pascal . Icon seamănă mai mult cu Pascal, folosește semnul :=, cuvântul cheie procedureetc. pentru atribuire. Icon, pe de altă parte, folosește acolade în stil C pentru a grupa instrucțiunile de limbaj, iar programul începe cu o procedură numită „principal”.

Procedurile sunt blocul de bază al programelor Icon, cu toate acestea, spre deosebire de procedurile Pascal, ele (cum ar fi funcțiile C și Pascal) pot returna valori; nu există niciun cuvânt cheie functionîn pictogramă.

procedure doSomething(aString) write(aString) end

Execuție intenționată

Orice propoziție (operator) din limbajul Icon este de fapt o expresie și poate returna valori. Expresiile din Icon, pe lângă valorile lor reale de returnare, care pot fi orice număr, produc una dintre cele două stări - succes Eng.  succes sau eșec engl.  eșec . Succesul sau eșecul expresiilor sunt folosite în locul valorilor booleene de către structurile de control Icon. Datorită acestui fapt, putem scrie construcții precum:

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

În plus, deoarece starea „eșuată” tinde să apară din apelurile de funcții imbricate ca rezultat al unei funcții exterioare, pot fi folosite expresii și mai scurte, cum ar fi:

while write(read())

pentru a citi fluxul de intrare și a-l duplica în fluxul de ieșire (eco).

Operațiile de comparație precum >și <pot avea succes și pot produce un rezultat egal cu valoarea celui de-al doilea argument al lor sau eșuează și nu produc niciun rezultat. Datorită acestui fapt, expresii precum if a < b < c then… pot fi scrise în Icon.

Conceptul asociat cu succesul și eșecul se numește execuție intenționată în Icon .  execuție direcționată spre obiectiv . Este o modalitate prin care un calcul poate continua până când este atins un anumit scop. În exemplul ecou de mai sus, scopul este de a citi întregul conținut al fișierului de intrare până când este întâlnit sfârșitul fișierului. Ținta este stabilită direct, nu cu verificări suplimentare pentru coduri de returnare sau ceva de genul ăsta. Calculul intenționat este implementat folosind backtracking , care este un mecanism foarte puternic.

Generatoare

O inovație majoră a limbajului sunt generatoarele care generalizează mecanismul iteratorilor [4] . De la ikon ideea generatoarelor și-a găsit drumul în limbi precum Python [5] .

Thomas W. Christopher, autorul Manualului limbajului de programare Icon scrie: „Cea mai mare diferență între Icon și alte limbaje de programare este că expresiile din Icon sunt generatoare”.

Un exemplu de utilizare a unui generator:

procedura principala() L:="1","22","333"] # Listă de șiruri fiecare scrie (" ",! L) Sfârşit ---- Ieșire: 1 22 333

Influență asupra limbilor ulterioare

Limbajele Icon și Snoball au servit ca un fel de teren de testare pentru unele idiomuri de programare , în special pentru constructele care conțin &&sau ||și primul limbaj care a folosit expresii regulate (deși într-o formă diferită de cea actuală). Ulterior, aceste mecanisme au fost folosite în mediul Unix , în limbajele C , AWK și Perl .

Iată un exemplu de astfel de idiom:

[ $ringing != 0 ]&&echo Sună telefonul!!!

Un alt exemplu, să avem o construcție shell :

xview -root ` gtk-shell -t "Care imagine?" -fs` _

Chiar dacă nu alegeți un nume pentru fișierul imagine, xview va rula în continuare. Și în limbajul Icon, acest lucru nu s-ar întâmpla niciodată.

Analogii expresiei regulate fac parte din limbajul în sine, permițând utilizarea sistemelor de procesare a textului de complexitate nelimitată.

Flexibilitatea limbii vă permite să înregistrați un număr foarte mare de acțiuni fără a reduce lizibilitatea textului.

Implementare și dialecte

Implementarea de către autor a Icon, scrisă la Universitatea din Arizona (așa-numita pictogramă Arizona ) este distribuită sub licență GNU GPL .

Icon 9.3 (ultima versiune care a avut suport Windows nativ ) a fost implementat ca un compilator la bytecode, generând un executabil care conține un interpret pentru acel bytecode. Începând cu versiunea 9.4 Arizona Icon a fost implementată ca limbaj clasic de scripting Unix .

După moartea autorului limbii, dezvoltarea icoanei clasice Arizona a fost înghețată pentru o lungă perioadă de timp, penultima versiune a Icon v.9.4.3 a fost lansată pe 14 noiembrie 2005 , dar acum suportul său a fost reluat de către elevul său Greg Townsend. Pe 12 aprilie 2010 a fost lansată o nouă versiune a traducătorului.

O ramură în curs de dezvoltare a Icon este limbajul Unicon , al cărui traducător se bazează pe codul său și, de asemenea, distribuit sub licența GNU GPL . Este un dialect al limbii orientat pe obiecte, cu o integrare îmbunătățită cu mediul OS , inclusiv, de exemplu, suport pentru interacțiunea cu baza de date . Similar cu icon v.9.3, Unicon este un compilator axat pe generarea de fișiere executabile.

Dialectul ObjectIcon continuă să se dezvolte, bazat pe versiunile anterioare ale Unicon și fiind o bifurcație a celui din urmă. ObjectIcon, așa cum sugerează și numele, este o versiune extinsă orientată pe obiect a Icon, în special, spre deosebire de Unicon, ObjectIcon are modificatori de câmpuri de acces la metode. În ObjectIcon, compoziția bibliotecilor a fost mult schimbată (majoritatea IPL-ului a fost puternic reproiectată - unele module au fost eliminate, bibliotecile grafice au fost complet schimbate.), a fost adăugat suport Unicode, a fost adăugat suport pentru spațiu de nume, moștenire multiplă și inițializarea automată a constantelor și variabilelor a fost adăugată - iar acum este un limbaj OOP modern și puternic. Dezvoltat de Robert Parlett și distribuit sub licență MIT . Disponibil pentru descărcare de la SourceForge și rulează pe Linux/Unix.

Limbi descendente

Laurence Tratt, unul dintre dezvoltatorii Icon 9.5 și ObjectIcon, este, de asemenea, autorul limbajului proiectat similar Converge [6] .

În 2015, Greg Townsend a introdus limbajul Goaldi (din Goal Direction ). Este un limbaj orientat pe obiecte implementat în Go , care moștenește multe dintre caracteristicile Icon. Implementează închideri , programare paralelă , suport pentru spații de nume și gestionarea Unicode . În același timp, îi lipsesc caracteristici emblematice precum scanarea șirurilor de caractere ca operație de bază în limbaj (în schimb folosește compararea la nivel de funcție cu expresii regulate obișnuite ) și tipuri de date asociate, cum ar fi seturile de caractere, nu există o aritmetică de precizie arbitrară, iar erorile sunt nu sunt convertite în eșecuri gestionate de backtracking, dar sunt gestionate de mecanismul de excepție [7] .

Literatură

Note

  1. https://www2.cs.arizona.edu/icon/v95u.htm
  2. 1 2 https://github.com/gtownsend/icon/releases
  3. Unicon Sourceforge . Preluat la 26 martie 2013. Arhivat din original la 10 septembrie 2012.
  4. Michael Lee Scott. 6.5.4. Generatoare în Icon // Limbajul de programare Pragmatics . - Ed. III.. - Morgan Kaufmann, 2009. - P.  268 . — 941 p. — ISBN 9780080922997 .
  5. Steve Holden, David M. Beazley. aplicația. 2. Modificare de la Python 2.0 // Python Web Programming. - Editura Sams, 2002. - S. 612. - 691 p. — ISBN 9780735710900 .
  6. Laurence Tratt. Experiențe cu un sistem de evaluare a expresiilor asemănătoare icoanelor  // Proceedings of the 6th Symposium on Dynamic Languages. — New York, NY, SUA: ACM, 2010-01-01. — S. 73–80 . — ISBN 9781450304054 . - doi : 10.1145/1869631.1869640 . Arhivat din original pe 14 august 2016.
  7. Proiectul Golaldi pe GitHub

Link -uri

Dialecte și distribuții