2012-03-20 13 views
6

Sto cercando un linguaggio di sistema di livello superiore, se possibile, adatto per la verifica formale, che compila lo standard C, in modo che possa essere eseguito su più piattaforme con sovraccarico (relativamente) basso.Linguaggio di sistema di alto livello che compila in c?

I due più promettenti queste lingue che ho imbattuto negli ultimi giorni sono:

  1. BitC - Mentre gli obiettivi di progettazione di questo linguaggio corrispondono alle mie esigenze (supporta anche il paradigma funzionale), si è in uno stato molto instabile, la documentazione non è aggiornata e, in genere, sembra una ripresa molto lunga per un progetto del mondo reale.

  2. Lisaac - Supporta Design-by-contract, che è molto interessante e ha un overhead di prestazioni relativamente basso. Tuttavia, il sito Web è morto, non c'è stata una nuova versione dal 2008 e in genere sembra che la lingua sia morta.

Vorrei anche sottolineare che non è pensato per un sistema in tempo reale, in modo da un GC o, in generale, non il determinismo (nel senso in tempo reale), non è un problema.

Il progetto riguarda principalmente l'elaborazione audio, sebbene debba essere multipiattaforma.

Presumo che qualcuno mi indichi la risposta ovvia: "plain ol 'C". Sebbene sia veramente multipiattaforma e molto efficace, la quantità di codice sarebbe probabilmente maggiore.

EDIT: Vorrei chiarire che intendo cross-platform E cross-architecture. Questo è il motivo per cui considero solo le lingue, compilate per C in primo luogo, ma se riesci a indicarmi un altro esempio, ti sarei grato :)

+6

Hai guardato il C++? È (può essere) un linguaggio di sistemi di alto livello. –

+2

Sì, ma la complessità introdotta dal C++ è, ritengo, non valga la pena supplementare. Inoltre, ogni compilatore su questa terra supporta una parte diversa degli standard linguistici e avendo, ad es. eccezioni, è un casino. Lo stesso vale per RTTI e in generale per tutte le funzionalità che rendono C++ di livello superiore. –

+0

Se davvero non ti piace il C++, potresti dare un'occhiata a D che ha un GC tra le altre cose ed è meno complesso del C++. È molto meno popolare e non ha tante librerie, ma può essere utilizzato con il codice C come C++. Nessuno di questi linguaggi in realtà viene compilato in C, ma viene compilato in base al codice macchina. –

risposta

3

Penso che potresti interessarti di ATS. Si compila a C (in realtà esprime e spiega molti idiomi e schemi C da una prospettiva teorica formale di tipo, è stato persino proposto di preparare un libro di sorta per dimostrarlo - se solo avessimo avuto più tempo ...).

Il progetto riguarda principalmente l'elaborazione audio, sebbene debba essere multipiattaforma.

Non so molto sull'elaborazione dell'audio, ho fatto principalmente alcune cose di grafica per computer (principalmente le cose di base, solo per provarlo).

Inoltre, non sono sicuro che ATS funzioni su Windows (non l'ho mai provato).

(Disclaimer: Lavoro con ATS da un po 'di tempo, linguaggio ingombrante e ampio, a volte difficile da usare, ma mi è piaciuta molto la qualità dei programmi che sono riuscito a produrre con esso, per esempio, vedere Test sottodirectory nella GLES2 bindings per alcuni programmi realistici)

+0

+1, Questa è la risposta più vicina a ciò di cui ho bisogno, tuttavia da un primo sguardo sembra che il codice C generato sia compilato solo da GCC, che, sebbene funzioni su molte piattaforme, non è disponibile ovunque. –

+0

@ K.Steff, se hai davvero bisogno di un linguaggio che compili in C che possa essere compilato da * qualsiasi compilatore C *, allora è un problema. Tuttavia, penso che potresti accontentarti di alcuni compilatori specifici (ad esempio GCC e Clang) che potrebbero soddisfare le tue esigenze a questo punto. Quindi potremmo lavorare insieme per rendere ATS compilabile via Clang (ricordo che i file C * hanno * compilato con Clang l'ultima volta che ho provato, ma c'erano alcune intestazioni "mancanti", quindi ...). Se hai bisogno di qualche piattaforma/compilatore esotica, per favore sii più specifico; forse possiamo anche lavorarci. –

2

Quanto segue non strettamente aderire ai requisiti ma mi piacerebbe parlare del fatto che in ogni caso ed è troppo lungo per un commento:

PyPy di RPython può essere tradotto in C. Here's a nice talk about it. È stato utilizzato per implementare Smalltalk, JavaScript, Io, Scheme, Gameboy (con vari gradi di completezza), ma è possibile scrivere programmi autonomi al suo interno. È noto principalmente per la sua implementazione del linguaggio Python che è runs on Intel x86 (IA-32) and x86_64 platforms.

Il processo di traduzione richiede un compilatore C capace.La toolchain fornisce i mezzi per dedurre varie cose sul codice (utilizzato dal processo di traduzione stesso) che potresti riutilizzare per la verifica formale.

Se si conoscono sia Python che C, è possibile utilizzare cython che converte la sintassi simile a Python in C. Viene utilizzato per scrivere estensioni CPython.

+0

Grazie, questo è qualcosa di utile, cercherò :) –

Problemi correlati