54 votes

Qu'est-ce que le code "géré" exactement ?

J'écris du code C / C++ depuis presque vingt ans, et je connais perl, python, php, et un peu java aussi, et je suis en train d'apprendre javascript. Mais je n'ai jamais écrit de code .NET, VB ou C#. Que signifie exactement le code "géré" ? Wikipedia le décrit simplement comme "du code qui s'exécute sous la gestion d'une machine virtuelle", et il indique spécifiquement que Java est (généralement) du code géré, alors pourquoi le terme semble-t-il s'appliquer uniquement à C# / .NET ? Peut-on compiler C# dans un .exe qui contient également la machine virtuelle, ou doit-on l'emballer et le donner à un autre .exe (comme Java) ?

Dans le même ordre d'idées, est-ce que .NET est une langue ou un cadre et que signifie exactement "cadre" ici ?

D'accord, c'est plus d'une question, mais pour quelqu'un qui travaille dans le secteur depuis aussi longtemps que moi, je me sens plutôt N00B-ish en ce moment...

36voto

lnediger Points 738

Lorsque vous compilez du code C# dans un fichier .exe, celui-ci est compilé en bytecode CIL (Common Intermediate Language). Chaque fois que vous exécutez un exécutable CIL, il est exécuté sur la machine virtuelle CLR (Common Language Runtime) de Microsoft. Donc non, il n'est pas possible d'inclure la machine virtuelle dans votre fichier exécutable .NET. Le runtime .NET doit être installé sur toutes les machines clientes sur lesquelles votre programme sera exécuté.

Pour répondre à votre deuxième question, .NET est un framework, c'est-à-dire un ensemble de bibliothèques, de compilateurs et de VM qui ne sont pas spécifiques à un langage. Vous pouvez donc coder sur le cadre .NET en C#, VB, C++ et tout autre langage disposant d'un compilateur .NET.

http://www.dotnetpowered.com/languages.aspx

La page ci-dessus contient une liste des langues qui ont des versions .NET, ainsi que des liens vers leurs pages.

19voto

JamesSugrue Points 8426

11voto

Keith Elder Points 1278

Je ne pense pas que vous soyez le seul à ne pas savoir ce qu'est .Net. Il y a déjà d'autres réponses qui devraient vous couvrir, mais je vais donner cette petite information pour les autres.

Pour voir ce qu'est " réellement " .Net, il suffit d'aller sur c : \Windows\Microsoft.Net\Framework

Vous y trouverez des dossiers spécifiques à la ou aux versions que vous avez installées. Allez dans le dossier v2.0.xxxxx si vous l'avez installé par exemple.

Dans ce dossier se trouve le framework. Vous verrez essentiellement un ensemble de fichiers .exe et de fichiers .dll. Tous les fichiers DLL qui commencent par System.*.dll constituent essentiellement le cadre .Net.

Les fichiers .exe que vous verrez dans ce dossier sont des utilitaires pour les développeurs ainsi que des compilateurs. Vous avez mentionné C#. Trouvez le fichier csc.exe. C'est votre compilateur C#.

Construire un programme est très simple. Introduisez le code suivant dans un fichier hello.cs.

using System;
class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("hello world");
        }
    }

Puis sur la ligne de commande tapez> csc hello.cs

Cela vous permettra de générer un fichier .exe. Exécutez-le et il vous enverra évidemment 'hello world'.

La ligne qui dit Console.WriteLine() fait appel au Framework. Console est un objet qui vit dans l'espace de noms System et WriteLine() est une méthode statique.

Voici le code désassemblé de la méthode Console.WriteLine() :

[HostProtection(SecurityAction.LinkDemand, UI=true)]
public static void WriteLine(string value)
{
    Out.WriteLine(value);
}

Lorsque les gens disent des choses comme "Devrais-je utiliser PHP ou .Net ?", ou "Devrais-je utiliser Python ou .Net", vous commencez à comprendre que ce n'est pas la bonne chose à discuter. Ils comparent manifestement un langage à un framework. C# est un langage et ce n'est que l'un des nombreux langages qui peuvent être utilisés pour écrire du code au-dessus de la plate-forme .Net. La même méthode Console.WriteLine() peut être invoquée depuis C#, VB.Net, Pascal, C++, Ruby, Python, F# et tout autre langage qui a été conçu pour fonctionner au-dessus de la plate-forme .Net.

J'espère que cela vous aidera.

-Keith

10voto

Vagnerr Points 1708

Il s'agit principalement du fait que toutes vos allocations de mémoire sont "gérées" pour vous. Si vous utilisez du code géré, vous n'avez pas à vous soucier de libérer vos objets lorsque vous n'en avez plus besoin. Le fait de leur permettre de sortir de leur champ d'application signifie que la VM finira par reconnaître qu'il n'y a plus de références à ces objets et les ramassera à la poubelle en rendant la mémoire au système.

Le code non géré, quant à lui, va simplement "fuir", à moins que vous ne libériez explicitement vos pointeurs avant de vous débarrasser des références.

9voto

Chris Upchurch Points 10484

Il est principalement utilisé pour décrire .NET car c'est le terme que Microsoft a choisi pour différencier .NET de C/C++ et d'autres langages plus anciens. Microsoft l'a choisi parce qu'il ne s'agit pas d'un terme habituellement associé à Java et qu'il ne voulait pas souligner les similitudes entre C#/.NET et Java (par opposition à un terme comme "code de machine virtuelle" qui le ferait ressembler beaucoup plus à Java). Fondamentalement, l'utilisation de "code géré" est une terminologie axée sur le marketing, plutôt que sur la technique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X