MLton

MLton (udtales " millton " [1] ) er en cross -platform fuld-program optimerende compiler til standard ML (SML) programmeringssproget. Som de fleste andre implementeringer af Standard ML er den skrevet i selve Standard ML (med undtagelse af runtime- systemet skrevet i C ) og distribueret open source under en BSD-lignende licens .

Karakteristika

Giver meget høj ydeevne af standard ML- programmer : på små programmer halter den kun lidt efter C / C++ i hastighed [2] ; på større, på grund af fuld programoptimering baseret på en global analyse af programmets kontrolflow , er det i stand til at overgå dem. Genererer selvstændige eksekverbare filer af kompakt størrelse. Ydeevne i MLton leveres selv med stor brug af SML - abstraktionsmekanismer ( parametrisk polymorfi , funktioner af højere orden , funktorer ), som gør det muligt at bruge sproget både til hurtig prototyping og programmering i stor skala uden at programmøren skal slå til en balance mellem abstraktion og effektivitet. Stigningen i kodehastighed sammenlignet med andre SML-implementeringer på forskellige tests varierer fra flere gange til flere størrelsesordener [3] .

Den er ledsaget af meget rig dokumentation, herunder beskrivelser af tricks med ikke-triviel brug af sproget. På projektets hjemmeside kan du finde en næsten komplet liste over links til eksisterende videnskabelig og pædagogisk litteratur om Standard ML [4] . Overholder temmelig strengt sprogdefinitionen og Core Library- specifikationen . Der er fire afvigelser fra definitionen, som forfatterne ikke planlægger at rette, men derimod klassificerer som korrektion af fejl i selve definitionen.

Har en tynd og hurtig FFI , der giver fuld tovejsinteraktion med C-sproget (op til gensidig rekursion ); samt NLFFI ( No-Longer-Foreign Function Interface ) bindingsgeneratoren som giver dig mulighed for at indlejre C-header-filer direkte i et SML-projekt og bruge direkte C- funktionskald i programmer på SML [5] .

Understøtter mange native platforme ( x86 , IA-64 , AMD64 , SPARC , ARM , PowerPC /PowerPC64, DEC Alpha , HPPA , S390 ) og forskellige operativsystemer, herunder forskellige Unix-lignende systemer (Debian, Fedora, *BSD). Under Windows kræver Cygwin eller MinGW (fra 2014), er en indbygget port inkluderet i udviklernes planer. Har yderligere back-ends i C , C-- , LLVM ; tidligere inkluderet en back-end til bytecode , men dens support blev afbrudt, da den ikke vandt popularitet.

Implementering

MLton giver effektivitet og kompakthed af programmer på grund af:

Den tilgang til optimering, der anvendes i MLton, er slående forskellig fra den traditionelle [2] . Konventionelle sprogkompilere med understøttelse af højere ordens entiteter udfører optimeringer direkte på AST'en opnået efter grammatikparsing og typeinferens , hvorefter de udfører lukningskonvertering optimeringer på lavt niveau. I MLton ser arbejdsgangen sådan ud på en forenklet måde. Først udføres defunctorization og monomorphization , som et resultat af hvilket koden præsenteres i et mellemsprog med et væsentligt forenklet typesystem sammenlignet med SML , men med understøttelse af højere-ordens funktioner . Dette efterfølges af defunktionalisering og kode i et førsteordens mellemsprog, der kun består af definitioner på øverste niveau ( SSA ). Og først derefter, på den resulterende flade kode , anvendes mere traditionelle optimeringer (erstatning af halerekursion med flad iteration, konstant udbredelse , fjernelse af død kode , valg af repræsentation osv.), samt flad lukningsrepræsentation . En sådan kæde giver en gevinst for både brugere af compileren og dens udviklere:

I alt bruger MLton otte mellemsprog [8] , inklusive dem, der krænker sikkerheden af ​​hensyn til ydeevnen (i modsætning til f.eks. TILT-kompileren [9] , som ikke kompromitterer sikkerheden før selve maskinkoden), og flere dusin gennemløb.

Udvidelser

MLton tilbyder en række ikke-standardbiblioteker:

og meget mere [11] .

Der er eksperimentelle udvidelser til selve MLton:

Historie, filosofi, udviklere

I april 1997 udviklede Stephen Weeks en  defunktorizer til SML/NJ , som straks viste en hastighedsforøgelse på 2 til 6 gange . I august samme år blev der udviklet en optimeringskompiler, som på det tidspunkt hed . I oktober blev en monomorphizer implementeret. I løbet af det næste halvandet år blev det en fuldstændig uafhængig compiler og blev omdøbt til MLton, hvis første udgivelse fandt sted i marts 1999 . I 2005 viste MLton fremragende programydelse [3] . smlcsmlc

Helt fra begyndelsen blev der udviklet med vægt på ydeevne gennem global programoptimering. [13]

Udviklerne af MLton dikterer læsningen af ​​navnet på deres compiler som " millton ", analogt med ordet " mill " ( engelsk  mill ) [1] hvilket sandsynligvis i spøg betyder " maling ML-programmer ", hvilket afspejler brugen af ​​aggressiv transformation og raffineringsteknikker programmer.

MLton-projektet drives af fire personer:

Talrige andre mennesker ydede også betydelige bidrag [14] .

I 2013 var MLton-projektet en del af Google Summer of Code-programmet [15] [16] .

MLton-udviklerne er aktive medlemmer af det efterfølgende ML -råd . I 2014 blev to af dem tildelt prisen "NSF CISE Research Infrastructure (CRI)" [17] " for positionering af MLton til næste generations sprogforskning ".

Kritik og sammenligning med alternativer

MLton sikrer ydelsen af ​​programmer på C / C++- niveau , uanset hvilken programmeringsstil der bruges .

Ulemper stammer direkte fra anvendelsen af ​​global analyse og flere transformationstrin:

Sammenligning med OKaml

Både OCaml og MLton producerer højhastighedsprogrammer [19] , der ofte konkurrerer med C- og C++-programmer, er blevet porteret til mange platforme (selvom listen ikke er identisk) og kommer med omfattende dokumentation. Dette gør spørgsmålet om deres forskelle relevant [20] :

Også bemærkelsesværdigt her er nogle forskelle mellem compilere, tæt forbundet med forskelle mellem sprogene selv:

Se også

Noter

  1. 1 2 "MLton" Udtal . Hentet 13. november 2014. Arkiveret fra originalen 13. november 2014.
  2. 1 2 3 4 5 uger - Compilation af hele programmet i MLton, 2006 .
  3. 12 MLton ydeevne . Hentet 13. november 2014. Arkiveret fra originalen 13. november 2014.
  4. Referencer . Hentet 10. december 2014. Arkiveret fra originalen 14. december 2014.
  5. No-Langer-Foreign, 2001 .
  6. Inline . Hentet 21. november 2014. Arkiveret fra originalen 29. november 2014.
  7. Bekræft . Hentet 13. november 2014. Arkiveret fra originalen 13. november 2014.
  8. MLtons mellemsprog . Hentet 13. november 2014. Arkiveret fra originalen 13. november 2014.
  9. TILT (TIL-Two) compiler Arkiveret fra originalen den 9. maj 2008.
  10. MLRISC . Hentet 18. november 2014. Arkiveret fra originalen 23. september 2015.
  11. MLtons udvidelser . Dato for adgang: 13. november 2014. Arkiveret fra originalen 2. januar 2015.
  12. Multi-MLton . Hentet 13. november 2014. Arkiveret fra originalen 13. november 2014.
  13. MLton historie . Hentet 13. november 2014. Arkiveret fra originalen 13. november 2014.
  14. MLton Credits . Hentet 13. november 2014. Arkiveret fra originalen 13. november 2014.
  15. Google Summer of Code 2013 (GSoC/GCI Archive) . Hentet 14. september 2016. Arkiveret fra originalen 23. juni 2016.
  16. MLton i Google Summer of Code 2013 (på MLton-siden) . Hentet 14. september 2016. Arkiveret fra originalen 23. september 2016.
  17. MLton compiler side .
  18. Ulemper ved MLton . Hentet 13. november 2014. Arkiveret fra originalen 13. november 2014.
  19. The Breakfast Post. SML og OCaml: Så hvorfor var OCaml hurtigere?  (engelsk) . Hentet 16. september 2016. Arkiveret fra originalen 21. september 2016.
  20. Sammenligning af MLton og OCaml . Hentet 13. november 2014. Arkiveret fra originalen 13. november 2014.
  21. The Caml Hump: ocamldefun (downlink) . Beregn Statique des Applications de Modules Parametres. Julien Signoles. JFLA 2003. (2010). Dato for adgang: 10. december 2014. Arkiveret fra originalen 4. november 2015.   — Defunctorizer for OCaml
  22. Chailloux, Manoury, Pagano, "Udvikling med OCaml", 2007 .

Links