Esiste un linguaggio che trascrive in C con una sintassi migliore? [chiuso]

15

CoffeeScript è un linguaggio con una sintassi molto simile a Ruby che viene trascritta in JavaScript. Esiste la stessa cosa con C? Quindi scrivere più leggibile e veloce come i programmi C originali sarebbe possibile. Se non esiste, pensi che sarebbe una buona idea?

    
posta Marin 10.04.2012 - 04:12
fonte

6 risposte

20

CoffeeScript compila JavaScript per un motivo molto semplice, JavaScript è di fatto il linguaggio lato client e sarebbe irragionevole aspettarsi che i produttori di browser supportino nativamente CoffeeScript, quando tutto ciò che offre è una sintassi alternativa.

In un modo molto simile, il punto principale del linguaggio di alto livello per i traduttori C è la portabilità immediata, in quanto esiste un compilatore C per quasi tutte le piattaforme e un'abbondanza di librerie C. Vala , ad esempio, era progettato per :

  1. essere un compilatore per GObject ,
  2. crea eseguibili nativi (tramite il compilatore C della macchina),
  3. automatizza il conteggio dei riferimenti e
  4. è ancora accessibile ai programmatori di GNOME C

GNOME è un progetto tradizionalmente orientato al C e GObject è scritto specificamente in C, probabilmente non troverà molto amore tra gli sviluppatori di GNOME se compilato su un codice macchina, indipendentemente dalla sua natura più amichevole (e dalla sintassi). Non tutti sembravano gradire la sintassi, al punto che un'altra lingua, Genie , era stata creata per migliorarla.

Per un esempio di C ++, Facebook ha sviluppato HipHop , un traduttore da PHP a C ++. Stavano cercando di risolvere un problema molto specifico, l'utilizzo della CPU, senza dover sostituire tutto il codice PHP e riqualificare i loro ingegneri (o, peggio, sostituirli). Questo è un esempio molto più specifico, dato che i problemi di scalabilità di Facebook sono, ovviamente, unici e di nuovo l'accesso al codice C ++ intermedio può essere utile, poiché le estensioni PHP sono scritte in C e C ++.

Quindi un traduttore da un linguaggio di alto livello ad un altro è una buona idea soprattutto quando è richiesto l'accesso al codice intermedio. Per CoffeeScript, il codice JavaScript è necessario a causa dell'ampia adozione del browser e per Vala, Genie e HipHop a causa della base di codice esistente. Ovviamente avere accesso al codice intermedio significa che è possibile ottimizzarlo ulteriormente se necessario.

Ma parlando generalmente , non sarebbe una buona idea costruire una lingua che si traduca in C o in qualsiasi altra lingua, se non si ha alcun uso del codice risultante. Ci sono così tante lingue là fuori, se non riesci a far fronte a C, scegli un altro. Per coincidenza, il primo compilatore C ++ scritto da Bjarne Stroustrup, CFront, era un traduttore C con Classi-C, ma questo era principalmente dovuto al fatto che, come nuovo linguaggio, era impossibile bootstrap C con Classes.

    
risposta data 10.04.2012 - 05:01
fonte
8

Tratterò alcuni punti Yannis Rizos non ha nella sua ottima risposta.

Sì, esistono molte lingue. C è un obiettivo comune per i back-end del compilatore poiché è incredibilmente portatile e strongmente ottimizzato, sebbene con LLVM non ci sia molto da fare.

Alcune implementazioni che conosco sono:

  • C ++ (Almeno nei primi giorni)
  • GHC Haskell (Anche se il generatore di codice principale è C -)
  • Schema Gambit / Pollo / Bigloo
  • ECL (Common Lisp)
  • Perl
  • Vala & Genie

as fast as original C programs

No, solo perché usa C come lingua intermedia non significa che raggiungerai la sua velocità. Il motivo per cui C è veloce è dovuto al metodo di scrittura del codice che è ovviamente diverso per le altre lingue. È solo un assemblaggio portatile, niente di speciale.

    
risposta data 10.04.2012 - 05:50
fonte
6

Rock è un ooc compilatore che genera sorgente C99. ooc-lang è un linguaggio di programmazione con oggetti, funzioni di prima classe e unicorni rosa. Il ooc è un linguaggio dinamico e cammina così lontano. Genera codici c più grassi e lenti. Hai bisogno di ulteriori modifiche per soddisfare le tue esigenze. Ma è un buon punto di partenza.

    
risposta data 08.03.2013 - 09:13
fonte
4

Vala e Genie sono entrambi linguaggi che si compilano in C. haxe compila in C ++, ma non sono sicuro che sia quello che vuoi.

    
risposta data 10.04.2012 - 04:19
fonte
4

OCaml può compilare in bytecode, in codice nativo, può essere interpretato direttamente, oppure può essere compilato in C .

    
risposta data 08.03.2013 - 12:18
fonte
3
  • Il compilatore C ++ originale di Bjarne Stroustrop, "cfront", compilava C ++ in C, che a sua volta avrebbe facoltativamente eseguito il compilatore C per produrre codice oggetto. Il C ++ è "non teorico" come puoi ottenere: -)
  • I compilatori-compilatori Unix "yacc" e GNU "Bison" traducono le loro lingue di input in C. Molti, molti sistemi sofisticati sono stati scritti con loro.
risposta data 08.03.2013 - 12:54
fonte

Leggi altre domande sui tag