Interessantes Thema für viele: was ist neu in MetaTrader 4 und MQL4 - große Änderungen auf dem Weg - Seite 10
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Vergessen Sie nicht, dass wir einen sehr guten Inliner im Einsatz haben, der viele kleine Funktionen entlastet, so dass es keine Geschwindigkeitseinbußen gibt.
Und in den meisten Fällen werden Aufrufe an virtuelle Funktionen über vtable zu direkten Aufrufen optimiert. Dies ist eine der wirksamen Methoden des Optimierers. In Verbindung mit mehrfachem Inlining können Sie damit komplexe mehrstufige Aufrufe fast vollständig eliminieren und den Code flach aussehen lassen.
Vergessen Sie nicht, dass wir einen sehr guten Inliner im Einsatz haben, der viele kleine Funktionen entlastet, so dass es keine Geschwindigkeitseinbußen gibt.
Und in den meisten Fällen werden Aufrufe an virtuelle Funktionen über vtable zu direkten Aufrufen optimiert. Dies ist eine der wirksamen Methoden des Optimierers. In Verbindung mit mehrfachem Inlining lassen sich so komplexe mehrstufige Aufrufe fast vollständig vermeiden und der Code wirkt flach.
:) lustig. Und niemand behauptet, dass der Compiler den Code perfekt optimiert, ich zeige meinem Freund nur, warum ich nicht vor SB in die Knie gehe.
Lassen Sie uns Beispiele anführen:
wird in der Praxis durch eine einfache Standardfunktion ersetzt
CopyBuffer(...);
Wir haben Kunst um der Kunst willen. Und so weiter bei jedem Element, das etwas tut (der Rest, wie Sie verstehen, wird geschrieben, damit die letzten Elemente funktionieren).
Ja, ich stimme der Vielseitigkeit zu, ja, ich stimme dem gut strukturierten Code zu (Sie können sagen, es ist ein Beispiel für die Analyse).
Aber was ist der Kern der Sache? Der Punkt ist, dass diese Bibliothek in erster Linie für den MQL5-Assistenten und als Tutorial für OOP benötigt wird.
Ich mache dem Genossen nur klar, warum ich vor der SB nicht umkippe.
Ja, ja, ich möchte noch einmal betonen, dass ich keine ernsthaften Einwände gegen eines Ihrer Argumente habe. Ein Streit darüber wäre eher religiös als objektiv.
Nun, nur zu Ihrem Beispiel, ich persönlich, und in MEINEM FALL, finde die erste Variante des Codes akzeptabler, wegen all dieser mehrstufigen Einschlüsse, die die Kompatibilität des Indikators mit allen Schnittstellen, angefangen von CObject bis hin zu CiCustom, gewährleisten.
Andererseits werden alle Zeitreihen und Indikatoren bei Bedarf erstellt, in einer einzigen Sammlung zusammengefasst und sind dann für alle Nutzer verfügbar. Und wenn wir einen Puffer nur einmal kopieren müssen, fragen wir uns, warum wir uns diese Mühe machen.
In einem einfachen Fall wäre es natürlich viel einfacher , CopyBuffer() zu verwenden.
Aber was ist, wenn wir ein Dutzend Benutzer eines bestimmten Puffers haben? In meinem Fall werden sie alle danach fragen, der Puffer wird erstellt und alle anderen erhalten einen Verweis darauf. Und wenn wir CopyBuffer() "direkt" verwenden, habe ich zehn Kopien anstelle von einer. Und wenn man CopyBuffer() geschickter einsetzt, kann man nachverfolgen, wer und welcher Puffer zugewiesen wurde, was der von Ihnen erwähnten Kapselung ziemlich kosteneffektiv entspricht.
Ich persönlich bin für Vernunft - es macht keinen Sinn, an einer einzigen Stelle eine große Sache aus OOP zu machen. Wenn wir viele Benutzer haben, rechtfertigt sich meiner Meinung nach der OOP-Ansatz.
Dann ist es an der Zeit, Ausnahmen einzuführen, damit ein Code sowohl für mql4 als auch für mql5 kompiliert werden kann.
Die Frage der Wiedervereinigung steht im Raum.
Ich dachte, dass bei der Zusammenführung zweier Sprachen bedingte Kompilierungsanweisungen wie #ifdef absolut notwendig sind - dies würde die Vereinheitlichung des Codes zwischen den beiden Plattformen vereinfachen, und die plattformabhängige API würde zur Kompilierungszeit definiert werden.
Leider nein. Das Testgerät bleibt single threaded und ohne MQL5 Cloud Network.
Vergessen Sie nicht, dass wir einen sehr guten Inliner im Einsatz haben, der viele kleine Funktionen entlastet, so dass es keine Geschwindigkeitseinbußen gibt.
Und in den meisten Fällen werden Aufrufe an virtuelle Funktionen über vtable zu direkten Aufrufen optimiert. Dies ist eine der wirksamen Methoden des Optimierers. In Verbindung mit mehrfachem Inlining können Sie so komplexe mehrstufige Aufrufe fast vollständig eliminieren und den Code flach aussehen lassen.
Ahhhh... Jetzt weiß ich, warum einer meiner häufigsten Fehler beim Schreiben eines Programms lautet: "Eine Funktion muss einen Körper haben".
Es ist der Inliner, der eine... Ich habe mich gefragt, warum ich dachte, dass ein Funktionskopf ausreicht, um ein Modul zu kompilieren, aber nein... Du brauchst einen Körper...
Das ist gut.
Ahhhh... Jetzt weiß ich, warum einer meiner häufigsten Fehler beim Schreiben eines Programms lautet: "Die Funktion muss einen Körper haben".
Es ist der Inliner, der eine... Ich habe mich gefragt, warum ich dachte, dass ein Funktionskopf ausreicht, um ein Modul zu kompilieren, aber nein... Du brauchst einen Körper...
Das ist richtig, aber es hat nichts mit dem Optimierer zu tun.
Wenn Sie den Prototyp einer Klassenfunktion beschrieben haben, muss der Rumpf vorhanden sein. Auch wenn er leer ist.
Renat, ich schlage vor, dass wir in MT4 die Sichtbarkeit der Positionen auf dem Chart nicht in den allgemeinen Parametern des Terminals, sondern separat für jeden Chart (wie es in MT5 gemacht wurde) steuern sollten.
Mein Antrag an den SR zu diesem Thema liegt nun schon seit zwei Monaten in der Warteschleife.
Renat, ich schlage vor, dass wir in MT4 die Sichtbarkeit der Positionen auf dem Chart nicht in den allgemeinen Parametern des Terminals, sondern separat für jeden Chart festlegen (wie es in MT5 gemacht wurde).
Mein Antrag an den SR zu diesem Thema liegt nun schon seit zwei Monaten in der Warteschleife.