2010-10-08 10 views
55

Dopo aver appreso un po 'di come funziona LLVM, sono davvero entusiasta di come può essere generato un codice portatile di basso livello e di come questa "cosa" modulare sia costruita.Come si confronta C - con LLVM?

Ma ho scoperto oggi l'esistenza di C-- che sembra condividere alcuni concetti con LLVM.

Quindi sto cercando alcune informazioni che mi aiutano a capire le principali differenze tra questi due progetti ... e perché entrambi esistono.

Per me LLVM assomiglia un po 'all'ultimo coltellino svizzero per l'infrastruttura del compilatore, e C-- sembra molto meno avanzato.

+5

a quanto pare, si puo' avere '-' in un tag. cminusminus è. – aaronasterling

+0

grazie per la correzione :-) –

+0

Non so sulla qualità dell'implementazione, ma LLVM sembra avere molta più azione sulle sue mailing list. –

risposta

52

Si differenziano per l'espressività del sistema di tipo macchina di basso livello.

La macchina LLVM è piuttosto espressiva. D'altro canto, la macchina C-- attribuisce molta responsabilità al front-end della lingua. Citando dal C-- FAQ: "semplicemente, C-- ha alcun tipo di alto livello --- neppure non distingue variabili in virgola mobile da variabili intere Questo modello fornisce l'estremità controllo totale davanti rappresentazione e tipo di sistema"

Anche visivamente sembrano molto diversi. C-- assomiglia molto a C, LLVM assomiglia molto ad assemblatore.

Pragmaticamente, LLVM ha molto più slancio in questo momento. Ha un compilatore JIT, Apple lo sta usando per 3D pipeline things e le persone lo stanno usando per connect to GCC e tutti i tipi di cose weird e wonderful. Qualcuno lo ha chiamato "almost absurdly easy to work with".

D'altra parte C-- è molto più piccolo e probabilmente più facile da comprendere completamente. (Immagino una persona normale con una certa dedizione può comprendere appieno tutti aspetti di esso.)

+1

Quindi, se ho capito bene la differenza principale è il livello di astrazione della rappresentazione intermedia usata dal compilatore di tesi .. grazie! –

+6

@Alois Cochard, è così che mi è sembrato. Non sono un esperto di compilatori, ne gioco solo uno su Stack Overflow. :-) –

+0

I tuoi collegamenti a cminusminus.org sembrano portare a qualcosa di completamente non correlato ora. – Ruslan