2009-07-31 11 views
0

Verwaltete Sprachen sind diejenigen, die die Speicherbereinigung für Sie übernehmen.Gibt es verwaltete Programmiersprachen, die zu Maschinencode kompilieren?

EDIT Ich spreche nicht über Garbage Collection. Ich war nur daran interessiert, über Sprachen zu wissen, die automatisch für mich Speicher free() Speicher und kompilieren immer noch auf Maschinencode.

+7

"verwaltet"! = "Garbage Collection" –

+3

"Managed" == "Verkauft von Microsoft", oder? –

+0

Javascript wird in nativen Code kompiliert. Erklären Sie, was Sie eigentlich erreichen wollen. – jrockway

Antwort

8

Sie scheinen "verwaltete" und "Garbage Collection" zu verwirren, während oft verwaltete Sprachen (zum Beispiel C# und Java) automatisierte Garbage Collection haben, "verwaltet" bezieht sich tatsächlich auf die Tatsache, dass es eine "virtuelle Maschine" gibt welches Ihren Code ausführt (siehe http://en.wikipedia.org/wiki/Managed_code).

So ist zum Beispiel die CLR (Common Language Runtime) die virtuelle Maschine, die .Net-Code ausführt, und die JVM (Java Virtual Machine) ist die virtuelle Maschine, die Java-Code ausführt.

Sie können tatsächlich Garbage Collection für nicht verwaltete Sprachen haben (zum Beispiel C++), und umgekehrt haben Sprachen ohne Garbage Collection verwaltet (EDIT: Ich suchte nach einigen, aber ich kann keine finden, es sei denn Objective C zählt, Ich bin mir nicht sicher, dass es sehr sinnvoll ist, eine verwaltete Sprache ohne Garbage-Collection zu erstellen)

Sowohl Java als auch C# können tatsächlich direkt in den Maschinencode übersetzt werden, so dass sie direkt ausgeführt werden und nicht verwendet werden virtuelle Maschine - für .Net-Code wird dies mit Hilfe von NGEN getan (in der Tat kompiliert die CLR .Net-Assemblies in Maschinencode, wie Sie es ausführen, so genannte "Just in Time" -Kompilierung)

EDIT: Als Update für das Update Ihrer Frage gibt es in der Tat eine Reihe von Alternativen zur Speicherbereinigung in einem Spektrum zwischen dem Extrem der kompletten manuellen Speicherverwaltung und Garbage Collection, und eine Menge Sprachen, die kompilieren Der Maschinencode enthält verschiedene Formen der Speicherverwaltung, bei denen Sie Speicher nicht explizit freigeben müssen.

Kann ich fragen - ist das eine Frage, die nicht von Interesse ist, oder versuchen Sie, eine Sprache für ein Projekt auszuwählen - Wenn die Letzteren dann so daran interessiert sind, Ihre Sprache auf Maschinencode kompilieren zu lassen? Sicherlich, im Falle von .Net, dass Ihr Code JIT kompiliert hat, bietet eine Reihe von Leistungsvorteilen (in der Mehrzahl der Fälle), auch die NGENing Ihres Codes entfernt nicht die Abhängigkeit vom .Net-Framework.

+1

Ich würde "jede Sprache" verwalten, in der es einen signifikanten Code gibt, der Ihren Code herumläuft und Zugriffsverletzungen, ungeeignete Zeiger, Array-Grenzen usw. überprüft, die normalerweise mit VM durchgeführt werden, aber das Kompilieren von Wächtern würde immer noch passen. – Javier

+0

Sie können die Speicherbereinigung in C++ nicht auf vernünftige Weise durchführen. Laut Stroustrup "ist die Sprache GC-feindlich" – EFraim

+1

Dem stimme ich zu, trotzdem ist "Managed" eine Art subjektiver Begriff. Ihre Definition umfasst Skriptsprachen, und ich stimme dem zu Ich habe noch nie gehört, dass Leute JavaScript als "verwaltet" bezeichnen :-) – Justin

4

Sicher gibt es. Java zum Beispiel. (gcj)

Der Begriff selbst verwaltet bedeutet jedoch, dass Sie einige Laufzeit herumtragen müssen.

+1

Java-VMs verwenden auch das, was sie JIT nennen, was bedeutet, dass Code kompiliert wird, wenn er ausgeführt wird, und somit schneller ausgeführt wird, wenn er erneut aufgerufen wird. Aber Luca will das wahrscheinlich nicht. – Stroboskop

+0

@Stroboskop: gcj kann zu einer ausführbaren Datei ohne JIT kompilieren. – Zifre

8

Los:

Lisp (und Varianten), Erlang, C# (unter Mono), Haskell, Java (mit gcj)

1

Analog zu Efraims Antwort, jedes .NET-Programm in Maschinencode kompiliert als Nun, normalerweise in 2 Schritten (JIT), aber es gibt ein NGEN-Tool, um die MSIL auf native vorkompilieren.

3

Ein paar mehr, im weiteren Sinne von "managed" sicheren Sinn (über Laufzeittypprüfung oder abschließende statische Analyse) und/oder Müll gesammelt:

  • OCaml
  • D
  • Ada
  • Prolog
  • Sauber
  • Eiffel
1

Es gibt eine halb-GC-Wahl: GLIB.

Gilb Referenzzahl verwenden, um die Lebensdauer des Objekts zu verwalten. Wenn reference count auf 0 trifft, wird ein Objekt bereinigt.

Es viel viel weniger interessant als .NET oder Java oder Python, aber wenn Sie C verwenden müssen, ist es besser als nichts.