Domanda

Voglio fare un linguaggio compilato. Attualmente sto valutando backend. Finora mi sto guardando C a causa della sua velocità di esecuzione, la compilazione, e un piccolo, facile da usare compilatore chiamata TCC.

Dopo aver letto le discussioni qui di usarlo come un linguaggio intermedio, sto cercando di pensare a come renderlo compatibile con la raccolta dei rifiuti e la gestione delle eccezioni. Finora, penso di poter risolvere entrambi, ma con molta testa.

Ecco alcuni dei miei pensieri sugli altri backend possibili:

  1. Assembly:. Portabile e un dolore totale di programmare in
  2. NET: Si sente molto lento. 5 secondi per avviare e 5 secondi per valutare 1 + 2 su IronPython e Boo. Impossibile correre senza grande biblioteca.
  3. JVM: Si sente un po 'lento. Nessun accesso alle librerie binarie. Impossibile correre senza grande biblioteca.
  4. LLVM: Nessun supporto di Windows. Ho sentito che la dimensione eseguibile compilato è di 16 MB +
  5. C--: sembra poco sviluppato
  6. .
  7. C ++: forse. Non riesci a trovare un bel piccolo uno libero posso riunire con.

Qualcuno di voi può cambiare idea o di avere altro da aggiungere a questa lista?

Modifica

Ho avuto modo di sperimentare con LLVM di recente. Ho scoperto che essi hanno binari precompilati e che è possibile compilare al montaggio nativo.

http: //www.antlr. org / wiki / display / CS652 / Generazione + macchina + eseguibile + binari + con + LLVM

Ecco i passaggi:

  1. Esegui LLVM-come su LLVM Assemblea, che produce un file bytecode LLVM.
  2. Esegui llc sul file bytecode LLVM per produrre un file di assiemi.
  3. Esegui un assemblatore sul file di assieme per produrre un file oggetto. (Esegue llvm-ld che sembra dipendere da un compilatore c installata esternamente)
  4. Compila per eseguibile con gcc ecc.
È stato utile?

Soluzione

Avete pensato di scrivere un frontend per GCC ? Dico questo per completezza solo - per quanto ne so l'interfaccia di backend è piuttosto complicato e la base di codice è enorme e difficile da comprendere

.

D'altra parte, il GCC è un prodotto maturo con molti programmatori esperti lavorare su di esso. Per lo meno, probabilmente fornisce la base più solida di tutte le alternative.

Personalmente, preferirei LLVM (architettura emozionante) o IL di .NET: molto, molto facile da usare, ha un grande strumento di supporto ( Reflector , Cecil , Reflexil e, ultimo ma non meno importante, l'API .NET riflessione) e due implementazioni molto efficiente (vale a dire l'attuazione canonica di Microsoft e Mono ).

Ma non posso pretendere competenza su una fra le architetture in modo da prendere questa risposta con un grano di sale.

Altri suggerimenti

In questo caso LLVM è probabilmente una scelta migliore.

LLVM ha il supporto di Windows, ci vuole solo un po 'di tempo per compilare

C ++ non vi darà molto, usare C invece. Ma se si vuole lingua da utilizzare nel Web, l'uso di .NET o Java, che essi lento a caricare, ma quando lo sono, il più velocemente C.

SmartEiffel usiamo C come back-end.

TCC è una buona opzione per sviluppo- anche se non per rilascio finale (prodotti oggetto è equivalente a gcc -O0)

Un altro da aggiungere alla lista: Slava recentemente implementato Smalltalk su un Factor backend . Non ho provato io stesso, ma ho la sensazione che offrirebbe più delle caratteristiche desiderate da quelli di più alto livello con più come la dimensione / prestazioni da quelli di livello inferiore.

TCC è la scelta migliore. È portatile ed ha una libreria in modo che possa essere facilmente utilizzato come back-end che si chiama libtcc. Gli eseguibili sono più piccoli di gcc ed è ANSI C.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top