Interessantes Thema für viele: was ist neu in MetaTrader 4 und MQL4 - große Änderungen auf dem Weg - Seite 10

 

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.

Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Виртуальные функции
Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Виртуальные функции
  • www.mql5.com
Основы языка / Объектно-ориентированное программирование / Виртуальные функции - Документация по MQL5
 
Renat:

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:

class CiCustom : public CIndicator : public CDoubleBuffer

                пользуется включением class CSeries : public CArrayObj который в свою очередь

                                                     пользуется включением class CArrayDouble : public CArray и

                                                                           class CArrayObj : public CArray ну и конечно куда как без

                                                                                  включения class CArray : public CObject который включает

                                                                                                           class CObject и #include "StdLibErr.mqh"

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.

 
Urain:

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.

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyBuffer - Документация по MQL5
 
Urain:

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.

Einverstanden. Eine sehr praktische Funktion.
C-4:
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.
Wir sind jetzt mindestens zu viert :)
 
Renat:
Leider nein. Das Testgerät bleibt single threaded und ohne MQL5 Cloud Network.
Wie steht es mit der Mehrwährungsfähigkeit?
 
In Mt4 wird die Ideologie des Testers die gleiche bleiben. Wir werden keine grundlegenden Änderungen vornehmen, zumindest nicht in naher Zukunft.
 
Renat:

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.

 
Laryx:

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.

Документация по MQL5: Основы языка / Функции
Документация по MQL5: Основы языка / Функции
  • www.mql5.com
Основы языка / Функции - Документация по MQL5
 

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.

 
Interesting:

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.

Während der Arbeit an den Objekten werden wir sehen.