Domanda

Scrivere applicazioni native veloci, con chiamate API ed ecc., in un moderno linguaggio di programmazione multipiattaforma come C # sarebbe fantastico, no? Ad esempio, se si desidera scrivere una semplice utility per aiutare le persone IT con l'installazione di cose, che non avrebbero bisogno di altri componenti, in un linguaggio di programmazione semplice e moderno? o se vuoi scrivere un gioco 3D, dovrebbe essere veloce e JIT lo renderebbe più lento ...

Perché, perché non è possibile? Perché non ci sono linguaggi di programmazione moderni nativi per queste cose?

È stato utile?

Soluzione

C # e .Net sono codice nativo. Penso che tu abbia frainteso il JITter. Non è una VM. Un programma C # viene compilato in codice completamente nativo prima di eseguirne uno qualsiasi.

Ora, "necessitano di altri componenti" la parte è una preoccupazione. Dagli tempo, però. Ti sarà difficile trovare un'installazione di Windows in questi giorni senza almeno .Net 2.0, e anche un paio di distro Linux tradizionali includono mono out of the box.

Altri suggerimenti

Non dare per scontato che JIT renda le cose più lente. JIT può ottimizzare per il computer esatto che esegue l'applicazione anziché un computer generico come un 386 o Pentium. Può anche prendere migliori decisioni di compromissione della velocità / memoria durante la generazione del codice perché sa esattamente cosa è disponibile. E se JIT rende ancora le cose più lente, puoi NGEN in modo che JITting sia fatto in anticipo.

A riprova di ciò, considera che Quake è stato portato su CLR un paio di volte e nei miei test personali i frame al secondo sono stati più veloci quando Quake è in esecuzione sul CLR circa la metà delle volte Lo demo.

È stato dimostrato che i programmi .NET compilati funzionano altrettanto rapidamente di C. Se lo desideri ultra-lean, scrivilo in assembly per il tuo processore nativo.

È possibile utilizzare lo strumento Microsoft NGEN.EXE per creare un'immagine nativa di un assembly .NET. Vedi Documentazione MSDN NGEN . Microsoft ha già pensato a cosa stai arrivando qui.

Microsoft produce anche ILMERGE. Strumento EXE per unire più file di assieme in uno solo. Ciò potrebbe limitare anche l'ottimizzazione e la velocità.

Come nota a margine, Mono ha una compilazione anticipata, eliminando il tempo di esecuzione. (Penso che sia così che vanno via correndo su iPhone, il che proibisce qualsiasi JIT.)

Quindi, questo significa che potremmo compilare e collegare completamente un programma C # usando (limitate) chiamate .NET in un file EXE autonomo che verrebbe eseguito senza che .NET sia installato affatto?

FYI: Il controllo di un server di circa 5000 server ha rivelato circa 200 senza nemmeno .NET 2.0.

Ciò causa problemi per il codice che deve essere eseguito su " tutte le istanze di Windows " ;. Con .NET 4.0+ non incluso 2.0, questo peggiora poiché entrambe le macchine Windows nuove e vecchie potrebbero non avere il .NET "giusto"

c'è, C. C può essere usato per scrivere qualsiasi applicazione, mai !!!

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