Frage

Manchmal ist es schwierig, einige der Dinge zu beschreiben, dass „wir Programmierer“ an Nicht-Programmierer und Management-Typen sind einfach denken können.

So ...

Wie würden Sie den Unterschied zwischen Managed-Code (oder Java Byte-Code) und Unmanaged / Native-Code auf einen Nicht-Programmierer beschreiben?

War es hilfreich?

Lösung

verwaltetem Code == "Mansion House mit einem ganzen Stab oder Butler, Maids, Köchen und Gärtnern den Ort schön zu halten"

nicht verwaltetem Code == "Wo habe ich in der Universität leben"

Andere Tipps

denken Sie an Ihrem Schreibtisch, wenn Sie es regelmäßig reinigen, gibt es Raum zu sitzen, was Sie gerade arbeiten tatsächlich vor Ihnen. wenn Sie es nicht bereinigen, führen Sie aus dem Raum.

Dieser Raum entspricht Computerressourcen wie RAM, Festplatte, etc.

Managed Code ermöglicht das System automatisch entscheiden, wann und was zu bereinigen. Unmanaged-Code macht den Prozess „manuell“ -., Dass der Programmierer muss dem System sagen, wann und was zu bereinigen

Ich bin erstaunt, was aus dieser Diskussion hervorgeht (na ja, nicht wirklich, aber rhetorisch). Lassen Sie mich noch etwas hinzufügen, auch wenn ich zu spät bin.

virtuelle Maschinen (VMs) und Garbage Collection (GC) sind Jahrzehnte alt und zwei getrennte Konzepte . Garbage Collection nativen Code kompiliert Sprachen existieren, auch diese von Jahrzehnten (kanonische Beispiel: ANSI Common Lisp ; na ja, zumindest ist ein < strong> Compiler- Garbage Collection deklarative Sprache, Mercury -. aber anscheinend die Massen schreien Prolog-ähnliche Sprachen)

Auf einmal GCed Bytecode-basierte VMs sind ein Allheilmittel für alle IT-Erkrankungen. Sandbox bestehender Binärdateien (andere Beispiele hier , hier und hier )? Prinzip der kleinsten Behörde (POLA) / Fähigkeiten basierte Sicherheit ? Schlanke Binärdateien (oder seine moderne Variante SafeTSA )? Region Inferenz ? Nein, Sir: Microsoft & Sun uns nicht gestatten, auch nur über solche Verdrehungen zu denken. Nein, besser umschreiben unseres gesamten Software-Stack für diese wunderbar (???) neu (???) language§ / API. Als einer unserer Gastgeber sagt, es ist Feuer und Bewegung alle immer wieder.

§ Sei nicht albern: Ich weiß, dass C # nicht die einzige Sprache ist, die .NET / Mono Ziel, es ist ein Hyperbel .

Edit: ist es besonders lehr unter Kommentare zu dieser Antwort von S.Lott im Lichte der alternativen Techniken zur Speicherverwaltung / Sicherheit / code Mobilität, die ich aufgezeigt.

Mein Punkt ist, dass nicht-technische Menschen brauchen nicht mit technischen Details zu diesem Detaillierungsgrad.

gestört werden

Auf der anderen Seite, wenn sie von Microsoft / Sun Marketing beeindruckt sind, ist es notwendig, sie zu erklären, dass sie getäuscht werden - GCed Byte-Code basierte VMs sind nicht diese Neuheit, wie sie behaupten, sie lösen nicht auf magische Weise alle IT-Problem und Alternativen zu diesen Implementierungstechniken existieren (einige sind besser).

Edit 2: Garbage Collection ist eine Speicher-Management-Technik und wie jede Implementierungstechnik, muß korrekt sein zu verstehen, verwendet. Schauen Sie, wie bei ITA Software, sie GC umgehen gute Perfomance zu erhalten:

  

4 - Weil wir etwa 2 Gigs von statischen Daten benötigen wir einen schnellen Zugang zu,   Wir verwenden C ++ Code in den Speicher-Karte riesig   mit Dateien zeiger C structs   (Flüge, Tarife, etc.), und dann   Zugriff auf diese von Common Lisp mit   Zu. Eine Struktur Feld   Zugriff kompiliert in zwei oder drei   Anweisungen, so ist es nicht wirklich   jede Leistung. Strafe für den Zugriff auf   C Rattesie als Lisp-Objekte. indem   dies, wir halten den Lisp Müll   Sammler aus den Daten zu sehen (zu   Lisp, wobei jeder Zeiger auf ein Objekt ist C   obwohl nur eine Fixnum, tun wir oft   vorübergehend wickeln diese Zeiger in   Lisp Objekte zu verbessern   debuggability). Unsere Lisp Bilder sind   daher nur etwa 250 megs   "Arbeiten" Datenstrukturen und Code.

     

...

     

9 - Wir können auf einem 800-MHz-Feld 10 Sekunden Lisp Berechnung tun und Nachteile   weniger als 5K von Daten. Das ist weil   wir alle Datenstrukturen vorbelegt wir   müssen und sterben auf Abfragen, die nicht überschreiten   Sie. Dies kann viele Lisp machen   Programmierer erschaudern, aber mit einem 250 meg   Bild und Echtzeitbedingungen, wir   nicht leisten können, erzeugen Müll . Zum   Beispiel, anstatt Nachteile mit, wir   verwenden „Nachteile“, welche Zellen von einem packt   Array von 10 Millionen Zellen, die wir haben   vorreservierten und die zurückgesetzt wird   jede Abfrage.

Bearbeiten 3: (zur Vermeidung von Missverständnissen) ist GC besser als direkt mit Zeigern Hantieren? Die meiste Zeit, sicher, aber es gibt Alternativen zu sowohl . Gibt es eine Notwendigkeit, die Mühe Nutzer mit diesen Details? Ich sehe keine Anzeichen dafür, dass dies der Fall ist, neben einigen Marketing-Hype zu zerstreuen, wenn notwendig.

Ich bin mir ziemlich sicher, dass die grundlegende Interpretation lautet:

  • Managed = Ressourcenbereinigung durch Laufzeit (das heißt Garbage Collection) verwaltet
  • Unmanaged = aufzuräumen, nachdem sich (das heißt malloc & free)

vergleichen Vielleicht ist es mit in den Aktienmarkt zu investieren.

Sie können kaufen und verkaufen Aktien selbst, versuchen, ein Experte in werden, was das beste Risiko / Belohnung geben - oder Sie können in einen Fonds investieren, die von einem „Experten“ verwaltet wird, der es für Sie tun - bei der Kosten Sie verlieren eine gewisse Kontrolle und möglicherweise einige Provision. (Zugegeben ich bin eher ein Fan von Tracker-Fonds, und der Aktienmarkt „Experten“ haben nicht das Gelbe vom Ei getan vor kurzem, aber ....)

Hier ist meine Antwort:

Managed (.NET) oder Byte-Code (Java) werden Ihnen Zeit und Geld sparen.

Nun wollen wir vergleichen die beiden:

Unmanaged oder systemeigenen Code

Sie müssen Ihre eigenen Ressourcen (RAM / Speicher) Zuteilung und Bereinigung tun. Wenn Sie etwas vergessen, Sie am Ende mit dem, was ein „Memory Leak“ genannt wird, die den Computer zum Absturz bringen kann. Ein Speicherleck ist ein Begriff für, wenn eine Anwendung (auffressen) Ram / Memory beginnt mit, aber lassen sie nicht gehen, damit der Computer, wenn für andere Anwendungen nutzen kann; schließlich dies bewirkt, dass der Computer zum Absturz bringen.

Um Ihre Anwendung auf verschiedenen Betriebssystemen zu laufen (Mac OSX, Windows etc.) müssen Sie Ihren Code speziell für jedes Betriebssystem kompilieren, und möglicherweise eine Menge Code zu ändern, System arbeitet spezifisch, so dass es auf jeder arbeitet Betriebssystem.

.NET Managed-Code oder Java Byte-Code

Die gesamte Ressource (RAM / Speicher) Zuteilung und Bereinigung werden für Sie erledigt und die Gefahr der Schaffung von „Memory Leaks“ wird auf ein Minimum reduziert. Dies ermöglicht mehr Zeit, um Code verfügt, anstatt sie auf Ressourcen-Management zu verbringen.

Um Ihre Anwendung auf verschiedenen Betriebssystemen zu laufen (Mac OSX, Windows etc.) Sie nur einmal kompilieren, und es wird so lange auf jedem laufen, wie sie den gegebenen Rahmen unterstützen App sind Sie läuft auf der Oberseite ( .NET Framework / Mono oder Java).

Im Kurzen

Die Entwicklung des .NET Framework (Managed-Code) oder Java (Byte-Code) unter Verwendung macht es insgesamt billiger, eine Anwendung erstellen, die mehrere Betriebssysteme mit Leichtigkeit ausrichten können und mehr Zeit damit zu verbringen seinen Aufbau reiche Funktionen anstelle der banalen Aufgaben der Speicher / Ressourcenmanagement.

Auch bevor jemand darauf hinweist, dass das .NET Framework nicht mehrere Betriebssysteme nicht unterstützt, muß ich die technisch Windows 98 darauf hin, WinXP 32-bit, WinXP 64-bit, WinVista 32-bit, WinVista 64- Bit und Windows Server sind alle unterschiedlichen Betriebssysteme, aber die gleiche .NET App wird auf jedem Lauf. Und es gibt auch das Mono-Projekt , die .NET auf Linux und Mac OSX bringt.

Unmanaged Code ist eine Liste von Anweisungen für den Computer zu folgen. Managed Code ist eine Liste der Aufgaben für den Computer folgen, dass der Computer frei von sich aus zu interpretieren, wie sie zu erreichen.

Der große Unterschied ist die Speicherverwaltung. Mit nativer Code, müssen Sie Speicher selbst verwalten. Dies kann schwierig sein und ist die Ursache für eine Reihe von Fehlern und vieler Entwicklungszeit verbrachte diese Fehler aufzuspüren. Mit einem verwalteten Code, haben Sie immer noch Probleme, aber viel weniger von ihnen und sie sind leichter aufzuspüren. Dies bedeutet normalerweise weniger fehlerhafte Software und weniger Entwicklungszeit.

Es gibt noch andere Unterschiede, aber die Speicherverwaltung ist wahrscheinlich die größte.

Wenn sie immer noch daran interessiert waren, ich könnte erwähnen, wie viele Exploits aus dem Pufferüberschreitungen sind und dass Sie nicht bekommen, dass mit verwaltetem Code, oder dass die Wiederverwendung von Code ist jetzt einfach, oder dass wir nicht mehr haben mit COM beschäftigen (wenn man Glück hat sowieso). Ich würde wahrscheinlich Weg von COM bleiben sonst ich in eine Tirade starten würde über, wie schrecklich es ist.

Es ist wie der Unterschied zwischen dem Spielen Pool mit und ohne Stoßfänger entlang der Kanten. Es sei denn, Sie und alle anderen Spieler immer perfekte Aufnahmen machen, müssen Sie etwas die Kugeln auf dem Tisch zu halten. (Ignorieren vorsätzliche Querschläger ...)

Nutzen Sie Fußball mit Wänden statt Rande und Endlinien oder Baseball ohne Rücklaufsperre oder Hockey ohne Netz hinter dem Tor oder NASCAR ohne Barrieren oder Fußball ohne Helm ...)

"Der spezifische Begriff verwalteten Code ist besonders allgegenwärtig in der Microsoft-Welt."

Da ich in MacOS und Linux-Welt arbeiten, es ist nicht ein Begriff, den ich oder Begegnung verwenden.

Brad Abrams „ Was-Code ist Managed "Blog-Post hat eine Definition, die Dinge sagen wie" .NET Framework Common Language Runtime“.

Mein Punkt ist: es kann nicht sinnvoll sein, es die Bedingungen überhaupt zu erklären. Wenn es ein Fehler ist, hacken oder Work-around, es ist nicht sehr wichtig. Sicherlich nicht wichtig genug, um eine anspruchsvolle Laien Beschreibung aufzuarbeiten. Es kann mit der nächsten Version von einigen Charge von MS-Produkten verschwinden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top