GNU Guile - GNU Guile

GNU Guile
GNU-Guile-logo.svg
Familie Lisp
Designet af Aubrey Jaffer, Tom Lord, Miles Bader
Udvikler GNU -projekt
Første gang dukkede op 1993 ; 28 år siden ( 1993 )
Stabil udgivelse
3.0.7 / 10. maj 2021 ; for 5 måneder siden ( 2021-05-10 )
Platform IA-32 , x86-64 , AArch64 , armel , armhf , mips , mips64el , mipsel , ppc64el , s390x
OS Linux , BSD , Windows (gennem MinGW eller Cygwin )
Licens GNU LGPLv3+
Filnavn udvidelser .scm .go (Guile -objekt)
Internet side gnu .org /software /guile
Påvirket af
Lisp , Scheme , SCM

GNU Ubiquitous Intelligent Language for udvidelser ( GNU Guile ) er det foretrukne forlængelse sproget system til GNU-projektet og har en implementering af programmeringssproget Scheme . Den første version blev udgivet i 1993. Ud over store dele af Scheme -standarder inkluderer Guile Scheme modulopbyggede udvidelser til mange forskellige programmeringsopgaver.

Til forlængelse programmer, Guile tilbud libguile der tillader det sprog der skal indlejres i andre programmer, og integreres nøje gennem C sproget Application Programming Interface (API); på samme måde kan nye datatyper og underrutiner, der er defineret via C API, gøres tilgængelige som udvidelser til Guile.

Guile bruges i programmer som GnuCash , LilyPond , GNU Guix , GNU Debugger , GNU TeXmacs og Googles skisma .

Guile -ordning

Guile Scheme er en generel formål , sprog på højt niveau programmering , hvis fleksibilitet gør det muligt at udtrykke begreber i færre linjer kode , end det ville være muligt i sprog som C . For eksempel tillader dets hygiejniske makro system at tilføje domænespecifikke syntakselementer uden at ændre Guile. Guile implementerer Scheme -standard R5RS, de fleste af R6RS og R7RS, flere Scheme Requests for Implementation (SRFI) og mange egne udvidelser.

Kernetanken med Guile Scheme er, at "udvikleren implementerer kritiske algoritmer og datastrukturer i C eller C ++ og eksporterer funktionerne og typerne til brug for fortolket kode. Applikationen bliver et bibliotek af primitiver, der er orkestreret af tolken, og kombinerer effektiviteten af ​​kompileret kode med tolkningens fleksibilitet. " Således kan Guile Scheme (og andre sprog implementeret af Guile) udvides med nye datatyper og underrutiner implementeret via C API.

Standarddistributionen tilbyder moduler til bærbare Operating System Interface ( POSIX ) systemkald, planlægning , en fremmed funktion grænseflade , S-udtryk baseret XML behandling gennem SXML , SXPath, og SXSLT, HTTP og andre World Wide Web- API'er, afgrænsede fortsættelser , vifte programmering og anden funktionalitet. Guile -programmer kan bruge faciliteter fra SLIB , det bærbare Scheme -bibliotek.

Implementeringsdetaljer

Ved brug af fortsættelser med opkald / cc , et krav i ordningen standarden, Guile kopierer udførelsen stakken ind i bunke og ryg. Dens manual foreslår i stedet at bruge afgrænsede fortsættelser, fordi de har en mere effektiv implementering.

Fordi fremmed kode kan have fingerpeg til skemaobjekter, bruger Guile den konservative affaldssamler Boehm – Demers – Weiser (BDW) .

Historie

Guile -manualen indeholder detaljer om sprogets begyndelse og tidlige historie. En kort opsummering følger:

Efter succesen med Emacs i det gratis softwarefællesskab , som en meget udvidelig og tilpasselig applikation via dens udvidelse (og delvis implementering) sprog Emacs Lisp , begyndte samfundet at overveje, hvordan denne designstrategi kunne gælde for resten af ​​GNU -systemet. Tom Lord begyndte oprindeligt arbejdet med en integreret sprogkørselstid ved navn GNU Extension Language (GEL), som var baseret på Aubrey Jaffers implementering af SCM (som igen var baseret på George Carrette's SIOD ). Lord overbeviste Richard Stallman om at gøre GEL til det officielle udvidelsessprog i GNU -projektet, baseret på argumentet om, at Scheme var en renere Lisp -dialekt end Emacs Lisp, og at GEL kunne udvikle sig til at implementere andre sprog på samme driftstid, nemlig Emacs Lisp. Efter at Lord opdagede, at GEL havde en navnekonflikt med et andet programmeringssprog, efterspurgte han forslag til et nyt navn. Fra flere bidrag i flere Usenet -nyhedsgrupper valgte Lord kontroversielt Guile fra et forslag fra Lee Thomas.

Under udviklingen af ​​Guile (dengang GEL) og før offentliggørelsen blev udvidelsessproget Tcl ved at blive populær og blev skubbet som et universelt udvidelsessprog. Stallman så Tcl som undermagt som et udvidelsessprog og sendte en kritik til nyhedsgruppen comp.lang.tcl, der indledte en flamewar kendt som "Tcl War". Siden den offentlige bekendtgørelse af Guile -projektet faldt sammen med Tcl -debatten, er det blevet en almindelig misforståelse, at Guile begyndte som en reaktion på dette.

Efter den første udgivelse af Guile faldt udviklingen i mange år, men 2009–2010 oplevede store forbedringer, og Guile 2.0 blev frigivet i 2011 med en ny kompilatorinfrastruktur , en virtuel maskineimplementering , et skift til affaldssamleren Boehm – Demers – Weiser , mange forbedringer af Guile -ordningens sprog og andre større ændringer.

Et af målene med Guile er at tillade, at andre sprog bruges sammen med Scheme, således at Guile effektivt ville være et sprogneutralt runtime-miljø. Forskellige forsøg på dette er blevet gjort i tidligere versioner: en dialekt af Scheme væsentlige kun afviger i sin C-lignende syntaks, en oversættelse af Emacs Lisp , en Tcl konverter motiveret af tkWWW , og noget groft ligner sproget logo . Med version 2.0 overgik projektet med succes til en kompilator-tårntilgang , hvilket muliggjorde definitionen af ​​kompilatorer fra et sprog til et andet, typisk fra et højere niveau til en mellemliggende repræsentation på lavere niveau og til sidst virtuel maskine bytecode eller native maskinkode .

Den 16. marts 2017 blev Guile 2.2.0 frigivet med en ny optimerende compiler og højtydende register virtuel maskine. Ifølge udgivelsesmeddelelsen fra Andy Wingo viste programmer i den virkelige verden ofte en hastighed på 30% eller mere med Guile 2.2 sammenlignet med den tidligere 2.0-serie. Guile 2.2.0 sænkede også hukommelsesforbruget, fremskyndede "eval" -tolken, gav bedre understøttelse af multi-core programmering og fjernede enhver fast grænse for rekursive funktionsopkald. Det understøttede også oprettelsen af ​​samtidige faciliteter i brugerrum, der multiplekser millioner af samtidige lette "fibre" og leverede en komplet Emacs-kompatibel Elisp-implementering, der implementerede alle Elisp's funktioner og finesser på samme måde som Emacs.

Den 16. januar 2020 blev Guile 3.0.0 frigivet med just-in-time ( JIT ) native kodegenerering til meget større ydelse. Sammenlignet med 2,2 er mikrobenchmark -ydelsen i det hele taget dobbelt så god, mens nogle individuelle benchmarks er op til 32 gange så hurtige. Det bød også på understøttelse af sammenflettede definitioner og udtryk i leksikale sammenhænge, ​​indbygget støtte til strukturerede undtagelser, bedre understøttelse af R6RS- og R7RS -skemastandarder og mange optimeringer.

Emacs integration

Der har været flere tidligere ufærdige forsøg på at erstatte eller supplere Emacs Emacs Lisp (Elisp) udvidelsessprog med Guile, parallelt med bestræbelserne på at understøtte andre sprog i Guile.

Med version 2.0 af Guile er et nyt forsøg på at implementere Elisp på Guile -kompilator -tårnet og erstatte Emacs Elisp -implementering med libguile begyndt og gjort betydelige fremskridt gennem Google Summer of Code -projekter. En Guile-baseret Emacs kan tilbyde bedre udførelsesydelse for Emacs Lisp, lettere understøtte nye Emacs Lisp-sprogfunktioner, gøre Guile-biblioteker skrevet på andre programmeringssprog tilgængelige for Emacs Lisp-kode og tillade at skrive Emacs-udvidelser på andre programmeringssprog, der understøttes af Guile, alt imens den er fuldstændig bagudkompatibel med eksisterende Emacs Lisp -kodebaser.

Fra oktober 2014 var implementeringen nået til et stadie, hvor Guile Emacs er i stand til pålideligt at køre de fleste Emacs Lisp -kode. Resterende problemer eller mulige problemer involverer den forskellige interne repræsentation af Emacs Lisp -strenge fra Scheme -strenge, forskellen mellem hvordan Emacs Lisp og Scheme behandler de boolske falske og tomme listeobjekter, Emacs Lisp -makroer ikke integreres med Scheme, Emacs Lisp ikke er designet til samtidighed og overførsel af Guile til platforme understøttet af Emacs. Andre bekymringer, som Emacs -samfundet rejser, inkluderer de relative størrelser af Emacs og Guile -samfundene, og om det ville medføre splittelse i samfundet, hvis Emacs kunne udvides på andre programmeringssprog end Emacs Lisp.

GNU Lav integration

GNU make kan være bygget med understøttelse af GNU Guile som et integreret udvidelsessprog.

Referencer

Yderligere læsning

eksterne links