Euphoria (limbaj de programare)
Euphoria | |
openEuphoria logo | |
Euphoria | |
Extensii fișiere | .e, .ex, .exw, .edb |
---|---|
Paradigmă | Imperative, procedural |
Apărut în | 1993 |
Proiectat de | Jeremy Cowgar, Robert Craig (original), Matt Lewis, Derek Parnell |
Dezvoltator | openEuphoria Group |
Ultima versiune | 4.1.0[1] |
Tipare | static, dynamic |
Influențat de | BASIC |
Influențe | Phix |
Sistem de operare | Cross-platform: Win32, Linux, macOS, FreeBSD, NetBSD, OpenBSD |
Licență | BSD |
Prezență online | openeuphoria.org |
Modifică date / text |
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
modificareEuphoria 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
modificareEuphoria 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
modificare- 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
modificareEuphoria 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
modificareEuphoria 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
modificareHello World
modificare puts (1,"Hello World!\n")
Lucru cu rânduri
modificareUrmă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
modificareNote
modificare- ^ OpenEuphoria: 4.1.0 Latest Mar 1, 2021 (în engleză), , accesat în
- ^ „Сайт RapidEuphoria” (în engleză). Arhivat din original la .
- ^ „RapidEuphoria forum, 2006-10-18 16:44 by Robert Craig” (în engleză). Arhivat din original la .
- ^ „RapidEuphoria forum, 2006-10-18 1:19 by Robert Craig” (în engleză). Arhivat din original la .
- ^ „Сайт сообщества openEuphoria” (în engleză). Arhivat din original la .
- ^ „Сообщение о выходе openEuphoria версии 4.0.0”. Arhivat din original la .
- ^ „Логотип и талисман openEuphoria” (în engleză). Arhivat din original la .
- ^ a b c „openEuhporia manual, Binding and Shrouding” (în engleză). Arhivat din original la .
- ^ „Euphoria проект wxEuphoria на Sourceforge” (în engleză). Arhivat din original la .
- ^ „Euphoria проект GTK+ на Sourceforge” (în engleză). Arhivat din original la .
- ^ „Euphoria проект IUP Джереми Ковгара” (în engleză). Arhivat din original la .
- ^ „openEuphoria manual, Database” (în engleză). Arhivat din original la .
- ^ „openEuphoria wiki, Database Interfaces” (în engleză). Arhivat din original la .
- ^ „openEuphoria roadmap” (în engleză). Arhivat din original la .