2016-01-07 67 views
11

Recentemente ho iniziato a leggere i dettagli di riorganizzazione .NET (principalmente tramite .NET Core github pages). Sembra che abbiano creato progetti fratelli per supportare più piattaforme. Durante la lettura ho l'impressione che CoreCLR e CoreRT sia una nuova versione OpenSource del compilatore di proprietà Roslyn. CoreRT fornisce una compilazione nativa (AOT). E LLILC è un'implementazione alternativa che dirige il framework LLVM.Qual è la differenza tra .NET CoreCLR, CoreRT, Roslyn e LLILC

Qualcuno può confermare e descrivere le differenze e gli obiettivi di questi progetti dal punto di vista dell'utente? Perché qualcuno dovrebbe usare Roslyn in futuro invece di CoreCLR?

+5

Roslyn è interamente open-source, non c'è nulla di proprietario per quanto ne so. –

+4

CoreRT è un runtime. Roslyn è il compilatore C# e VB, che compila il codice sorgente in IL. Sono cose completamente diverse. –

+1

@JonSkeet - dovresti pubblicare il tuo commento come risposta. –

risposta

28

Roslyn è una piattaforma di compilazione che consente di creare strumenti di analisi statici e dinamici e estensioni e trasformazioni del linguaggio personalizzate per i linguaggi di programmazione C# e VB. Consente inoltre di incorporare queste lingue in altre lingue o applicazioni. Roslyn include i compilatori C# e VB e altri strumenti. Questi compilatori emettono il codice Common Intermediate Language (CIL).

Per eseguire questo codice, CIL deve essere compilato in codice binario che l'architettura del computer di destinazione può eseguire. .NET attualmente fornisce tre modi per farlo:

  1. Compilare il codice CIL in codice binario utilizzando un compilatore JIT mentre l'app è in esecuzione. Questo modello è implementato da CoreCLR. CoreCLR è iniziato come una copia di CLR. È stato modificato per supportare diversi sistemi operativi. Sono mantenuti separatamente e in parallelo.
  2. Compilare il codice CIL in codice binario e integrare tutti i componenti di framework .NET richiesti per produrre un eseguibile autonomo a file singolo le cui prestazioni siano più vicine al linguaggio scritto in codice. Questa tecnologia è denominata .NET Native. CoreRT è un'implementazione open-source di questa tecnologia. La principale differenza tra .NET Native e CoreRT è che il compilatore AOT utilizzato dal primo è il compilatore UTC (il backend del compilatore MSVC) mentre il successivo utilizza attualmente RyuJIT. UTC è molto più aggressivo nell'ottimizzare il codice rispetto a RyuJIT. Anche in CoreRT, alcuni componenti del runtime sono stati reimplementati in modo pulito in C#. CoreCLR utilizza ancora l'implementazione C++.
  3. NGEN che è simile a .NET Native eccetto che gli eseguibili prodotti non sono autonomi e richiedono un runtime installato esternamente.

LLILC è un compilatore CIL basato sul framework del compilatore portatile LLVM. Può essere utilizzato per compilare compilatori JIT (correnti) e AOT (futuri). Il vantaggio di questo compilatore è che sfrutta le ottimizzazioni del compilatore Cl ++ C++ e porta il modello di estensibilità LLVM (passaggi di analisi e ottimizzazione) a .NET.

CoreRT e LLILC sono nuovi progetti e sono ancora in fase di sviluppo e richiedono molto più lavoro per supportare le applicazioni di produzione. Quindi se sei un utente e non un contributore, CoreCLR e Roslyn sono per te. Ancora una volta, CoreCLR è il runtime mentre Roslyn è il C# e compilatori VB.

+0

Qualcuno sa se LLILC è ancora in fase di sviluppo attivo o se c'è una sostituzione? La loro pagina GitHub non mostra attività per gli ultimi due anni. –

+1

@AnthonyGatlin Vedi [questo] (https://github.com/dotnet/llilc/issues/1075#issuecomment-345278134). Sembra che LLILC non sia né vivo né morto. –

+0

Sembra che Microsoft stia davvero spingendo le persone a lasciare .NET/.NET Core e passare a C++ usando LLVM/CLang. La differenza di prestazioni è notevole. LLVM/CLang funzionano bene su x86_x64, ARM, Power PC e altro su Windows, Linux, Android e altri. In particolare, per le applicazioni mobili, le prestazioni si traducono in un consumo ridotto della batteria. Se fossi uno dei honchos di Microsoft, farei tutto il possibile per assicurarmi che tutti i miei linguaggi vengano compilati ed eseguiti sotto LLVM. Se i puntatori gestiti sono un problema, allora correggi le cose danneggiate almeno per la compilazione su LLVM. –

Problemi correlati