Esiste questo tipo di linguaggio di programmazione?

4

Sto pensando di creare il mio linguaggio di programmazione per animali domestici e mi sono chiesto se un linguaggio simile esiste già.

L'idea di base è che il linguaggio stesso venga digitato dinamicamente con forti capacità di metaprogrammazione (pensa Ruby). Ma invece di eseguirlo direttamente, sarebbe interpretato / espanso in un altro linguaggio, che sarebbe tipizzato staticamente, con una struttura statica dei dati e un dispatch dinamico minimo (si pensi a C). Questo sarebbe quindi compilato per codice macchina. L'espansione potrebbe verificarsi prima dell'esecuzione del programma o durante la sua distribuzione e tutte le librerie necessarie ne faranno parte, invece di ogni libreria che verrà espansa separatamente.

Prima di iniziare a lavorarci, vorrei sapere se qualcosa del genere esiste già. Quindi posso ispirarmi o lasciar perdere, perché sarebbe un lavoro inutile.

    
posta Euphoric 15.07.2014 - 07:29
fonte

5 risposte

5

Potresti voler dare un'occhiata a Julia .

È un linguaggio moderno, tipizzato dinamicamente con meta-met di ispirazione Lisp. Inoltre compila JIT usando LLVM. La libreria standard è scritta anche in Julia ed è compilata e memorizzata nella cache al primo utilizzo. Una forma di compilazione AOT del tempo di installazione. Poiché LLVM IR è tipizzato staticamente, penso che questo abbia la maggior parte delle caratteristiche che stavi cercando anche se, come con molti linguaggi dinamici, l'uso di REPL era una considerazione importante da cui la compilazione JIT.

Un interessante articolo che ho visto (sezione 5.2). La libreria standard ha circa 135k variabili di cui circa 80k avevano un tipo fisso e statico. Il resto doveva rimanere rappresentato come il tipo di variante Qualsiasi.

A seconda del motivo per cui sei interessato al dinamico allo statico, questo può essere utile quando si osserva quanto sia dinamico il linguaggio. Ovviamente, questo ha un certo impatto sulle prestazioni anche se, in pratica, Julia sembra abbastanza veloce.

    
risposta data 15.07.2014 - 11:12
fonte
2

La metaprogrammazione in fase di compilazione è una cosa, se questo è il tuo dubbio. L'unica domanda è se lo fai bene (come in, conveniente e comprensibile ma ancora abbastanza potente per essere utile). Il codice di compilazione può essere digitato nel modo che preferisci (o non lo è affatto), ma se alla fine della compilazione il programma è completamente tipizzato in modo statico, ti verrà difficile venderlo come linguaggio dinamico per varie ragioni sociali e tecniche.

Tuttavia, in questo dominio è necessario distinguere con cura codice di compilazione e codice di esecuzione in ogni momento. Se la digitazione dinamica si insinua al di fuori della metaprogrammazione e nella logica di runtime, sei a metà strada verso il diavolo che sta cercando di compilare la digitazione dinamica.

Di solito RPython viene presentato come un sottoinsieme di Python, ma in realtà è molto vicino a ciò che viene proposto (solo altrimenti specializzato nella scrittura di macchine virtuali). Il codice arbitrario di Python viene importato (che in Python implica eseguendo il codice) e può utilizzare le funzionalità complete di metaprogrammazione, quindi il grafico dell'oggetto risultante (moduli, oggetti classe, oggetti funzione, costanti) viene analizzato, digitato e compilato fino a C. Tuttavia, non è privo di problemi, alcuni dei quali possono essere alleviati se il "linguaggio sorgente" è progettato per questo flusso di lavoro (ad es. annotazioni).

    
risposta data 15.07.2014 - 08:05
fonte
2

Sì, ci sono versioni di Lisp e Scheme che verranno compilate in C (e sono state per almeno 25 anni!) Nello specifico, Gambit Scheme ha avuto un back end in C dall'inizio degli anni 90 che verrà compilato in C, da cui può creare codice binario praticamente su qualsiasi piattaforma.

Poiché lo schema è una lisc è dotato di una capacità molto strong di fare meta-programmazione. In effetti puoi, in generale, riscrivere l'intera lingua, se lo desideri. I Lisps sono generalmente anche tipizzati dinamicamente. Quindi potrebbe benissimo essere che lo schema farà tutto ciò che vuoi

E naturalmente Dio scrive in Lisp: link

    
risposta data 15.07.2014 - 12:26
fonte
1

LLVM ha un backend C, sebbene possa o meno essere in sviluppo attivo .

Poiché C è più o meno un indipendente dalla piattaforma, appena al di sopra del linguaggio del linguaggio assembly, rendendolo il bersaglio di un compilatore non è esattamente la peggiore idea al mondo, e un certo numero di linguaggi di programmazione ha fatto esattamente questo.

asm.js è una prova di concetto. È un sottoinsieme a basso livello di Javascript che è stato specificamente progettato per essere un obiettivo del compilatore.

Vedi anche link

    
risposta data 15.07.2014 - 07:48
fonte
0

Puoi essere abbastanza sicuro che non esiste niente del genere. La domanda è, però, quanto dovrebbe essere stretta qualche altra lingua prima che possa convincerti a rinunciare?

La maggior parte delle lingue sono definite da una comunità di utenti. Gli utenti utilizzano un linguaggio a causa delle sue caratteristiche, capacità e comunità e puoi essere sicuro che nessuna comunità si svilupperebbe attorno a un linguaggio definito semplicemente dalla sua tecnologia di implementazione.

Molte lingue sono create come progetti per animali domestici o come lavori accademici. Se ne esiste uno puoi essere sicuro che nessuno qui ne abbia mai sentito parlare, quindi non c'è nemmeno la gioia.

Se consideriamo solo le lingue che si compilano in un back-end C, ce ne sono state molte. C ++, Objective-C ed Eiffel vengono subito in mente, ma ce ne sono molti altri.

Se estendiamo leggermente il tuo target dal backend di C a back-end tipicamente staticamente, allora include JVM e CLR. Ci sono un sacco di lingue che si compilano con questi obiettivi, e sia il codice intermedio CLR di am JVM che quello possono essere compilati in linguaggio assembly (pensate a Hotspot e JIT).

Quindi, a seconda di come si delinea la tua domanda, la risposta potrebbe variare da nessuna a molte e molte. Non è una domanda facile per dare una risposta ferma.

Quindi alla fine osserverei che le domande su "nome specifico prodotto / lingua / tecnologia" non sono una buona corrispondenza per P.SE, come senza dubbio saprete. Forse potresti tenerlo presente se decidi di continuare con questo progetto e cerchi un ulteriore aiuto.

Scheme è un esempio di un linguaggio tipizzato dinamicamente con una buona meta-programmazione che può essere compilato in C e altri back-end tipizzati staticamente. Ha una comunità strong e credo che tu ne abbia già sentito parlare. Non è da escludere che sia abbastanza vicino alla proposta di farti abbandonare il tuo progetto.

    
risposta data 15.07.2014 - 10:42
fonte

Leggi altre domande sui tag