Je suis nouveau à C # (mais pas à la programmation) et je me demandais: Les programmes C # ont toujours besoin de .NET ou y a-t-il des moyens d'éviter les dépendances et de rendre l'application indépendante? P>
6 Réponses :
Oui c # nécessite toujours le temps d'exécution .NET. P>
Si vous êtes inquiet pour d'autres plates-formes, il y a mono qui permettra aux applications .NET à exécuter. sur des plates-formes autres que Windows (c.-à-d. Linux) à l'aide du mono-runtime. p>
C # code est compilé dans le code CIL qui est un ensemble d'instructions indépendant de la plate-forme, je cite de Wikipedia A>: p>
lors de la compilation de la programmation .NET
Langues, le code source est
traduit en code CIL plutôt que
Plate-forme ou objet spécifique au processeur
code. CIL est une CPU- et
Enseignement indépendant de la plate-forme
qui peut être exécuté dans n'importe quel
environnement soutenant le commun
Infrastructure linguistique, telle que la
.Net Runtime sur Windows, ou le
Cross-plate-forme Mono Runtime. P>
blockQuote>
Je ne comprends pas pourquoi les gens pensent que mono fait de la plate-forme C #. Bien sûr, cela aide ... mais la façon recommandée de faire des applications d'interface graphique dans .net est maintenant WPF, et il n'y a pas de prévu actuel pour ajouter cela à Mono. Cela semble indiquer clairement que votre application WPF ne se passe nulle part ailleurs mais Microsoft OSES (à moins que Silverlight ne soit suffisamment bon pour vous).
Mono a un compilateur à l'avance. Ils ont utilisé cela à MonoTouch pour créer un code indigène autonome et se conformer aux règles IOS App Store.
Je suppose que je devrais clarifier. Si vous ciblez Mono, vous pouvez alors écrire des applications multiplate-forme .NET. Si vous ne le considérez pas à l'avance et utilisez la dernière et la plus grande plate-forme .NET et les meilleures pratiques actuelles ... Cela ne sera pas susceptible de travailler sur Mono.
@ Darron, il y a beaucoup de choses à faire en plus des applications WPF robustes. Pensez côté serveur. Même dans ce cas, WPF n'est pas un remplaçant pour WinForms, mais un complément. Cela dit, il n'y a pas de balle d'argent.
J'ai déjà lu un compilateur C # Nativity du RemoteSoft.com
Certains programmes C nécessitent généralement une exécution C, C # Programmes nécessitent l'exécution de la langue commune. P>
Oh ho ho, je ne savais pas qu'il y avait un runtime C. Intéressant.
-1 C'est une réponse horriblement trompeuse, car de nombreux programmes C ne I> n'utilisent pas le temps d'exécution. Je peux compiler des programmes C pour exécuter directement sur le matériel (instructions de la machine) et même l'assemblage en ligne dans un programme C. À ma connaissance, il n'y a pas de compilateur de génération de code de machine pour C #. Une meilleure comparaison aurait été Java, qui repose également sur un interprète (et JIT, etc., etc.).
C fait pas b> nécessite un runtime!
Eh bien, la "bibliothèque d'exécution C" (comme dans MSVCRT) n'est pas à distance la même chose que "l'exécution de la langue commune". Bien sûr, ils partagent un mot, mais le premier désigne simplement une bibliothèque de fonctions normalisée, tandis que la seconde se réfère à une plate-forme + machine à outils + machine virtuelle + ...
Inline ASM n'est pas C, c'est l'ASM. Et qui a dit que c nécessitait un runtime? Je ne l'ai pas fait, j'ai dit que c programmes i> typiquement i> nécessite un runtime. Ce que beaucoup font, même le vieux firmware écrit il y a 20 ans et plus.
C Programmes compilez dans le code de machine natif, qui sont exécutés pratiquement Verbatim par la CPU. La seule chose debout entre le programme et la CPU est le noyau du système d'exploitation qui est un peu plus qu'un garde de sécurité. Le fait qu'un ensemble standard de bibliothèques puisse être requis pour qu'un programme C fonctionne correctement ne signifie pas que cela nécessite un "runtime". Les programmes C # compilent dans une "langue intermédiaire" (MSIL) et sont exécutés par une chargeuse spécifique à la plate-forme qui fournit un "Sandbox" dans lequel le code de l'utilisateur fait son travail.
Si un programme C "nécessite un ensemble standard de bibliothèques appelé les bibliothèques d'exécution C", on pourrait même dire que le programme C "nécessite une exécution C".
la réponse a de bonnes comparaisons et des argumentations , le .NET est une bibliothèque mais plus grande
@Greg - la différence est que le programme C ne nécessite que MSVCRT, car MSVCRT fournit des hameçons matériels que le développeur devra autrement se mettre en œuvre à partir de zéro et appliquer ensuite une certaine sécurité de la sécurité de base (permettant au système d'exploitation de "tuer" le programme si Il essaie de casser les règles du système d'exploitation). Vous pouvez écrire et compiler un programme C qui nécessite uniquement un ordinateur. MSVCRT ne traduit pas le code compilé en quelque chose que la CPU peut comprendre. MSVCRT ne fournit pas la collecte des ordures. MSVCRT ne fait pas de programme ciblant un travail de noyau Linux dans Windows.
@Keiths: tout vrai et aussi complètement à côté du point. Le fait qu'un CRT soit plus mince que le CLR ne change pas le fait que c'est une bibliothèque d'exécution que la grande majorité des programmes C nécessitera de courir. Vous vous remerciez sur les détails de la mise en œuvre qui ne sont pas pertinents pour le point de vue. Qui se soucie de Que fait i> le temps d'exécution? La plupart des programmes C nécessitent une certaine saveur du runtime C et la plupart des programmes C # exigent le CLR.
@Greg D - pas le plus - tous les programmes C # nécessitent le CLR (ou un workalike) pour fonctionner et comme je l'ai déjà dit, ce n'est pas une exigence d'un programme C. C ne nécessite pas de "runtime" pour fournir un bac à sable dans lequel travailler et lui donner des choses approuvées parentéement à travailler avec; Cela peut nécessiter des outils qu'il n'a pas elle-même, mais qu'il connaît et se charge dans son propre espace mémoire. Il y a une grande différence ici; Ce ne sont pas que des "détails de la mise en œuvre".
Je ne comprends pas ce que vous pouviez vous disputer. Il n'y a rien de mal à propos de la déclaration que la plupart des programmes C nécessitent une certaine saveur du runtime C.
Un programme C a besoin d'une exécution de la même manière que tous les programmes nécessitent quelque chose à les charger dans la mémoire et pointez le registre d'exécution de la CPU à la première instruction. Le chargeur exécutable d'un système d'exploitation ou de la machine virtuelle dans des systèmes d'exploitation multitâche, n'est pas un «temps d'exécution» comme le terme est couramment compris. Même au-delà de cela, les programmes C n'ont besoin que de MSVCRT de la même manière que tout programme peut avoir besoin de crochets dans une bibliothèque de code standard. Un "runtime" déduit un environnement de code géré qui effectue la traduction d'IL au code natif. Java nécessite un runtime. C # nécessite un runtime. C ne pas.
Et en plus de cela, lorsque vous avez un "runtime", vous devez demander "bien, ce qui exécute le temps d'exécution?". Bien avant d'arriver à la racine de cette récursion, vous trouvez des programmes «natifs» qui sont exécutés dans un «exécution» (VM) uniquement parce qu'ils sont exécutés dans un système d'exploitation multitâche et ne peuvent donc pas avoir l'attention indivisée de l'ordinateur. À un niveau, vous avez besoin d'un programme qui ne fonctionne aucune aide extérieure. C'est le noyau et la plupart sont écrits en C / C ++. Les pilotes de périphérique, qui ne sont absolument rien gratuitement, sont écrits en C si ce n'est ASM. Comptez tous ces éléments et la balance vous conseille considérablement.
Le temps d'exécution C n'a aucune comparaison utile avec le temps d'exécution C # dans le contexte de la question posée. Cette réponse n'est pas utile; -1.
C # n'est pas compilé au code natif, et donc l'ordinateur ne peut donc pas le lire. Vous avez besoin de la structure .NET pour convertir le soi-disant bytecode (le code que le compilateur C # est compilé, CLI) peut être converti par le compilateur TIME de la technologie. P>
Mono est un cadre alternatif et peut également exécuter C #. Il est pris en charge sur plus de plates-formes, puis le document .NET (qui prend en charge uniquement Windows). P>
Donc, oui, soit le document .NET, soit le mono-runtime nécessaire pour exécuter des applications C #, de nouvelles versions de Windows installent et mettent à jour le document .NET. P>
c'est possible. C # est juste un langage de programmation, et tout comme n'importe quelle autre programmation: il peut être compilé de quelque manière que ce soit, vous pouvez penser: cela inclut la compilation sans .NET. En fait, le projet mono (C # pour beaucoup de plates-formes) fait exactement cela. P>
Il existe d'autres compilateurs commerciaux disponibles qui prétendent compiler votre application sans .NET, mais ils collent simplement .NET dans votre exécutable: qui est inutile, lent et juste stupide. P>
Tout autre moyen d'utiliser C # sans .NET ou mono serait plus une expérience éducative qu'une solution pratique. Quant à ce que l'expérience de l'éducation vaut la peine: si vous avez le temps, je vous recommanderais certainement d'essayer quelque chose comme celui-ci lorsque vous avez un peu plus d'expérience. P>
apparemment .NET Runtime n'est pas requis, voir MonoTouch par exemple. P>
À l'heure actuelle, il n'y a pas de compilateur statique pour C # et si on existerait, il devrait supposer certaines fonctionnalités pouvant être fournies plus efficacement à travers le CLR.
N'oubliez pas non plus que le .NET Framework est installé par défaut sur la plupart des versions de Windows utilisées (vous pouvez trébucher sur une personne à l'aide de NT4, ni quelque chose, mais ils ont alors de plus gros problèmes en termes de tout le système d'exploitation ne sont plus pris en charge)
@the_Drow Je vous prie de différer, voir COMPILER MONO AOT , notamment la section Considérations sur la performance i>. Cela dit, notamment absent des fichiers binaires compilés AOT sont des fonctionnalités "dynamiques" telles que dans
system.reflection code>.
je suis aussi nouveau en C # et plusieurs fois en utilisant c donc je trouve cette dissolution d'intéressant