MLton

MLton (vyslovuje se " millton " [1] ) je multiplatformní plně programový optimalizační kompilátor pro programovací jazyk Standard ML (SML). Stejně jako většina ostatních implementací Standard ML je napsán v samotném Standard ML (s výjimkou běhového systému napsaného v C ) a distribuován jako open source pod licencí ve stylu BSD .

Charakteristika

Poskytuje velmi vysoký výkon standardních ML programů : na malých programech jen mírně zaostává za C / C++ v rychlosti [2] ; na větších je díky celoprogramové optimalizaci na základě globální analýzy řídicího toku programu schopen je překonat. Generuje samostatné spustitelné soubory kompaktní velikosti. Výkon v MLton je poskytován i při intenzivním použití abstrakčních mechanismů SML ( parametrický polymorfismus , funkce vyššího řádu , funktory ), což umožňuje použití jazyka jak pro rychlé prototypování , tak pro rozsáhlé programování bez nutnosti zásahu programátora. rovnováha mezi abstrakcí a efektivitou. Zvýšení rychlosti kódu ve srovnání s jinými implementacemi SML na různých testech se pohybuje od několikanásobku až po několik řádů [3] .

Je doprovázena velmi bohatou dokumentací včetně popisů triků s netriviálním použitím jazyka. Na stránkách projektu lze nalézt téměř kompletní seznam odkazů na existující vědeckou a vzdělávací literaturu o Standardu ML [4] . Docela striktně vyhovuje definici jazyka a specifikaci základní knihovny . Existují čtyři odchylky od Definice, které autoři neplánují opravit, ale spíše je klasifikují jako opravu vad v samotné Definici.

Má tenký a rychlý FFI , který poskytuje plnou obousměrnou interakci s jazykem C (až do vzájemné rekurze ); stejně jako generátor vazeb NLFFI ( No-Longer-Foreign Function Interface ) který umožňuje vkládat hlavičkové soubory C přímo do projektu SML a používat přímá volání funkcí C v programech na SML [5] .

Podporuje mnoho nativních platforem ( x86 , IA-64 , AMD64 , SPARC , ARM , PowerPC / PowerPC64, DEC Alpha , HPPA , S390 ) a různé operační systémy, včetně různých systémů podobných Unixu (Debian, Fedora, *BSD) . Pod Windows vyžaduje Cygwin nebo MinGW (od roku 2014), nativní port je součástí plánů vývojářů. Má další back-endy v C , C-- , LLVM ; dříve zahrnoval back-end bytecode , ale jeho podpora byla ukončena, protože nezískal popularitu.

Implementace

MLton poskytuje efektivitu a kompaktnost programů díky:

Přístup k optimalizaci aplikovaný v MLton se nápadně liší od tradičního [2] . Konvenční jazykové kompilátory s podporou pro entity vyššího řádu provádějí optimalizace přímo na AST získaném po analýze gramatiky a odvození typu , načež provádějí uzavírací konverzi nízkoúrovňové optimalizace. V MLton vypadá pracovní postup zjednodušeně takto. Nejprve se provede defunktorizace a monomorfizace , v důsledku čehož je kód prezentován v intermediálním jazyce s výrazně zjednodušeným typovým systémem oproti SML , ale s podporou funkcí vyššího řádu . Následuje defunkcionalizace a kódování v mezijazyku prvního řádu sestávajícího pouze z definic nejvyšší úrovně ( SSA ). A teprve poté se na výsledný plochý kód použijí tradičnější optimalizace (nahrazení koncové rekurze plochou iterací, konstantní šíření , odstranění mrtvého kódu , výběr reprezentace atd.), stejně jako reprezentace plochého uzavření . Takový řetězec přináší výhru jak uživatelům kompilátoru, tak jeho vývojářům:

Celkem MLton používá osm přechodných jazyků [8] , včetně těch, které narušují zabezpečení kvůli výkonu (na rozdíl například od kompilátoru TILT [9] , který neohrožuje zabezpečení až do samotného strojového kódu) a několik desítek průchodů.

Rozšíření

MLton nabízí řadu nestandardních knihoven:

a mnohem více [11] .

Existují experimentální rozšíření samotného MLton:

Historie, filozofie, vývojáři

V dubnu 1997 Stephen Weeks vyvinul  defunktorizer pro SML/NJ , který okamžitě ukázal zvýšení rychlosti 2 až 6 krát . V srpnu téhož roku byl vyvinut optimalizační kompilátor, který se v té době jmenoval smlc. V říjnu byl implementován monomorfizátor. Během dalšího roku a půl se smlcstal zcela nezávislým kompilátorem a byl přejmenován na MLton, jehož první vydání proběhlo v březnu 1999 . V roce 2005 MLton vykazoval vynikající výkon programu [3] .

Vývoj byl od počátku veden s důrazem na výkon prostřednictvím globální optimalizace programu. [13]

Vývojáři MLton diktují čtení názvu svého kompilátoru jako „ milton “, analogicky se slovem „ mlýn “ ( anglicky  mlýn ) [1] pravděpodobně v žertu znamená „ mlecí ML programy “, což odráží použití agresivní transformace a programy rafinačních technik

Projekt MLton řídí čtyři lidé:

Významně přispěla i řada dalších lidí [14] .

V roce 2013 byl projekt MLton součástí programu Google Summer of Code [15] [16] .

Vývojáři MLton jsou aktivními členy nástupnické rady ML . V roce 2014 byly dva z nich oceněny cenou „NSF CISE Research Infrastructure (CRI)“ [17] „ za umístění MLton pro jazykový výzkum nové generace “.

Kritika a srovnání s alternativami

MLton zajišťuje výkon programů na úrovni C / C++ bez ohledu na použitý styl programování .

Nevýhody vyplývají přímo z aplikace globální analýzy a více kroků transformace:

Srovnání s OCaml

OCaml i MLton produkují vysokorychlostní programy [19] , které často soupeří s programy C a C++, byly portovány na mnoho platforem (ačkoli seznam není totožný) a přicházejí s rozsáhlou dokumentací. Proto je otázka jejich rozdílů relevantní [20] :

Za zmínku stojí také některé rozdíly mezi kompilátory, které úzce souvisejí s rozdíly mezi samotnými jazyky:

Viz také

Poznámky

  1. 1 2 „MLton“ Vyslovte . Získáno 13. listopadu 2014. Archivováno z originálu 13. listopadu 2014.
  2. 1 2 3 4 5 týdnů – Kompilace celého programu v MLton, 2006 .
  3. Výkon 12 MLton . Získáno 13. listopadu 2014. Archivováno z originálu 13. listopadu 2014.
  4. Reference . Získáno 10. prosince 2014. Archivováno z originálu 14. prosince 2014.
  5. No-Longer-Foreign, 2001 .
  6. Inline . Získáno 21. listopadu 2014. Archivováno z originálu 29. listopadu 2014.
  7. Potvrdit . Získáno 13. listopadu 2014. Archivováno z originálu 13. listopadu 2014.
  8. Středně pokročilé jazyky MLton . Získáno 13. listopadu 2014. Archivováno z originálu 13. listopadu 2014.
  9. Kompilátor TILT (TIL-Two) Archivováno z originálu 9. května 2008.
  10. MLRISC . Získáno 18. listopadu 2014. Archivováno z originálu dne 23. září 2015.
  11. Rozšíření MLton . Datum přístupu: 13. listopadu 2014. Archivováno z originálu 2. ledna 2015.
  12. Multi-MLton . Získáno 13. listopadu 2014. Archivováno z originálu 13. listopadu 2014.
  13. Historie MLton . Získáno 13. listopadu 2014. Archivováno z originálu 13. listopadu 2014.
  14. Kredity MLton . Získáno 13. listopadu 2014. Archivováno z originálu 13. listopadu 2014.
  15. Google Summer of Code 2013 (archiv GSoC/GCI) . Získáno 14. září 2016. Archivováno z originálu 23. června 2016.
  16. MLton v Google Summer of Code 2013 (na stránce MLton) . Získáno 14. září 2016. Archivováno z originálu 23. září 2016.
  17. Stránka kompilátoru MLton .
  18. Nevýhody MLton . Získáno 13. listopadu 2014. Archivováno z originálu 13. listopadu 2014.
  19. The Breakfast Post. SML a OCaml: Proč byl tedy OCaml rychlejší?  (anglicky) . Získáno 16. září 2016. Archivováno z originálu 21. září 2016.
  20. Srovnání MLton a OCaml . Získáno 13. listopadu 2014. Archivováno z originálu 13. listopadu 2014.
  21. The Caml Hump: ocamldefun (sestupný odkaz) . Statistický výpočet parametrů aplikací modulů. Julien Signoles. JFLA 2003. (2010). Datum přístupu: 10. prosince 2014. Archivováno z originálu 4. listopadu 2015.   — Defunktorizátor pro OCaml
  22. Chailloux, Manoury, Pagano, „Developing with OCaml“, 2007 .

Odkazy