Frage

Die Viererbande Designmuster verwendet ein Textverarbeitungsprogramm als Beispiel für zumindest einige ihrer Muster, insbesondere Composite und Flyweight.

Könnten Sie diese Muster und den damit verbundenen objektorientierten Overhead, anders als mit C oder C++, wirklich nutzen, um ein leistungsstarkes, voll funktionsfähiges Textverarbeitungsprogramm zu schreiben?

Ich weiß, dass Eclipse in Java geschrieben ist, aber ich habe es nicht oft verwendet, daher weiß ich nicht, ob es so schnell oder so ausgefeilt ist wie etwas wie Visual Studio, das über ein C++-basiertes Textbearbeitungssystem verfügt.


Ich habe nur C++ und Java als Beispiele verwendet.Die Frage hat eher mit dem Mehraufwand zu tun, der entsteht, wenn viele Objekte im Arbeitsspeicher gespeichert sind, wie man es in einer Anwendung wie einem Textverarbeitungsprogramm oder sogar einem Spiel tun würde.

Entwurfsmuster fördern die Abstraktion auf Kosten der Sparsamkeit, auch wenn sie normalerweise darauf hinweisen, wann Sie möglicherweise einen Leistungseinbruch erleiden.Textverarbeitungsprogramme und insbesondere Spiele profitieren am meisten davon, so nah wie möglich am Metall zu sein.

Ich habe mich nur gefragt, ob jemand ein schnelles objektorientiertes Textverarbeitungsprogramm oder einen Texteditor kennt, der nicht in C++ geschrieben ist, und ob er eines mit Mustern erstellen würde oder auf das Abstrahieren von Dingen weitgehend verzichten würde?

War es hilfreich?

Lösung

Flyweight ist eigentlich nur eine Möglichkeit, Ressourcen in Situationen zu sparen, in denen es Tausende von Objekten mit intrinsischem gemeinsamen Zustand gibt, sodass es in höheren Programmiersprachen als C/C++ nützlich sein könnte.Vielleicht war das Beispiel der GoF mit Glyphen in einem Dokument nicht die beste Wahl, um dieses Muster zu veranschaulichen.

Ich denke jedoch, dass es bei der Erstellung eines leistungsstarken Textverarbeitungsprogramms um viel mehr geht als nur um diese Grundmuster. Ich bin mir nicht sicher, ob es irgendetwas in GoF gibt, das die erfolgreiche Durchführung dieser Aufgabe ausschließt.

Im Allgemeinen ist Visual Studio (VS) fortschrittlicher und bietet eine deutlich bessere Leistung als Eclipse – zumindest die Versionen von VS, die ich gesehen habe.Eclipse ist jedoch eine der beeindruckendsten Java-Anwendungen überhaupt, sie läuft recht gut auf neueren Rechnern mit viel RAM.

Andere Tipps

Also, Fliegengewicht ist ein lächerliches Muster für die Verwendung in einem Textverarbeitungsprogramm.IIRC, sie hatten, dass jedes Zeichen als Objekt referenziert wurde [Anmerkung:es war für jeden Glyphe, was immer noch verrückt ist, weil Ihr Betriebssystem das gerne für Sie zeichnet].Da ein Zeiger breiter als ein Zeichen ist und die gesamte Verarbeitung mit der Indirektion verbunden ist, wäre es verrückt, dieses spezielle Muster in einem Textverarbeitungsprogramm auf diese Weise zu verwenden.

Wenn Sie sich für das Design von Textverarbeitungsprogrammen interessieren, habe ich einen Artikel gefunden, der sich nicht mit Mustern befasst, sondern sich mit einigen davon befasst Datenstrukturen, die dem Design von Textverarbeitungsprogrammen zugrunde liegen, und Designüberlegungen.

Denken Sie daran, dass Designmuster dazu da sind, Ihnen das Leben zu erleichtern, und nicht dazu, dass Sie rein bleiben.Es muss einen Grund geben, ein Muster zu verwenden, es muss einen Nutzen bieten.

Der Sinn von GoF und Mustern im Allgemeinen besteht darin, darüber zu sprechen, wie man Dinge „richtig“, also richtig, macht, nicht unbedingt „richtig“, also richtig für die Umstände.Wenn die Leistung ein Problem darstellt und Sie feststellen, dass kein benanntes Muster eine angemessene Leistung bietet, dann können Sie es vielleicht rechtfertigen, Ihren eigenen Weg zu gehen.Aber eine gute Kenntnis der Muster gibt Ihnen einen „vernünftigen Standard“ und wird wahrscheinlich bedeuten, dass Sie nur so viel auf Klarheit/SoC/usw. verzichten, wie nötig ist, um eine angemessene Leistung zu erzielen.

Das Gefühl, dass Sie von der Norm „abweichen“, ermutigt Sie, a) zweimal nachzudenken und b) den nicht idiomatischen Code gut zu kommentieren.

Muster sind lebenswichtiges Wissen, aber nichts ist Evangelium und Sie müssen immer ein Urteilsvermögen anwenden.

Abgesehen davon kann ich mir keinen Grund vorstellen, warum man nicht einen anständigen Texteditor mit Mustern und einem modernen JDK schreiben könnte

Sie müssen sich unter anderem daran erinnern, dass das GoF-Buch in den frühen 90er Jahren geschrieben wurde, als die vorherrschenden Betriebssysteme nicht über umfangreiche Grafikbibliotheken verfügten.Selbst Windows war damals noch kein Betriebssystem.

IIRC GoF wurde 1994 veröffentlicht.Schon 1994 war Windows 95 Beta verfügbar (und lief auf meinem 486DX33) und Windows 3.x gab es seit etwa 1990.

Eclipse + Netbeans + IntelliJ sind alle so ziemlich alle in Java oder geschrieben etwas das auf der JVM (nicht C++) läuft.In mindestens zwei dieser IDEs habe ich einige Zeit mit dem Editorcode verbracht, daher kann ich Ihnen versichern, dass es sich ausschließlich um Java handelt (und es auch nicht einfach ist).

VS 2005 war meine letzte Erfahrung mit Visual Studio, und selbst damals dachte ich, dass Eclipse viel reaktionsschneller sei (IntelliJ hat doppelt so viel Zeit zum Aufwärmen und Indexieren).

Ich bin mir nicht sicher, inwiefern das relevant ist, aber das ist meine Erfahrung.Aber ich bin überrascht, dass Visual Studio heute noch in C++ geschrieben ist – ich würde denken, dass es im Interesse von Microsoft wäre, C# zu verwenden – wenn nichts anderes, würde es seine Leistung wirklich stark steigern, nichts geht über das Essen Ihres eigenen Hundefutters!

Ja, aktuelle Maschinen sind schnell genug und verfügen über genügend Speicher, um dies zu ermöglichen.Schaut man sich Squeak an, sieht man eine in Smalltalk geschriebene Smalltalk-IDE, deutlich langsamer als Java, aber immer noch schnell genug.Bei der HD-Videobearbeitung hingegen ist derzeit eine Unterstützung auf niedrigerem Niveau erforderlich.

Bei dieser Frage scheint es tatsächlich um Java vs.C++-Leistung, und dabei geht es weniger um die Objektorientierung als vielmehr um die Ausführung auf einer virtuellen Maschine mit Garbage Collection und dergleichen.

Dieses Whitepaper auf Java vs.Die Leistung von C++ könnte eine Lektüre wert sein.

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