Euphoria (limbaj de programare)

Euphoria
openEuphoria logo
openEuphoria logo
Euphoria
Extensii fișiere.e, .ex, .exw, .edb
ParadigmăImperative, procedural
Apărut în1993; acum 31 ani (1993)
Proiectat deJeremy Cowgar, Robert Craig (original), Matt Lewis, Derek Parnell
DezvoltatoropenEuphoria Group
Ultima versiune4.1.0[1]  Modificați la Wikidata
Tiparestatic, dynamic
Influențat deBASIC  Modificați la Wikidata
InfluențePhix
Sistem de operareCross-platform: Win32, Linux, macOS, FreeBSD, NetBSD, OpenBSD
LicențăBSD
Prezență onlineopeneuphoria.org

Euphoria este un limbaj de programare creat de Robert Craig (Rapid Deployment Software)[2] în Canada, Toronto. Numele Euphoria este un acronim pentru «End-User Programming with Hierarchical Objects for Robust Interpreted Applications».

Prima lansare publică[3] a fost destinată mașinilor pe 32 de biți (i386) cu MS-DOS și a fost autorizată (1993). În 2006, odată cu lansarea versiunii 3[4], proiectul Euphoria a devenit deschis, iar comunitatea OpenEuphoria[5] a început să o dezvolte, iar în decembrie 2010 a lansat versiunea 4[6] cu un nou logo și mascot[7]. În prezent, OpenEuphoria versiunea 4. * lansată pentru Microsoft Windows, Linux, Mac OS X și trei sisteme BSD (FreeBSD, NetBSD, OpenBSD).

Euphoria este un limbaj imperativ interpretabil, de nivel înalt, cu scop general. Folosind un traducător de la codul sursă pe Euphoria, poate fi generat un cod sursă C, care la rândul său poate fi compilat într-un fișier executabil sau într-o bibliotecă dinamică folosind compilatoare cum ar fi GCC, OpenWatcom etc. Mai multe biblioteci GUI sunt suportate, inclusiv Win32lib[8] și wrappers pentru wxWidgets[9], GTK +[10] și IUP[11]. Euphoria are un sistem de baze de date simple[12] și ambalaje pentru lucrul cu alte tipuri de baze de date[13].

Prezentare

Euphoria este un limbaj procedural de uz general, ale cărui caracteristici distinctive sunt simplitatea, lizibilitatea, desfășurarea rapidă și performanțele ridicate.

Simplitate
  • Limbajul utilizează numai patru tipuri de date încorporate (a se vedea mai jos).
  • Colecția automată de gunoi.
Lizibilitate
  • Pentru a separa construcțiile sintactice, sunt folosite cuvinte cheie simple din limba engleză, mai degrabă decât semne de punctuație.
Implementare rapidă
  • Euphoria este un limbaj interpretat care facilitează prototiparea și dezvoltarea incrementală.
Productivitate

Euphoria folosește un colector eficient de gunoi care numără referințe și procesează corect referințele circulare.

Caracteristici distinctive

Euphoria a fost concepută și dezvoltată cu următoarele obiective și trăsături distinctive:

  • Ușurința de învățare și simplitatea structurilor de nivel înalt
  • Realizarea modelului de memorie "plat" pe 32 de biți pentru versiunea MS-DOS, care evită dificultățile de gestionare a memoriei și limitarea obiectelor în funcție de dimensiune și adresă
  • Suportă depanarea și gestionarea erorilor în timpul rulării
  • Controlul asupra limitelor matricelor
  • Tipărirea dinamică și puternică a variabilelor
  • Interpretabilitate cu gestionarea automată a memoriei și colectarea gunoiului
  • Tipuri de colecții heterogene (secvențe)
  • Biblioteca grafică DOS (Versiuni ale limbajului Euphoria până la 3.1.1 inclusiv)
  • Debugger
  • Sistem de baze de date încorporate
  • Posibilitatea de gestionare a memoriei la nivel scăzut (utilizată de obicei atunci când interacționați cu codul localizat în biblioteci dinamice)
  • Manipularea memoriei la nivel scăzut

Moduri de execuție

  • Interpretor
  • Traducerea programului în limbajul C urmată de compilarea într-un modul executabil separat sau dintr-o bibliotecă dinamică
  • Compilația în Bytecode[8] și interpretarea ulterioară
  • Conectarea bytecode cu interpret[8] pentru a obține fișier executabil
  • Execuția interactivă (REPL) - în planurile comunității openEuphoria[14]

Utilizare

Euphoria este concepută ca o soluție gata făcută pentru a facilita procesarea colecțiilor dinamice de date de diferite tipuri și este deosebit de convenabilă pentru procesarea șirurilor și imaginilor. Euphoria este folosită pentru a experimenta inteligența artificială, a studia matematica, a învăța programarea și a crea fonturi compuse din mii de caractere.

Tipuri de date

Euphoria are patru tipuri de date încorporate:

atom
un număr, implementat ca un număr întreg cu semn pe 31 de biți sau un punct de flotare pe 64 de biți IEEE. Euforia trece în mod dinamic între reprezentarea unui număr ca număr întreg sau număr de punct de flotare, în funcție de valoarea sa actuală.
sequence(rând, secvență)
set format din mai multe elemente. Fiecare element al setului poate fi atât un atom, cât și un număr. Numărul de elemente ale seriei nu este fix (nu necesită un anunț obligatoriu). Programul poate adăuga sau elimina elemente în orice moment. Alocarea/eliberarea memoriei este efectuată automat prin numărarea referințelor. Accesul la elementele individuale are loc prin valoarea indexului, închisă în paranteze pătrate. Indicele primului element este [1]. Elementele rândurilor imbricate sunt accesate folosind indicii adiționali în paranteze pătrate, deci X [3] [2] se referă la cel de-al doilea element al seriilor imbricate, care este al treilea element al lui X. Fiecare element al seriei are un tip de obiect (vezi mai jos).
integer (întreg)
un atom ale cărui valori pot fi numere întregi de la -1073741824 la 1073741823 (de la -230 la 230-1). Tipul întregului este adesea mai eficient în operațiuni decât tipul atomului, dar nu poate conține același interval de valori. Caracterele sunt stocate ca numere, cum ar fi ASCII 'A', la fel ca 65.
object (obiect)
tipul general de date, care poate conține date ale oricăror tipuri listate (atom, secvență sau număr î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, totuși, pentru șiruri de caractere, se folosesc citatele duble obișnuite. Deci, în programul Euphoria

"ABC"

echivalent cu:

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

și echivalent cu:

{65,66,67}

În plus față de tipurile încorporate, Euphoria poate lucra cu tipurile de date definite de programator și poate seta un interval mai restrâns de valori variabile în limitele tipurilor încorporate. Tipurile de date definite de utilizator sunt utilizate în principal atunci când se depanează un program, iar după finalizarea acestuia, verificarea acestor tipuri poate fi dezactivată printr-o directivă without type_check, totuși, verificarea tipului încorporat este întotdeauna activată.

Exemple

Hello World

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

Lucru cu rânduri

Următorul cod caută elementul x din grupul de elemente. Dacă se găsește un astfel de element, acesta este eliminat prin concatenarea tuturor elementelor din grupul din fața acestuia cu toate elementele după el. Observăm că primul element al seriei are un indice de un [1], iar semnul dolar $ ca indicele denotă numărul ultimului element al seriei.

function delete_item (object x, sequence group)
   integer pos
   pos = find( x, group )
   if pos > 0 then
       group = group[1 .. pos-1] & group[pos+1 .. $]
   end if
   return group
end function

Linia de cod

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

arată una dintre modalitățile de a lucra cu rânduri [23]. O serie poate conține un grup de elemente de orice tip și ele pot fi selectate și apoi combinate (concatenate) cu o altă serie utilizând operatori încorporați. Funcționarea elementelor de selecție dintr-o serie este denumită secțiune dintr-o serie.

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

function replace_item( object old, object new, sequence group )
   integer pos
   pos = find( old, group )
   if pos > 0 then
       group[pos] = new
   end if
   return group
end function

Limbaje de programare înrudite

Note

  1. ^ OpenEuphoria: 4.1.0 Latest Mar 1, 2021 (în engleză), , accesat în  
  2. ^ „Сайт RapidEuphoria” (în engleză). Arhivat din original la . 
  3. ^ „RapidEuphoria forum, 2006-10-18 16:44 by Robert Craig” (în engleză). Arhivat din original la . 
  4. ^ „RapidEuphoria forum, 2006-10-18 1:19 by Robert Craig” (în engleză). Arhivat din original la . 
  5. ^ „Сайт сообщества openEuphoria” (în engleză). Arhivat din original la . 
  6. ^ „Сообщение о выходе openEuphoria версии 4.0.0”. Arhivat din original la . 
  7. ^ „Логотип и талисман openEuphoria” (în engleză). Arhivat din original la . 
  8. ^ a b c „openEuhporia manual, Binding and Shrouding” (în engleză). Arhivat din original la . 
  9. ^ „Euphoria проект wxEuphoria на Sourceforge” (în engleză). Arhivat din original la . 
  10. ^ „Euphoria проект GTK+ на Sourceforge” (în engleză). Arhivat din original la . 
  11. ^ „Euphoria проект IUP Джереми Ковгара” (în engleză). Arhivat din original la . 
  12. ^ „openEuphoria manual, Database” (în engleză). Arhivat din original la . 
  13. ^ „openEuphoria wiki, Database Interfaces” (în engleză). Arhivat din original la . 
  14. ^ „openEuphoria roadmap” (în engleză). Arhivat din original la . 
Commons
Commons
Wikimedia Commons conține materiale multimedia legate de Euphoria