Domanda

Sto tentando di determinare l'arte nota per la seguente idea:

1) l'utente digita del codice in una lingua chiamata (insert_name_here);

2) l'utente sceglie una lingua di destinazione da un elenco di candidati di output noti (javascript, ruby, perl, python);

3) il processore traduce insert_name_here in codice eseguibile nella lingua di destinazione;

4) il processore esegue quindi il codice utilizzando la chiamata di sistema pertinente in base alla lingua scelta

Il motivo per cui funziona è perché esiste una mappatura 1: 1 prestabilita tra tutti i costrutti della lingua da insert_name_here a tutte le lingue di destinazione supportate.

( Disclaimer: Questo ovviamente non produce codice "elegante" ben adattato alla lingua di destinazione. Fa semplicemente una traduzione rudimentale eseguibile. Lo scopo è consentire agli sviluppatori di ottenere un'implementazione rapida e sporca di algoritmi in diverse lingue per quei casi in cui non hanno voglia di reinventare la ruota, ma sono necessari per qualsiasi motivo per lavorare con una lingua specifica su un progetto specifico.)

Esiste già?

È stato utile?

Soluzione

Sono disponibili convertitori per diverse lingue. Il problema che stai per avere riguarda le librerie. Mentre la mappatura tra le istruzioni del linguaggio potrebbe essere facile, trovare le mappature tra le funzioni della libreria sarà molto difficile.

Non sono davvero sicuro di quanto utile sarebbe quel tipo di generatore di codice. Perché dovresti voler scrivere qualcosa in una lingua e convertirlo immediatamente in qualcos'altro? Riesco a vedere la logica dei linguaggi di quarta generazione che convertono diagrammi o modelli in codice, ma non vedo davvero il punto del tuo sforzo.

Altri suggerimenti

Il CLR .NET è progettato in modo tale che C ++. Net, C # .Net e VB.Net si compilino tutti nello stesso linguaggio macchina e tu puoi "decompilare". che la CLI ritorna in una di quelle lingue.

Quindi sì, direi che esiste già anche se non esattamente come lo descrivi.

Sì, esiste un programma che trasforma un programma da una rappresentazione a un'altra . Si chiama " compilatore " ;.

E per quanto riguarda la tua domanda se sia sempre possibile: finché la tua lingua di destinazione è almeno potente quanto la lingua di origine, allora è possibile. Quindi, se la tua lingua di destinazione è Turing completa, allora è sempre possibile, perché non può esserci una lingua più potente di una lingua completa di Turing.

Tuttavia, non è necessario che ci sia una stupida mappatura 1: 1.

Ad esempio: il compilatore Microsoft Volta che compila il bytecode CIL in codice sorgente JavaScript ha un problema: .NET ha thread, JavaScript no. Ma puoi implementare thread con continuazioni. Bene, JavaScript non ha neanche continuazioni, ma è possibile implementare continuazioni con eccezioni. Quindi, Volta trasforma CIL in CPS e quindi implementa CPS con eccezioni. (Le versioni più recenti di JavaScript hanno semi-coroutine sotto forma di generatori; quelli potrebbero anche essere usati, ma Volta è destinato a funzionare su una vasta gamma di versioni JavaScript, incluso ovviamente JScript in Internet Explorer.)

Questo sembra un po 'bizzarro. Se stai usando il termine "tecnica precedente" nella sua forma più comune, stai discutendo un'idea potenzialmente brevettabile. Se è il caso, hai:

1 / Ha pubblicato l'idea, avviando l'orologio con la domanda di brevetto - presumo, forse in modo errato, che tu abbia sede negli Stati Uniti. Altre giurisdizioni potrebbero avere altre regole.

2 / Detto all'intero pianeta la tua idea, il che significa che è praticamente inutile cercare di brevettarla, a meno che tu non agisca molto velocemente.

Se non stai pensando di brevettare questo e stavi semplicemente usando il termine "tecnica precedente" in senso laico, mi scuso. Lavoro per un'azienda che prende molto sul serio i brevetti ed è molto approfondito, cosa ci è permesso di fare con le informazioni prima di depositare.

Detto questo, le idee brevettabili devono essere nuove, utili e non ovvie. Penserei che la tua idea non passerebbe al terzo di questi poiché stai descrivendo un traduttore linguistico che avrebbe l'arte nota dei molti convertitori pascal-to-c e fortran-to-c là fuori.

L'unico barlume di speranza sarebbe la capacità della tua idea di generare uno dei linguaggi di output multipli (cosa che p2c e f2c non fanno) ma penso che anche questo sarebbe coperto da artisti del calibro di compilatori incrociati (come gcc ) che trasforma l'origine in una delle molte lingue degli oggetti diverse.

IBM ha un prodotto chiamato Visual Age Generator in cui si codifica in una lingua (proprietaria) ed è convertito in COBOL / C / Java / altri per funzionare su piattaforme target diverse da PC ai principali mainframe System z di honkin, quindi c'è il tuo primo problema (pensare a brevettare un'idea che IBM, il più grande brevetto del mondo, sta già utilizzando).

Tonnellate di loro. p2c, f2c e le implementazioni originali di C ++ e Objective C mi colpiscono immediatamente. Oltre a ciò, è difficile distinguere ciò che stai descrivendo da qualsiasi compilatore, specialmente per noi vecchi i cui compilatori hanno generato comunque codice ASM per una rappresentazione intermedia.

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