Euphoria (limbaj de programare)

Euforie
Semantică imperativ
Clasa de limba procedural
Tipul de execuție interpretare , interpretare bytecode , traducere C
Aparut in 1993
Autor Robert Craig (Creator) și Jeremy Kovgar, Matt Lewis, Derek Parnell (dezvoltatori versiunea 4)
Dezvoltator deschide Euphoria Group
Extensie de fișier .e, .ex, .exw, .edb
Eliberare 4.15.2 [1]  (15 august 2019 ) ( 15.08.2019 )
Versiune de testare 4.1 Beta 2
Tip sistem static , dinamic
Dialectele RDS Euphoria, openEuphoria
A fost influențat DE BAZĂ , C
influențat Phix
Licență deschis
Site-ul web openeuphoria.org
OS multiplatformă
 Fișiere media la Wikimedia Commons

Euphoria ( [ju:ˈfɔ:riə] , yufori, de asemenea rusă euforie, bucurie) este un limbaj de programare creat de Robert Craig (Rapid Deployment Software) [2] în Toronto , Canada . Numele Euphoria este un acronim pentru „Programarea utilizatorului final cu obiecte ierarhice pentru aplicații interpretate robuste”.

Prima versiune publică [3] a fost pentru mașini pe 32 de biți (i386) cu MS-DOS și a fost proprietară (1993). În 2006, odată cu lansarea versiunii 3 [4] , proiectul Euphoria a devenit deschis și a fost dezvoltat de comunitatea OpenEuphoria [5] , care în decembrie 2010 a lansat cea de-a patra versiune [6] cu un nou logo și mascota [7] ] . Versiunea 4.* a pachetului OpenEuphoria este lansată în prezent pentru Microsoft Windows , Linux , Mac OS X și trei sisteme BSD ( FreeBSD , NetBSD , OpenBSD ).

Euphoria este un limbaj imperativ interpretat de nivel înalt, cu scop general . Codul sursă Euphoria poate fi folosit pentru a genera cod sursă C utilizând un traducător , care la rândul său poate fi compilat într-un fișier executabil sau într-o bibliotecă dinamică folosind compilatoare precum GCC , OpenWatcom , etc. Programul Euphoria poate fi, de asemenea, „legat” [8]. ] cu un interpret pentru a produce un auto- executabil . Sunt acceptate mai multe biblioteci GUI , inclusiv Win32lib [9] și wrapper -uri pentru wxWidgets [10] , GTK+ [11] și IUP [12] . Euphoria are un sistem de baze de date simplu încorporat [13] și wrapper - uri pentru lucrul cu alte tipuri de baze de date [14] .

Prezentare generală

Euphoria este un limbaj procedural de uz general caracterizat prin simplitate, lizibilitate, implementare rapidă și performanță ridicată.

Simplitate Lizibilitate Desfăşurare rapidă Performanţă

Istorie

Dezvoltarea limbajului Euphoria a început cu experimentele lui Robert Craig [2] pe computerul personal Atari Mega-ST [15] . Multe idei de design de limbaj au venit din teza de master a lui Craig la Universitatea din Toronto [16] . Teza a fost scrisă sub influența lucrării lui John Backus asupra limbajelor de programare funcționale [16] .

Craig a portat apoi implementarea originală Atari a limbajului pe platforma pe 32 de biți a 386 de mașini care rulează Microsoft MS-DOS și a lansat primul pachet (versiunea 1.0) în iulie 1993 [3] sub o licență proprietară , înființând propria sa companie Rapid Deployment. Softawre (RDS) pentru dezvoltarea și vânzarea interpretului Euphoria în varianta DOS32. Craig numește implementarea originală pentru Atari „primitivă” [17] și nu a publicat-o. Până în 2006, Craig a continuat să dezvolte și să publice Euphoria în firma sa (rapideuphoria.com [2] ), formată din el și soția sa Janko Miura, lansând mai mult de o duzină de versiuni în două serii, 1.* și 2.*. În octombrie 2006, RDS a lansat a treia [4] serie Euphoria și a anunțat că, în continuare, Euphoria va fi distribuită gratuit sub o licență open source . Rezultatul lucrului cu seriile proprietare 1 și 2 este o comunitate de utilizatori înregistrați în 67 de țări din întreaga lume, inclusiv mulți programatori, al căror număr exact este cunoscut doar de RDS, dar la momentul lansării versiunii 2.5 era bine. peste o mie.

Sub supravegherea directă a RDS, comunitatea a continuat să lanseze Euphoria, aducând pachetul la versiunea 3.1.1 (august 2007) [16] [18] . De atunci, RDS s-a îndepărtat treptat de conducerea dezvoltării Euphoria, iar comunitatea OpenEuphoria [5] face îmbunătățiri și schimbări ulterioare sub conducere colegială. În decembrie 2010 [19] , comunitatea a lansat versiunea 4.0, începând cu seria 4, acum cu un nou logo al proiectului și o mascota [7] .

Versiunea 3.1.1 este o etapă importantă în evoluția limbajului, deoarece este ultima versiune care suportă oficial platforma MS-DOS [20] . Versiunea 3.1.1 este încă ultima versiune a direcției clasice stricte, fără „libertățile” apărute în a 4-a.

O scurtă listă de inovații care au apărut de la versiunea 4.0.0 [21] :

și mult mai mult.

Interpretul de limbă Euphoria a fost inițial scris în întregime în C. De la versiunea 2.5 [16] , lansată în noiembrie 2004, interpretul a fost împărțit în două părți: un parser scris în Euphoria și un interpret bytecode scris în C.

Caracteristici distinctive

Euphoria a fost concepută și dezvoltată având în vedere următoarele obiective și caracteristici:

Moduri de execuție

Utilizare

Euphoria se dorește a fi o soluție la cheie pentru a facilita gestionarea colecțiilor dinamice de date de diferite tipuri și este deosebit de utilă pentru manipularea șirurilor și imaginilor. Euphoria este folosit pentru a experimenta inteligența artificială , a studia matematica , a preda programarea și pentru a crea fonturi formate din mii de caractere. O parte destul de mare din interpretul Euphoria este scrisă în Euphoria.

Tipuri de date

Euphoria are patru tipuri de date încorporate:

atom (atom) un număr implementat ca un întreg semnat de 31 de biți sau un număr în virgulă mobilă IEEE pe 64 de biți . Euphoria comută dinamic între reprezentarea unui număr ca număr întreg sau număr în virgulă mobilă, în funcție de valoarea sa curentă. secvență (număr, succesiune) un set format din mai multe elemente. Fiecare element al mulțimii poate fi fie un atom , fie un număr . Numărul de elemente de rând nu este fix (nu necesită declarație obligatorie). Programul poate adăuga sau elimina elemente după cum este necesar în orice moment. Alocarea/dealocarea memoriei este gestionată automat utilizând contorizarea referințelor. Elementele individuale sunt accesate folosind valoarea indexului cuprinsă între paranteze drepte. Indicele primului element este [1]. Elementele seriei imbricate sunt accesate folosind indecși suplimentari între paranteze drepte, deci X[3][2] se referă la al doilea element al seriei imbricate, care este al treilea element al seriei X. Fiecare element al seriei este de tip obiect ( obiect) (vezi mai jos). întreg (întreg) un atom ale cărui valori pot fi numai numere întregi de la −1073741824 la 1073741823 (de la −2 30 la 2 30 -1). Tipul întreg este adesea mai eficient în operații decât tipul atom , dar nu poate conține același interval de valori. Caracterele sunt stocate ca numere, de exemplu ASCII „A” este la fel cu 65. obiect (obiect) un tip de date general care poate conține date din oricare dintre tipurile enumerate ( atom , secvență sau întreg ) care se modifică în timpul execuției programului.

Euphoria nu are un tip de date special pentru șirurile de caractere . Un șir este o serie de numere întregi , dar șirurile folosesc notația obișnuită între ghilimele duble. Astfel, în programul Euphoria

"ABC"

echivalentă cu:

{'A', 'B', 'C'}

si echivalent:

{65,66,67}

Pe lângă tipurile încorporate, un program Euphoria poate funcționa cu tipuri de date definite de programator care specifică o gamă mai restrânsă de valori variabile în limitele tipurilor încorporate. Tipurile de date definite de utilizator sunt utilizate în principal la depanarea unui program; după depanare, verificarea acestor tipuri poate fi dezactivată de directivă without type_check, în timp ce verificarea tipurilor încorporate rămâne întotdeauna activată.

Exemple

salut lumea

puts (1,"Hello World!\n")

Lucrul cu rânduri

Următorul cod caută elementul x într-un grup de elemente. Dacă se găsește un astfel de element, acesta este eliminat prin concatenarea tuturor elementelor grupului dinaintea lui cu toate elementele de după el. Rețineți că primul element al seriei are indicele unu [1], iar semnul dolarului $ ca indice denotă numărul ultimului element al seriei.

funcția delete_item ( obiect x, grup de secvență ) întreg poz pos = găsiți ( x, grup ) dacă pos > 0 atunci grup = grup[1 .. pos-1] și grup[poz+1 .. $] sfârşitul dacă returnează funcția finală a grupului

Linia de cod

group = group[1 .. pos-1] & group[pos+1 .. $]

arată o modalitate de a lucra cu seria [23] . Un rând poate conține un grup de elemente de orice tip și ele pot fi selectate și apoi combinate ( concatenate ) cu un alt rând folosind operatori încorporați. Operația de selectare a elementelor unei serii se numește secțiunea seriei.

Următoarea modificare a exemplului anterior înlocuiește elementul vechi cu cel nou. Deoarece variabilele vechi și noi sunt declarate ca obiecte, ele pot fi atât atomi, cât și serii. Nu este necesară verificarea tipului deoarece funcția poate funcționa pe orice tip de date.

funcția replace_item( obiect vechi, obiect nou, grup de secvențe ) întreg pos pos = găsi (vechi, grup) dacă pos > 0 atunci grup[poziție] = nou sfârşitul dacă returnează funcția finală a grupului

Trecerea parametrilor

Parametrii subrutinei sunt întotdeauna trecuți după valoare, totuși, inițial este transmisă doar o referință la obiect, iar copia sa este creată numai dacă subrutina încearcă să o schimbe, iar apoi subprogramul funcționează cu copia, și nu cu obiectul în sine (așa-numita metodă „ copy-on-write ”) . Astfel, parametrul se poate schimba în interiorul subrutinei, în timp ce obiectul original rămâne neschimbat. Opțional, o copie modificată a obiectului poate fi transmisă ca valoare de returnare a funcției.

Modificări majore și dialecte ale Euforiei

Versiunea bilingvă a lui Euphoria

Există o modificare a versiunii 2.5 a lui Euphoria cu cuvinte cheie în engleză și rusă (în codificare CP866 ) și un alfabet nelimitat pentru identificatori, dezvoltat cu participarea lui Craig [24] . Un mod bilingv pentru Euphoria versiunea 3 este, de asemenea, în curs de dezvoltare, în prezent în alfa.

Phix

Phix [25] este un compilator de limbaj de programare  dezvoltat de Pete Lomax bazat pe sintaxa RDS Euphoria, dar cu următoarele diferențe [26] [27] :

În acest moment, versiunea actuală 0.6.2 a compilatorului, lansată pe 10 iulie 2011, are un statut beta.

Limbaje de programare înrudite

Literatură

Julieta Kemp. Codare plină de bucurie cu OpenEuphoria  // LinuxFormat (versiunea în engleză). - noiembrie 2013. - Nr 176 .

Link -uri

Note

  1. EuGTK 4.15.2 postat . Arhivat din original la 30 ianuarie 2021. Preluat la 5 aprilie 2022.
  2. 1 2 3 Site-ul web RapidEuphoria (ing.) (link indisponibil) . Arhivat din original pe 14 iulie 2012.   
  3. 1 2 RapidEuphoria forum, 2006-10-18 16:44 de Robert Craig  (ing.)  (downlink) . Arhivat din original pe 16 iulie 2011.
  4. 1 2 Forum RapidEuphoria, 2006-10-18 1:19 de Robert Craig  (ing.)  (downlink) . Arhivat din original pe 16 iulie 2011.
  5. 1 2 Site comunitar openEuphoria (engleză) (link nu este disponibil) . Arhivat din original pe 14 iulie 2012.   
  6. Anunț de lansare a versiunii 4.0.0 a openEuphoria (link în jos) . Arhivat din original pe 14 iulie 2012. 
  7. 1 2 sigla și mascota openEuphoria (ing.) (link indisponibil) . Arhivat din original pe 14 iulie 2012.   
  8. 1 2 3 manual openEuhporia, Binding and Shrouding (engleză) (link indisponibil) . Arhivat din original pe 14 iulie 2012.   
  9. Proiect Euphoria Win32Lib la Sourceforge ( link inaccesibil) . Arhivat din original pe 14 iulie 2012.   
  10. Proiectul Euphoria wxEuphoria pe Sourceforge (ing.) (link nu este disponibil) . Arhivat din original pe 14 iulie 2012.   
  11. Proiectul Euphoria GTK+ la Sourceforge ( link inaccesibil) . Arhivat din original pe 14 iulie 2012.   
  12. Proiect Euphoria IUP de Jeremy Kovgar (engleză) (link nu este disponibil) . Arhivat din original pe 14 iulie 2012.   
  13. manualul openEuphoria, Baza de date (eng.) (downlink) . Arhivat din original pe 14 iulie 2012.   
  14. openEuphoria wiki, Interfețe de baze de date ( link mort) . Arhivat din original pe 14 iulie 2012.   
  15. Forum RapidEuphoria, 2002-09-10 de Robert Craig  (engleză)  (link nu este disponibil) . Arhivat din original pe 16 iulie 2011.
  16. 1 2 3 4 RapidEuphoria website, note de lansare (engleză) (downlink) . Arhivat din original pe 14 iulie 2012.   
  17. Forum RapidEuphoria, 2 mar 1998 13:04 de Robert Craig  (ing.)  (link indisponibil) . Arhivat din original pe 16 iulie 2011.
  18. Știri RapidEuphoria (engleză) (link nu este disponibil) . Arhivat din original pe 14 iulie 2012.   
  19. note de lansare openEuphoria ( link inaccesibil) . Arhivat din original pe 14 iulie 2012.   
  20. manual openEuhporia, Probleme specifice platformei (engleză) (link nu este disponibil) . Arhivat din original pe 14 iulie 2012.   
  21. Ce este nou în versiunea 4.0 . Preluat la 17 august 2012. Arhivat din original la 10 ianuarie 2012.
  22. foaia de parcurs openEuphoria (ing.) (downlink) . Arhivat din original pe 14 iulie 2012.   
  23. Acest cod elimină elementul rând cu numărul poz. Începând cu versiunea 4.0.0, Euphoria utilizează o procedură specială de eliminare () încorporată pentru a efectua această operație.
  24. Versiunea bilingvă a lui Euphoria arhivată pe RapidEuphoria.com ( link inaccesibil) . Arhivat din original pe 14 iulie 2012.   
  25. Phix . Preluat la 8 mai 2022. Arhivat din original la 12 martie 2016.
  26. Postarea lui Pete Lomax despre diferențele dintre Phix și Euphoria (ing.) (link mort) . Arhivat din original pe 14 iulie 2012.   
  27. Postarea lui Pete Lomax pe forumul OpenEuphoria despre diferența dintre Phix și Euphoria 4.0 ( link mort) . Arhivat din original pe 14 iulie 2012.