Perchè la maggior parte dei linguaggi di programmazione funzionali interpretano anche le lingue? [chiuso]

5

Funzionali / non funzionali e interpretati / compilati sono due diverse categorizzazioni, tuttavia sembra che ci siano molte sovrapposizioni nei linguaggi di programmazione che rientrano in quelle categorie. È una coincidenza?

    
posta melonccoli 15.06.2014 - 07:49
fonte

1 risposta

18

Non esiste una "lingua interpretata". Una lingua è un insieme di regole matematiche astratte. Una lingua non è interpretata o compilata, è solo è . Interpretazione e compilazione sono tratti di, beh, l'interprete o il compilatore (duh!), Non la lingua.

Una lingua è un'entità astratta, un interprete o un compilatore è un'implementazione concreta di quell'astrazione. I due vivono su livelli completamente diversi di astrazione. Il termine "linguaggio interpretato" non è solo sbagliato, non ha nemmeno senso. Se l'inglese fosse una lingua tipizzata, "linguaggio interpretato" sarebbe un errore di tipo!

Non puoi chiedere se una lingua è una lingua interpretata, la risposta non è "sì" o "no", perché la domanda stessa non è sensata. È come chiedere se l'arancione sia un numero primo.

Ogni lingua può essere implementata con un interprete e ogni lingua può essere implementata con un compilatore. È possibile derivare automaticamente un compilatore da un interprete e un interprete da un compilatore.

La stragrande maggioranza delle lingue ha implementazioni sia compilate che interpretate. La stragrande maggioranza delle moderne implementazioni linguistiche ad alte prestazioni sono implementazioni in modalità mista che combinano interpretazione e compilazione.

Ora, diamo un'occhiata ad alcuni linguaggi funzionali popolari e ad alcune delle loro implementazioni popolari:

  • Haskell
    • GHC, il glorioso compilatore Haskell di Glasgow: ovviamente un compilatore
    • UHC, il compilatore Utrecht Haskell: ancora una volta un compilatore
    • JHC, anche un compilatore
    • HUGS (non più gestito): un interprete
  • ML standard
    • SML / NJ (Standard ML del New Jersey): un compilatore
    • MLton: un compilatore
    • Kit ML: un compilatore
    • Moscow ML: un compilatore
    • TILT: un compilatore
    • SML.NET: un compilatore
    • Alice: un interprete
  • OCaml : esiste solo un'implementazione di OCaml, un compilatore
  • F♯ : esiste solo un'implementazione di F♯ (Microsoft Visual F♯), un compilatore
  • Scala : esiste solo un'implementazione di Scala, un compilatore
  • Clojure
    • Clojure: un compilatore per la piattaforma Java
    • ClojureCLR: un compilatore per la piattaforma CLI
    • ClojureScript: un compilatore per la piattaforma ECMAScript
  • Schema
    • Racket: compila Schema in bytecode, quindi interpreta o compila quel codice byte
    • Stalin: un compilatore
    • Gambit: un compilatore
    • POLLO: un compilatore
    • Ikarus: un compilatore
    • Larceny: un compilatore
    • IronScheme: un compilatore
    • Bigloo: un compilatore
    • Kawa: un interprete
    • Gauche: un interprete
risposta data 15.06.2014 - 13:26
fonte

Leggi altre domande sui tag