Question

Les langues gérées sont celles qui gèrent le nettoyage de la mémoire pour vous.

MODIFIER je ne parle pas de récupération de place. Je souhaitais simplement connaître les langages qui free () seraient automatiquement mis en mémoire, et toujours compilé en code machine.

Était-ce utile?

La solution

Vous semblez confondre "Géré". et "Collecte des ordures", alors que les langages gérés (par exemple, C # et Java) ont une collecte des ordures automatisée, "gérée". fait référence au fait qu'il existe une "machine virtuelle" qui exécute votre code (voir http://en.wikipedia.org/wiki/Managed_code ) .

Ainsi, par exemple, le CLR (Common Language Runtime) est la machine virtuelle exécutant le code .Net et la JVM (machine virtuelle Java) est la machine virtuelle exécutant le code java.

Vous pouvez en fait avoir un garbage collection pour les langues non gérées (par exemple, C ++ ), et inversement ont des langues gérées sans ordures (EDIT: je cherchais certaines langues, mais il me semble que je ne peux en trouver que si Objective C compte, je ne suis pas sûr que cela ait beaucoup de sens de créer de toute façon un langage géré sans récupération de place)

Java et C # peuvent en fait être compilés directement dans le code machine. Ils sont donc exécutés directement et sans machine virtuelle. Pour le code .Net, cette opération est effectuée à l'aide de NGEN (en fait, le CLR compile les assemblys .Net dans une machine. code que vous exécutez, la compilation dite "juste à temps"

MODIFIER: En guise de mise à jour de votre question, de nombreuses solutions de rechange à la récupération de place occupent une place extrême entre la gestion complète de la mémoire manuelle et la récupération de place. Beaucoup de langages qui compilent en code machine intègrent différentes formes de gestion de la mémoire qui ne vous obligent pas à libérer explicitement de la mémoire.

Puis-je poser une question - s'agit-il d'un "intérêt particulier"? question, ou essayez-vous de sélectionner une langue pour un projet - Si ce dernier est alors pourquoi êtes-vous si intéressé à ce que votre langue soit compilée en code machine? Certes, dans le cas où .Net ayant votre code compilé, JIT offre un certain nombre d’avantages en termes de performances (dans la majorité des cas), le fait que votre code ne supprime pas la dépendance au framework .Net.

Autres conseils

lots:

LISP (et variantes), Erlang, C # (sous Mono), Haskell, Java (avec gcj)

Bien sûr, il y en a. Java, par exemple. (gcj)

Cependant, le terme géré en tant que tel implique que vous devez effectuer un certain temps d'exécution.

Quelques autres au sens large de "géré" signifiant sûr (via la vérification du type à l'exécution ou l'analyse statique exhaustive) et / ou les ordures collectées:

  • OCaml
  • D
  • Ada
  • Prolog
  • Nettoyer
  • Eiffel

Analogue à la réponse d'Efraims, tout programme .NET compilera également en code machine, généralement en 2 étapes (JIT), mais il existe un outil NGEN permettant de précompiler MSIL en natif.

Il existe un choix semi-GC: GLIB.

Gilb utilise le nombre de références pour gérer la durée de vie d’un objet. Lorsque le nombre de références atteint 0, un objet est nettoyé.

C’est beaucoup plus inconvenant que .NET, Java ou Python, mais quand vous devez utiliser le C, c’est mieux que rien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top