Euphoria (programmeringsspråk)

Eufori
Semantik nödvändigt
Språkklass processuella
Utförandetyp tolkning , bytekodtolkning , C - översättning
Framträdde i 1993
Författare Robert Craig (skapare) & Jeremy Kovgar, Matt Lewis, Derek Parnell (version 4-utvecklare)
Utvecklaren öppna Euphoria Group
Filtillägg _ .e, .ex, .exw, .edb
Släpp 4.15.2 [1]  (15 augusti 2019 ) ( 2019-08-15 )
Testversion 4.1 Beta 2
Typ system statisk , dynamisk
Dialekter RDS Euphoria, openEuphoria
Blivit påverkad BASIC , C
påverkas Phix
Licens öppna
Hemsida openeuphoria.org
OS plattformsoberoende
 Mediafiler på Wikimedia Commons

Euphoria ( [ju:ˈfɔ:riə] , yufori, även rysk eufori, glädje) är ett programmeringsspråk skapat av Robert Craig (Rapid Deployment Software) [2] i Toronto , Kanada . Namnet Euphoria är en akronym för "Slutanvändarprogrammering med hierarkiska objekt för robusta tolkade applikationer".

Den första offentliga utgåvan [3] var för 32-bitars maskiner (i386) med MS-DOS och var proprietär (1993). 2006, med releasen av version 3 [4] , blev Euphoria-projektet öppet , och det utvecklades av OpenEuphoria-communityt [5] , som i december 2010 släppte den 4:e versionen [6] med en ny logotyp och maskot [7 ] . Version 4.* av OpenEuphoria-paketet släpps för närvarande för Microsoft Windows , Linux , Mac OS X och tre BSD-system ( FreeBSD , NetBSD , OpenBSD ).

Euphoria är ett tolkat imperativspråk på hög nivå, allmänt ändamål . Euphoria-källkod kan användas för att generera C -källkod med hjälp av en översättare , som i sin tur kan kompileras till en körbar fil eller ett dynamiskt bibliotek med hjälp av kompilatorer som GCC , OpenWatcom , etc. Euphoria-programmet kan också "länkas" [8 ] med en tolk för att producera en självkörbar . Flera GUI- bibliotek stöds , inklusive Win32lib [9] och wrappers för wxWidgets [10] , GTK+ [11] och IUP [12] . Euphoria har ett inbyggt enkelt databassystem [13] och wrappers för att arbeta med andra typer av databaser [14] .

Översikt

Euphoria är ett allmänt procedurspråk som kännetecknas av enkelhet, läsbarhet, snabb distribution och hög prestanda.

Enkelhet Läsbarhet Snabb implementering Prestanda

Historik

Utvecklingen av Euphoria-språket började med experiment av Robert Craig [2] på Atari Mega-ST- persondatorn [15] . Många idéer om språkdesign kom från Craigs masteruppsats vid University of Toronto [16] . Avhandlingen skrevs under inflytande av John Backus arbete med funktionella programmeringsspråk [16] .

Craig portade sedan den ursprungliga Atari-implementeringen av språket till 32-bitarsplattformen med 386 maskiner som kör Microsoft MS-DOS och släppte det första paketet (version 1.0) i juli 1993 [3] under en egen licens, och grundade sitt eget företag Rapid Deployment Softawre (RDS ) för utveckling och försäljning av Euphoria-tolken i DOS32-varianten. Craig kallar den ursprungliga implementeringen för Atari "primitiv" [17] och publicerade den inte. Fram till 2006 fortsatte Craig att utveckla och publicera Euphoria i sin firma (rapideuphoria.com [2] ), bestående av honom själv och hans fru Janko Miura, och släppte mer än ett dussin versioner i två serier, 1.* och 2.*. I oktober 2006 lanserade RDS den tredje [4] Euphoria-serien och meddelade att Euphoria framöver skulle distribueras fritt under en öppen källkodslicens . Resultatet av att arbeta med egenutvecklade serier 1 och 2 är en gemenskap av registrerade användare i 67 länder runt om i världen, inklusive många programmerare, vars exakta antal är känt endast för RDS, men vid tidpunkten för releasen av version 2.5 var det bra över tusen.

Under direkt överinseende av RDS har communityn fortsatt att släppa Euphoria, vilket bringar paketet upp till version 3.1.1 (augusti 2007) [16] [18] . Sedan dess har RDS gradvis gått bort från ledarskapet för Euphoria-utveckling, och ytterligare förbättringar och förändringar görs av OpenEuphoria [5] -gemenskapen under kollegialt ledarskap. I december 2010 [19] släppte communityn version 4.0, som startar Series 4, nu med en ny projektlogotyp och maskot [7] .

Version 3.1.1 är en viktig milstolpe i utvecklingen av språket, eftersom det är den sista versionen som officiellt stöder MS-DOS-plattformen [20] . Version 3.1.1 är fortfarande den sista versionen av den strikta klassiska riktningen, utan de "friheter" som dök upp i den 4:e.

En kort lista över innovationer som har dykt upp sedan version 4.0.0 [21] :

och mycket mer.

Euphoria-språktolken skrevs ursprungligen helt i C. Sedan version 2.5 [16] , släppt i november 2004, har tolken delats upp i två delar: en parser skriven i Euphoria och en bytecode-tolk skriven i C.

Utmärkande egenskaper

Euphoria utformades och utvecklades med följande mål och funktioner i åtanke:

Exekveringslägen

Användning

Euphoria är tänkt att vara en nyckelfärdig lösning för att underlätta hanteringen av dynamiska samlingar av data av olika slag, och är särskilt användbar för hantering av strängar och bilder. Euphoria används för att experimentera med artificiell intelligens , studera matematik , lära ut programmering och för att skapa typsnitt som består av tusentals tecken. En ganska stor del av Euphoria-tolken är skriven i Euphoria.

Datatyper

Euphoria har fyra inbyggda datatyper:

atom (atom) ett tal implementerat som ett 31-bitars heltal med tecken eller 64-bitars IEEE flyttal . Euphoria växlar dynamiskt mellan att representera ett tal som ett heltal eller ett flyttal beroende på dess aktuella värde. sekvens (nummer, sekvens) en uppsättning som består av flera element. Varje element i mängden kan vara antingen en atom eller ett tal . Antalet radelement är inte fast (kräver ingen obligatorisk deklaration). Programmet kan lägga till eller ta bort element efter behov när som helst. Minnesallokering/deallokering hanteras automatiskt med hjälp av referensräkning. Enskilda element nås med hjälp av indexvärdet inom hakparenteser. Indexet för det första elementet är [1]. Element i kapslade serier nås med hjälp av ytterligare index inom hakparenteser, så X[3][2] refererar till det andra elementet i den kapslade serien, vilket är det tredje elementet i serie X. Varje element i serien är av typen objekt ( objekt) (se nedan ). heltal (heltal) en atom vars värden bara kan vara heltal från -1073741824 till 1073741823 (från -2 30 till 2 30 -1). Heltalstypen är ofta mer effektiv i operationer än atomtypen , men kan inte innehålla samma värdeintervall . Tecken lagras som siffror, till exempel är ASCII 'A' samma som 65. objekt (objekt) en allmän datatyp som kan innehålla data av vilken som helst av de listade typerna ( atom , sekvens eller heltal ) som ändras under programkörning.

Euphoria har ingen speciell datatyp för teckensträngar . En sträng är en serie heltal , men strängar använder den vanliga notationen inom dubbla citattecken. Alltså i Euphoria-programmet

"ABC"

ekvivalent med:

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

och motsvarande:

{65,66,67}

Förutom inbyggda typer kan ett Euphoria-program fungera med programmerardefinierade datatyper som specificerar ett smalare intervall av variabelvärden inom gränserna för inbyggda typer. Användardefinierade datatyper används huvudsakligen vid felsökning av ett program; efter felsökning kan kontroll av dessa typer avaktiveras av direktivet without type_check, medan kontroll av inbyggda typer alltid förblir aktiverad.

Exempel

hej världen

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

Arbeta med rader

Följande kod letar efter element x i en grupp av element. Om ett sådant element hittas tas det bort genom att sammanfoga alla element i gruppen före det med alla element efter det. Observera att det första elementet i serien har index ett [1], och dollartecknet $ som index anger numret på det sista elementet i serien.

funktion delete_item ( objekt x, sekvensgrupp ) heltal pos pos = hitta ( x, grupp ) om pos > 0 då grupp = grupp[1 .. pos-1] & grupp[pos+1 .. $] sluta om returnera gruppslutfunktion _

Kodrad

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

visar ett sätt att arbeta med serier [23] . En rad kan innehålla en grupp av element av vilken typ som helst, och de kan väljas och sedan kombineras ( sammanlänkade ) med en annan rad med hjälp av inbyggda operatorer. Operationen att välja elementen i en serie kallas sektionen av serien.

Nästa modifiering av föregående exempel ersätter det gamla elementet med det nya. Eftersom variablerna gammalt och nytt deklareras som objekt kan de vara både atomer och serier. Ingen typkontroll krävs eftersom funktionen kan fungera på vilken datatyp som helst.

funktion replace_item( objekt gammalt, objekt nytt, sekvensgrupp ) heltal pos pos = hitta ( gammal, grupp ) om pos > 0 då grupp[pos] = ny sluta om returnera gruppslutfunktion _

Passerar parametrar

Parametrar till subrutinen skickas alltid av värde, men initialt skickas endast en referens till objektet, och dess kopia skapas endast om subrutinen försöker ändra den, och sedan fungerar subrutinen med kopian och inte med objektet själv (den så kallade " kopiera-på-skriv- metoden") . Således kan parametern ändras inuti subrutinen, medan det ursprungliga objektet förblir oförändrat. Alternativt kan en modifierad kopia av objektet skickas som returvärde för funktionen.

Stora ändringar och dialekter av Euphoria

Tvåspråkig version av Euphoria

Det finns en modifiering av 2.5-versionen av Euphoria med engelska och ryska nyckelord (i CP866- kodning ) och ett obegränsat alfabet för identifierare, utvecklat med deltagande av Craig [24] . En tvåspråkig mod för Euphoria version 3 är också under utveckling, för närvarande i alfa.

Phix

Phix [25] är en kompilator för programmeringsspråk  utvecklad av Pete Lomax baserat på RDS Euphoria-syntax, men med följande skillnader [26] [27] :

För närvarande har den aktuella versionen 0.6.2 av kompilatorn, släppt den 10 juli 2011, en betastatus.

Relaterade programmeringsspråk

Litteratur

Juliet Kemp. Glad kodning med OpenEuphoria  // LinuxFormat (engelsk version). - November 2013. - Nr 176 .

Länkar

Anteckningar

  1. EuGTK 4.15.2 publicerad . Arkiverad från originalet den 30 januari 2021. Hämtad 5 april 2022.
  2. 1 2 3 RapidEuphorias webbplats (eng.) (inte tillgänglig länk) . Arkiverad från originalet den 14 juli 2012.   
  3. 1 2 RapidEuphoria forum, 2006-10-18 16:44 av Robert Craig  (eng.)  (nedlänk) . Arkiverad från originalet den 16 juli 2011.
  4. 1 2 RapidEuphoria forum, 2006-10-18 1:19 av Robert Craig  (eng.)  (nedlänk) . Arkiverad från originalet den 16 juli 2011.
  5. 1 2 Gemenskapswebbplats öppenEuphoria (engelska) (länk ej tillgänglig) . Arkiverad från originalet den 14 juli 2012.   
  6. Utgivningsmeddelande om openEuphoria version 4.0.0 (nedlänk) . Arkiverad från originalet den 14 juli 2012. 
  7. 1 2 openEuphoria logotyp och maskot (eng.) (länk ej tillgänglig) . Arkiverad från originalet den 14 juli 2012.   
  8. 1 2 3 öppenEuhporia manual, Bindning och hölje (engelska) (länk ej tillgänglig) . Arkiverad från originalet den 14 juli 2012.   
  9. Euphoria Win32Lib-projekt på Sourceforge ( otillgänglig länk) . Arkiverad från originalet den 14 juli 2012.   
  10. Euphoria-projektet wxEuphoria på Sourceforge (eng.) (länk ej tillgänglig) . Arkiverad från originalet den 14 juli 2012.   
  11. Euphoria GTK+-projekt på Sourceforge ( otillgänglig länk) . Arkiverad från originalet den 14 juli 2012.   
  12. Euphoria IUP-projekt av Jeremy Kovgar (engelska) (länk ej tillgänglig) . Arkiverad från originalet den 14 juli 2012.   
  13. openEuphoria manual, Database (eng.) (nedlänk) . Arkiverad från originalet den 14 juli 2012.   
  14. openEuphoria wiki, Databas Interfaces ( död länk) . Arkiverad från originalet den 14 juli 2012.   
  15. RapidEuphoria forum, 2002-09-10 av Robert Craig  (engelska)  (länk ej tillgänglig) . Arkiverad från originalet den 16 juli 2011.
  16. 1 2 3 4 RapidEuphoria webbsida, release notes (engelska) (nedlänk) . Arkiverad från originalet den 14 juli 2012.   
  17. RapidEuphoria forum, 2 mars 1998 13:04 av Robert Craig  (eng.)  (otillgänglig länk) . Arkiverad från originalet den 16 juli 2011.
  18. RapidEuphoria news (engelska) (länk ej tillgänglig) . Arkiverad från originalet den 14 juli 2012.   
  19. openEuphoria release notes ( otillgänglig länk) . Arkiverad från originalet den 14 juli 2012.   
  20. öppnaEuhporia-manualen, Platform Specific Issues (engelska) (länk ej tillgänglig) . Arkiverad från originalet den 14 juli 2012.   
  21. Vad är nytt i version 4.0 . Hämtad 17 augusti 2012. Arkiverad från originalet 10 januari 2012.
  22. openEuphoria roadmap (eng.) (nedlänk) . Arkiverad från originalet den 14 juli 2012.   
  23. Denna kod tar bort radelementet med nummer pos. Sedan version 4.0.0 använder Euphoria en speciell inbyggd remove()-procedur för att utföra denna operation.
  24. Tvåspråkig version av Euphoria arkiverad på RapidEuphoria.com ( otillgänglig länk) . Arkiverad från originalet den 14 juli 2012.   
  25. Phix . Hämtad 8 maj 2022. Arkiverad från originalet 12 mars 2016.
  26. Pete Lomax inlägg om skillnaderna mellan Phix och Euphoria (eng.) (död länk) . Arkiverad från originalet den 14 juli 2012.   
  27. Pete Lomaxs inlägg på OpenEuphoria-forumet om skillnaden mellan Phix och Euphoria 4.0 ( död länk) . Arkiverad från originalet den 14 juli 2012.