Zucchero sintattico per vecchie lingue

3

In primo luogo ho appreso dell'esistenza di linguaggi sintattici dello zucchero, come CoffeeScript e SASS mentre lavoravo in Rails. Questo mi ha fatto pensare ... perché non abbiamo conosciuto lo zucchero sintattico (se non del tutto) per linguaggi come C, C ++ e Java?

Immagina un linguaggio simile a Python o Ruby che può essere preelaborato in C, e quindi compilato per generare codice veramente veloce che sia anche bello.

Ad esempio, invece di:

#include <stdio.h>

int divide(int a, int b)
{
    if(b != 0)
        return a / b;

    return 0;
}

int main()
{
    int a, b;

    scanf("%d", &a);
    scanf("%d", &b);

    printf("%d", divide(a, b));

    return 0;
}

Perché non avere:

include stdio.h

fn divide(int a, int b):
  a/b if b != 0
  ret 0

fn main:
  int a, b

  scanf '%d', a
  scanf '%d', b

  print '%d', divide(a,b)
  ret 0

E avere questo pre-elaborazione fino allo stesso codice C sopra?

Perché attenersi a implementazioni linguistiche veloci o facili da leggere quando potresti averne entrambe?

    
posta peteykun 16.01.2014 - 15:28
fonte

3 risposte

8

Ci sono due linguaggi dello zucchero sintattico ben noti per C:

  • C ++
  • Obiettivo C

E due meno conosciuti, ma più sinceri sintattici di zucchero dato che sono impostati sempre sulla compilazione di C mentre quello sopra è passato alla generazione diretta dell'assemblaggio:

Sia C ++ che Objective C iniziarono come traduttori in C. Passarono alla generazione diretta degli assembly perché la generazione del codice si stava complicando per alcune funzionalità. Non sono mai stati progettati per generare interfacce facilmente richiamabili da C, ma entrambe incorporano la C completa

Gli altri 2, GOB e Vala d'altra parte sono progettati per generare interfacce facilmente richiamabili da C. GOB fornisce solo la generazione di alcune piastre per la programmazione orientata agli oggetti mentre i corpi delle funzioni sono scritti in plain C, Vala è un linguaggio completamente diverso che mappa a C.

Tutte quelle lingue forniscono funzionalità, non solo semplicemente sintassi diversa. Perché francamente, fornire solo una sintassi diversa non ha assolutamente alcun vantaggio. È non la sintassi che regola quanto sia complicato scrivere qualcosa in una lingua. È la complessità strutturale delle espressioni e la quantità di cose di cui il programmatore deve tenere traccia. Salvare alcune sequenze di tasti non aiuta. I programmatori possono generalmente digitare un po 'più velocemente di quanto pensino. Quindi una lingua diversa può solo aiutare:

  • Salvataggio di un lotto di sequenze di tasti. Questo è il caso di GObject Builder e in parte Vala. Questo perché il boilerplate necessario per creare un GObject è piuttosto grande.
  • Fornire funzionalità reali, come il conteggio dei riferimenti automatici in Vala.

Anche allora, dei quattro linguaggi sopra menzionati, solo il C ++ è diventato universalmente popolare e solo perché ha aggiunto funzionalità davvero potenti. L'obiettivo C è utilizzato solo su una singola piattaforma e GOB e Vala sono principalmente lingue di nicchia per il progetto Gnome.

Perché è molto lavoro imparare una nuova lingua. Non è abbastanza se un programmatore conosce una lingua. La maggior parte dei progetti sono lavori di grandi squadre in questi giorni e tutti i membri del team devono conoscere la lingua per usarla su un progetto. E poiché le persone lasciano il lavoro, i leader del progetto esitano a usare un nuovo linguaggio non solo fino a quando non hanno abbastanza programmatori esperti in esso, ma anche fino a quando non sono sicuri di poterne assumere di più se necessario. Quindi le nuove lingue si aggiornano solo se dispongono di nuove funzionalità davvero importanti. (Java pur essendo un linguaggio piuttosto debole di per sé ha un enorme vantaggio nella libreria standard completa. Per produttività la libreria standard è ancora più importante delle caratteristiche del linguaggio, per non parlare della sintassi).

    
risposta data 16.01.2014 - 16:35
fonte
2

Due punti:

1 / L'obiettivo finale è raro avere C, è avere un linguaggio macchina. Nei tuoi esempi, l'obiettivo finale è avere JavaScript o CSS perché questi sono in qualche modo il linguaggio macchina dei browser.

2 / Compiling to C era (è ancora) una scelta popolare per la prima implementazione dei linguaggi compilati. Questo passaggio viene solitamente mascherato in quanto è solo un artefatto dell'implementazione e non utile. (Allo stesso modo, i compilatori che generano assembly al posto dei file oggetto di solito mascherano il fatto che generino un assemblatore per trasformare l'assembly in codice oggetto). La versione successiva può essere compilata direttamente nel linguaggio dell'assemblaggio o della macchina. (Al giorno d'oggi, anche il targeting di macchine virtuali esistenti come Java e .NET sono popolari e si potrebbe obiettare che la disponibilità di LLVM rende il targeting C spesso meno pertinente.)

    
risposta data 16.01.2014 - 17:18
fonte
1

Intendi cose come Vala? link

Si noti inoltre che il C ++ originale (C con Classi) è stato scritto esclusivamente con il Pre-processore C.

Se vuoi scrivere qualcosa in modo simile con Python, buttati fuori.

    
risposta data 16.01.2014 - 16:22
fonte

Leggi altre domande sui tag