Euphoria (programmeringssprog)

Eufori
Semantik bydende nødvendigt
Sprog klasse proceduremæssige
Udførelsestype fortolkning , bytekodefortolkning , C - oversættelse
Dukkede op i 1993
Forfatter Robert Craig (Creator) & Jeremy Kovgar, Matt Lewis, Derek Parnell (version 4-udviklere)
Udvikler åbne Euphoria Group
Filtypenavn _ .e, .ex, .exw, .edb
Frigøre 4.15.2 [1]  (15. august 2019 ) ( 2019-08-15 )
Test version 4.1 Beta 2
Type system statisk , dynamisk
Dialekter RDS Euphoria, openEuphoria
Blev påvirket BASIC , C
påvirket Phix
Licens åben
Internet side openeuphoria.org
OS på tværs af platforme
 Mediefiler på Wikimedia Commons

Euphoria ( [ju:ˈfɔ:riə] , yufori, også russisk eufori, glæde) er et programmeringssprog skabt af Robert Craig (Rapid Deployment Software) [2] i Toronto , Canada . Navnet Euphoria er et akronym for "End-User Programming with Hierarchical Objects for Robust Interpreted Applications".

Den første offentlige udgivelse [3] var til 32-bit maskiner (i386) med MS-DOS og var proprietær (1993). I 2006, med udgivelsen af ​​version 3 [4] , blev Euphoria-projektet åbent , og det blev udviklet af OpenEuphoria-fællesskabet [5] , som i december 2010 udgav den 4. version [6] med et nyt logo og maskot [7 ] . Version 4.* af OpenEuphoria-pakken er i øjeblikket udgivet til Microsoft Windows , Linux , Mac OS X og tre BSD-systemer ( FreeBSD , NetBSD , OpenBSD ).

Euphoria er et fortolket imperativt sprog på højt niveau, generelt til formål . Euphoria-kildekode kan bruges til at generere C -kildekode ved hjælp af en oversætter , som igen kan kompileres til en eksekverbar fil eller et dynamisk bibliotek ved hjælp af kompilatorer som GCC , OpenWatcom osv. Euphoria-programmet kan også "linkes" [8 ] med en tolk for at producere en selveksekverbar . Adskillige GUI- biblioteker er understøttet , inklusive Win32lib [9] og wrappers til wxWidgets [10] , GTK+ [11] og IUP [12] . Euphoria har et indbygget simpelt databasesystem [13] og wrappers til at arbejde med andre typer databaser [14] .

Oversigt

Euphoria er et almindeligt proceduresprog karakteriseret ved enkelhed, læsbarhed, hurtig implementering og høj ydeevne.

Enkelhed Læsbarhed Hurtig implementering Ydeevne

Historie

Udviklingen af ​​Euphoria-sproget begyndte med eksperimenter udført af Robert Craig [2] på den personlige computer Atari Mega-ST [15] . Mange ideer til sprogdesign kom fra Craigs masterafhandling ved University of Toronto [16] . Afhandlingen er skrevet under indflydelse af John Backus ' arbejde med funktionelle programmeringssprog [16] .

Craig overførte derefter den originale Atari-implementering af sproget til 32-bit platformen på 386 maskiner, der kører Microsoft MS-DOS og udgav den første pakke (version 1.0) i juli 1993 [3] under en proprietær licens, og grundlagde sit eget firma Rapid Deployment Softawre (RDS ) til udvikling og salg af Euphoria-tolken i DOS32-varianten. Craig kalder den oprindelige implementering for Atari "primitiv" [17] og udgav den ikke. Indtil 2006 fortsatte Craig med at udvikle og udgive Euphoria i sit firma (rapideuphoria.com [2] ), bestående af ham selv og hans kone Janko Miura, og udgav mere end et dusin versioner i to serier, 1.* og 2.*. I oktober 2006 lancerede RDS den 3. [4] Euphoria-serie og annoncerede, at Euphoria fremover ville blive frit distribueret under en open source- licens. Resultatet af at arbejde med proprietære serier 1 og 2 er et fællesskab af registrerede brugere i 67 lande rundt om i verden, inklusive mange programmører, hvis nøjagtige antal kun er kendt af RDS, men på tidspunktet for udgivelsen af ​​version 2.5 var det godt over tusind.

Under direkte overvågning af RDS er fællesskabet fortsat med at frigive Euphoria, hvilket bringer pakken op til version 3.1.1 (august 2007) [16] [18] . Siden da har RDS gradvist bevæget sig væk fra ledelsen af ​​Euphoria-udvikling, og yderligere forbedringer og ændringer er foretaget af OpenEuphoria [5] -fællesskabet under kollegial ledelse. I december 2010 [19] udgav fællesskabet version 4.0, der startede Series 4, nu med et nyt projektlogo og maskot [7] .

Version 3.1.1 er en vigtig milepæl i udviklingen af ​​sproget, da det er den sidste version, der officielt understøtter MS-DOS-platformen [20] . Version 3.1.1 er stadig den sidste version af den strenge klassiske retning, uden de "friheder", der dukkede op i den 4.

En kort liste over innovationer, der er dukket op siden version 4.0.0 [21] :

og meget mere.

Euphoria sprogtolken blev oprindeligt skrevet udelukkende i C. Siden version 2.5 [16] , udgivet i november 2004, er fortolkeren blevet opdelt i to dele: en parser skrevet i Euphoria og en bytekodefortolker skrevet i C.

Karakteristiske træk

Euphoria blev udtænkt og udviklet med følgende mål og funktioner i tankerne:

Udførelsestilstande

Brug

Euphoria er beregnet til at være en nøglefærdig løsning til at lette håndteringen af ​​dynamiske samlinger af data af forskellige typer, og er særligt anvendelig til håndtering af strenge og billeder. Euphoria bruges til at eksperimentere med kunstig intelligens , studere matematik , undervise i programmering og til at skabe skrifttyper bestående af tusindvis af tegn. En ret stor del af Euphoria-tolken er skrevet i Euphoria.

Datatyper

Euphoria har fire indbyggede datatyper:

atom (atom) et tal implementeret som et 31-bit signeret heltal eller 64-bit IEEE flydende deal . Euphoria skifter dynamisk mellem at repræsentere et tal som et heltal eller et flydende kommatal afhængigt af dets aktuelle værdi. sekvens (nummer, sekvens) et sæt bestående af flere elementer. Hvert element i sættet kan enten være et atom eller et tal . Antallet af rækkeelementer er ikke fast (kræver ikke obligatorisk erklæring). Programmet kan til enhver tid tilføje eller fjerne elementer efter behov. Hukommelsesallokering/deallokering håndteres automatisk ved hjælp af referencetælling. De enkelte elementer tilgås ved hjælp af indeksværdien i firkantede parenteser. Indekset for det første element er [1]. Elementer i indlejrede serier tilgås ved hjælp af yderligere indekser i firkantede parenteser, så X[3][2] refererer til det andet element i den indlejrede serie, som er det tredje element i serie X. Hvert element i serien er af typen objekt ( objekt) (se nedenfor). heltal (heltal) et atom, hvis værdier kun kan være heltal fra -1073741824 til 1073741823 (fra -2 30 til 2 30 -1). Heltalstypen er ofte mere effektiv i operationer end atomtypen , men kan ikke indeholde det samme værdiområde. Tegn gemmes som tal, for eksempel er ASCII 'A' det samme som 65. objekt (objekt) en generel datatype, der kan indeholde data af enhver af de anførte typer ( atom , sekvens eller heltal ), som ændres under programafvikling.

Euphoria har ikke en speciel datatype for tegnstrenge . En streng er en række heltal , men strenge bruger den sædvanlige notation i dobbelte anførselstegn. Således i Euphoria-programmet

"ABC"

svarende til:

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

og tilsvarende:

{65,66,67}

Ud over indbyggede typer kan et Euphoria-program arbejde med programmør-definerede datatyper, der specificerer et snævrere område af variable værdier inden for grænserne for indbyggede typer. Brugerdefinerede datatyper bruges hovedsageligt ved fejlretning af et program; efter fejlretning kan kontrol af disse typer deaktiveres af direktivet without type_check, mens kontrol af indbyggede typer altid forbliver aktiveret.

Eksempler

hej verden

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

Arbejde med rækker

Følgende kode leder efter element x i en gruppe af elementer. Hvis et sådant element findes, fjernes det ved at sammenkæde alle elementer i gruppen før det med alle elementer efter det. Bemærk, at det første element i serien har indeks et [1], og dollartegnet $ som indeks angiver nummeret på det sidste element i serien.

funktion delete_item ( objekt x, sekvensgruppe ) heltal pos pos = find ( x, gruppe ) hvis pos > 0 så gruppe = gruppe[1 .. pos-1] & gruppe[pos+1 .. $] Afslut Hvis returnere gruppeslutfunktion _

Kodelinje

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

viser en måde at arbejde med serier på [23] . En række kan indeholde en gruppe elementer af enhver type, og de kan vælges og derefter kombineres ( sammenkædet ) med en anden række ved hjælp af indbyggede operatorer. Operationen med at vælge elementerne i en serie kaldes sektionen af ​​serien.

Den næste ændring af det foregående eksempel erstatter det gamle element med det nye. Da variablerne gammel og ny er erklæret som objekter, kan de både være atomer og serier. Der kræves ingen typekontrol, da funktionen kan fungere på enhver datatype.

funktion replace_item( objekt gammelt, objekt nyt, sekvensgruppe ) heltal pos pos = find ( gammel, gruppe ) hvis pos > 0 så gruppe[pos] = ny Afslut Hvis returnere gruppeslutfunktion _

Passer parametre

Parametre til subrutinen videregives altid efter værdi, men i starten sendes kun en reference til objektet, og dets kopi oprettes kun, hvis subrutinen forsøger at ændre det, og derefter arbejder subrutinen med kopien og ikke med objektet sig selv (den såkaldte " copy-on-write "-metode) . Således kan parameteren ændre sig inde i subrutinen, mens det oprindelige objekt forbliver uændret. Eventuelt kan en modificeret kopi af objektet sendes som returværdi for funktionen.

Større modifikationer og dialekter af Euphoria

Tosproget version af Euphoria

Der er en modifikation af 2.5-versionen af ​​Euphoria med engelske og russiske nøgleord (i CP866- kodning ) og et ubegrænset alfabet for identifikatorer, udviklet med deltagelse af Craig [24] . En tosproget mod til Euphoria version 3 er også under udvikling, i øjeblikket i alfa.

Phix

Phix [25] er en programmeringssprogskompiler udviklet  af Pete Lomax baseret på RDS Euphoria-syntaks, men med følgende forskelle [26] [27] :

I øjeblikket har den aktuelle version 0.6.2 af compileren, udgivet den 10. juli 2011, en beta-status.

Relaterede programmeringssprog

Litteratur

Julie Kemp. Glædelig kodning med OpenEuphoria  // LinuxFormat (engelsk version). - November 2013. - Nr. 176 .

Links

Noter

  1. EuGTK 4.15.2 udsendt . Arkiveret fra originalen den 30. januar 2021. Hentet 5. april 2022.
  2. 1 2 3 RapidEuphoria hjemmeside (eng.) (utilgængeligt link) . Arkiveret fra originalen den 14. juli 2012.   
  3. 1 2 RapidEuphoria forum, 2006-10-18 16:44 af Robert Craig  (eng.)  (downlink) . Arkiveret fra originalen den 16. juli 2011.
  4. 1 2 RapidEuphoria forum, 2006-10-18 1:19 af Robert Craig  (eng.)  (downlink) . Arkiveret fra originalen den 16. juli 2011.
  5. 1 2 Fællesskabsside åbenEuphoria (engelsk) (link ikke tilgængeligt) . Arkiveret fra originalen den 14. juli 2012.   
  6. Udgivelsesmeddelelse om openEuphoria version 4.0.0 (downlink) . Arkiveret fra originalen den 14. juli 2012. 
  7. 1 2 openEuphoria-logo og maskot (eng.) (link ikke tilgængeligt) . Arkiveret fra originalen den 14. juli 2012.   
  8. 1 2 3 åbenEuhporia manual, Indbinding og indkapsling (engelsk) (link ikke tilgængelig) . Arkiveret fra originalen den 14. juli 2012.   
  9. Euphoria Win32Lib-projekt på Sourceforge ( utilgængeligt link) . Arkiveret fra originalen den 14. juli 2012.   
  10. Euphoria-projektet wxEuphoria på Sourceforge (eng.) (link ikke tilgængeligt) . Arkiveret fra originalen den 14. juli 2012.   
  11. Euphoria GTK+-projekt på Sourceforge ( utilgængeligt link) . Arkiveret fra originalen den 14. juli 2012.   
  12. Euphoria IUP-projekt af Jeremy Kovgar (engelsk) (link ikke tilgængeligt) . Arkiveret fra originalen den 14. juli 2012.   
  13. openEuphoria manual, Database (eng.) (downlink) . Arkiveret fra originalen den 14. juli 2012.   
  14. openEuphoria wiki, Database Interfaces ( dødt link) . Arkiveret fra originalen den 14. juli 2012.   
  15. RapidEuphoria forum, 2002-09-10 af Robert Craig  (engelsk)  (link ikke tilgængeligt) . Arkiveret fra originalen den 16. juli 2011.
  16. 1 2 3 4 RapidEuphoria hjemmeside, release notes (engelsk) (downlink) . Arkiveret fra originalen den 14. juli 2012.   
  17. RapidEuphoria forum, 2. marts 1998 13:04 af Robert Craig  (eng.)  (utilgængeligt link) . Arkiveret fra originalen den 16. juli 2011.
  18. RapidEuphoria nyheder (engelsk) (link ikke tilgængeligt) . Arkiveret fra originalen den 14. juli 2012.   
  19. openEuphoria release notes ( utilgængeligt link) . Arkiveret fra originalen den 14. juli 2012.   
  20. åbenEuhporia-manual, platformspecifikke problemer (engelsk) (link ikke tilgængeligt) . Arkiveret fra originalen den 14. juli 2012.   
  21. Hvad er nyt i version 4.0 . Hentet 17. august 2012. Arkiveret fra originalen 10. januar 2012.
  22. openEuphoria roadmap (eng.) (downlink) . Arkiveret fra originalen den 14. juli 2012.   
  23. Denne kode fjerner rækkeelementet med nummer pos. Siden version 4.0.0 bruger Euphoria en speciel indbygget remove()-procedure til at udføre denne handling.
  24. Tosproget version af Euphoria arkiveret på RapidEuphoria.com ( utilgængeligt link) . Arkiveret fra originalen den 14. juli 2012.   
  25. Phix . Hentet 8. maj 2022. Arkiveret fra originalen 12. marts 2016.
  26. Pete Lomaxs indlæg om forskellene mellem Phix og Euphoria (eng.) (dødt link) . Arkiveret fra originalen den 14. juli 2012.   
  27. Pete Lomaxs indlæg på OpenEuphoria-forummet om forskellen mellem Phix og Euphoria 4.0 ( dødt link) . Arkiveret fra originalen den 14. juli 2012.