Domanda

Quello di Nikhil Kothari Copione# è probabilmente uno dei concetti più sorprendenti che ho visto nell'arena JavaScript da un po' di tempo.Questa domanda non riguarda JavaScript, ma piuttosto la compilazione del linguaggio nel runtime .NET.

Sono stato piuttosto interessato a come, utilizzando la piattaforma .NET, è possibile scrivere un compilatore per un linguaggio che dispone già di un compilatore (come C#) che genererà output separato dal compilatore originale consentendo al compilatore originale di generare output per la stessa fonte durante la stessa operazione di compilazione, facendo riferimento/utilizzando anche l'output dell'altro compilatore.

Non sono del tutto sicuro di aver compreso il processo abbastanza bene da porre la domanda con i dettagli giusti, ma questo è il modo in cui attualmente vedo il processo, come da diagrammi nei documenti Script#.Ho pensato a molte cose che coinvolgono la progettazione e la compilazione di linguaggi complessi che potrebbero essere in grado di trarre vantaggio da concetti come questo e sono interessato a cosa pensano gli altri dei concetti.

--

Modificare:Grazie per aver commentato, finora;le tue informazioni sono, di per sé, molto intriganti e mi piacerebbe ricercarle di più, ma la mia domanda riguarda in realtà come potrei scrivere i miei compilatori che possono essere eseguiti sulla stessa fonte contemporaneamente producendo più tipi diversi di output (potenzialmente) interdipendenti utilizzando CLR.Script# serve da esempio poiché genera JavaScript e un Assembly utilizzando la stessa origine C#, facendo cooperare nel contempo l'Assembly compilato con JavaScript.Sono curioso di sapere quali siano i vari approcci e concetti teorici nel progettare qualcosa di questa natura.

È stato utile?

Soluzione

È importante rendersi conto che tutto ciò che fa un compilatore è prendere un linguaggio sorgente (C# in questo caso), analizzarlo in modo che il compilatore abbia una rappresentazione che abbia senso per lui e non per gli esseri umani (questo è l'albero astratto della sintassi), e poi fa un generazione di codice ingenuo nella lingua di destinazione (msil è la destinazione per le lingue eseguite sul runtime .NET).

Ora, se il codice script# viene trasformato in un assembly e interagisce con altro codice .NET, significa che questo compilatore deve generare msil.script# utilizza csc.exe per questo, che è solo il comiler C# standard.Ora per generare il javascript, è necessario prendere c# o msil, analizzarlo e generare javascript da inviare al browser.I documenti dicono che ha un compilatore c# -> js personalizzato chiamato ssc.exe.

Per far interagire le cose in modo coerente sia sul lato client che sul lato server, dispone di una serie di assembly di riferimento scritti in .NET ma anche compilati in Javascript.Tuttavia, questo non è un problema specifico del compilatore, tali assembly di riferimento sono il runtime dello script#.Tuttavia, il runtime è probabilmente responsabile di gran parte della magia dello script# che stai percepindo.

Altri suggerimenti

Quindi diciamo che vuoi compilare C# in Javascript.Ti stai chiedendo se puoi sfruttare i compilatori C# esistenti, quindi invece di compilare direttamente C# in Javascript converti effettivamente il MSIL generato dal compilatore C# in Javascript?

Certo, puoi farlo.Una volta che hai il binario MSIL puoi fare quello che vuoi.

Microsoft ha un progetto di ricerca chiamato Volta che, tra le altre cose, compila msil in JavaScript.

Un set di strumenti per sviluppatori per la creazione di applicazioni Web multi-livello utilizzando strumenti, tecniche e modelli esistenti e familiari.La scala di livello dichiarativa di Volta consente agli sviluppatori di posticipare le decisioni architettoniche sulla distribuzione fino all'ultimo momento responsabile possibile.Inoltre, grazie a un modello di programmazione condiviso attraverso più livelli, Volta consente una nuova profilazione e test end-to-end per livelli più elevati di prestazioni di applicazione, robustezza e affidabilità.Utilizzando la scissione dichiarativa di livello, gli sviluppatori possono perfezionare le decisioni architettoniche basate su questi dati di profilazione.Ciò consente di risparmiare tempo e costi associati al refactoring manuale.In effetti, Volta estende la piattaforma .NET per consentire ulteriormente lo sviluppo di applicazioni di software+servizi, utilizzando strumenti e tecniche esistenti e familiari.

Architetto e crei la tua applicazione come applicazione client .NET, assegnando le parti dell'applicazione eseguite sul livello del server e il livello client in ritardo nel processo di sviluppo.È possibile indirizzare i browser Web o il CLR come client e Volta gestisce le complessità della scissione di livello.Il compilatore crea JavaScript del browser Cross-browser per il livello del client, i servizi Web per il livello del server e tutte le comunicazioni, la serializzazione, la sincronizzazione, la sicurezza e altri codici caldaie per legare i livelli insieme.In effetti, Volta offre un'esperienza migliore in più ambienti senza richiedere la sartoria dell'applicazione.

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