Die neue MQL4-Syntax

 

Es ist schon eine Weile her, dass die Beta-Version veröffentlicht wurde, und ich habe irgendwo einen Hinweis entdeckt, dass die reguläre Version Mitte Januar erscheinen könnte. Obwohl ich bezweifle, dass es dazu kommen wird, haben vielleicht ein paar Programmierer Interesse daran, Ideen und Probleme, die sie mit der Beta gelernt haben, zu teilen.

Ist es schon sinnvoll, eine Diskussion über die neue MQL4-Source-Syntax, Editor, Compiler, Patterns, OOP oder was auch immer zu starten?

Bitte keine Fehlerberichte, kein Geschrei, nur konstruktive Diskussionen in diesem Thema.

 

Ich habe festgestellt, dass die #include-Direktive bei Wiederholung ignoriert wird, d. h.

int OnStart() {
#include <dummy.mqh>
#include <dummy.mqh>
#include <dummy.mqh>
#include <dummy.mqh>
}

funktioniert genauso wie

int OnStart() {
#include <dummy.mqh>
}

Obwohl es ein sehr willkommenes Verhalten ist, wenn Sie Klassendeklarationen in separaten Dateien haben, wird es in der Hilfedatei nicht erwähnt.

 

Die neue Version scheint ein wenig schneller zu sein.

Dynamische Arrays, die als Serie gesetzt werden, scheinen sich automatisch zu verschieben.

Function Overloading bietet eine bessere Schnittstelle als Switches.

 
Ich würde mich über einen Hinweis freuen, wie ich die Ursache für den "ausgelaufenen Speicher" finden kann. Gibt es eine gute Praxis?
 
Ovo: Ich würde mich über einen Hinweis freuen, wie ich die Ursache für den "ausgelaufenen Speicher" finden kann. Gibt es eine gute Praxis?
Stellen Sie eine allgemeine Frage zur Programmierung, z. B. "Löschen Sie dynamisch zugewiesenen Speicher" || "Begrenzen Sie die Verwendung rekursiver Funktionen". Oder beziehen Sie sich auf ein Speicherleck in der Beta-Version?
 
ubzen:
Stellen Sie eine allgemeine Programmierfrage wie "Löschen Sie dynamisch zugewiesenen Speicher" || "Begrenzen Sie die Verwendung rekursiver Funktionen". Oder beziehen Sie sich auf ein Speicherleck in der Beta-Version?


Eindeutig ersteres. Ich habe keine Erfahrung mit dem Umgang mit ungenutzten Objektreferenzen, da mein Hintergrund aus JAVA stammt. Ich meine also, dass ich einen Hinweis zum Auffinden von ausgelaufenen Objekten zu schätzen weiß, nachdem ich die allgemeine Warnmeldung erhalten habe (falls ein solcher Hinweis existiert). Im Moment versuche ich, die Klasse des ausgelaufenen Objekts anhand der Anzahl der Bytes, die die Warnung ausgibt, zu identifizieren.

 
Ovo: Auf jeden Fall die erste Zeile. Ich habe keine Erfahrung damit, mich um unbenutzte Objektreferenzen zu kümmern, da mein Hintergrund aus JAVA stammt. Ich meine also, dass ich einen Hinweis zum Auffinden von ausgelaufenen Objekten zu schätzen weiß, nachdem ich die allgemeine Warnmeldung erhalten habe (falls ein solcher Hinweis existiert). Im Moment versuche ich, die Klasse des ausgelaufenen Objekts anhand der Anzahl der Bytes, die die Warnung ausgibt, zu identifizieren.

Es ist unvollständig im Vergleich zu mt5. Es sollte eine weitere Zeile geben, die den Namen der Klasse sagt. Hoffentlich fügen sie das bald genug hinzu.

 

Nun, die Lecksuche erwies sich als wirklich lästig... mehr als ich erwartet hatte.

Ich habe mir einige Mühe gegeben, ein Werkzeug zu erstellen, aber es ist mir nicht gelungen. Ich habe zwar herausgefunden, dass ich die new/delete-Anweisungen umdefinieren kann, aber ich habe festgestellt, dass ich nichts habe, womit ich sie ersetzen könnte. Wenn es sich um Funktionen mit Klammern handeln würde, wäre es ganz einfach, aber leider sind es Anweisungen. Ich könnte einen Wrapper um die new/delete-Anweisungen erstellen, um sie zu registrieren, aber das wäre eine sehr mühsame Lösung, die keine Zukunft hat.

Wenn jemand Erfahrung damit hat, wie man die Quelle des Lecks aufspüren kann, bitte ich um eine kurze Mitteilung.

 
Ovo:<br / translate="no">

Nun, die Lecksuche erwies sich als wirklich lästig... mehr als ich erwartet hatte.

Ich habe mir einige Mühe gegeben, ein Werkzeug zu erstellen, aber es ist mir nicht gelungen. Ich habe zwar herausgefunden, dass ich die new/delete-Anweisungen umdefinieren kann, aber ich habe festgestellt, dass ich nichts habe, womit ich sie ersetzen könnte. Wenn es sich um Funktionen mit Klammern handeln würde, wäre es ganz einfach, aber leider sind es Anweisungen. Ich könnte einen Wrapper um die new/delete-Anweisungen erstellen, um sie zu registrieren, aber das wäre eine sehr mühsame Lösung, die keine Zukunft hat.

Wenn jemand Erfahrung damit hat, wie man die Quelle des Lecks aufspüren kann, bitte ich um eine kurze Nachricht.

Vielleicht können diese Artikel (für mql5, aber das Gleiche gilt für das neue mql4) helfen, eine Lösung zu finden:

Die Reihenfolge der Objekterzeugung und -zerstörung in MQL5

Die Verwendung der Objektzeiger in MQL5
 
angevoyageur:

Vielleicht können diese Artikel (für mql5, aber das gleiche gilt für das neue mql4) Ihnen helfen, eine Lösung zu finden:

Die Reihenfolge der Objekterzeugung und -zerstörung in MQL5

Verwendung der Objektzeiger in MQL5



Vielen Dank für Ihren Hinweis.

Leider scheint er bei der Behandlung von Lecks nicht zu helfen, er erklärt nur, warum sie auftreten.

Die einzige Lösung, die ich bisher verwendet habe, ist die Programmierung eines Unit-Tests für jedes Stück Code, das ich erstelle, und die regelmäßige Durchführung von Unit-Tests während der Entwicklung. Wenn also ein Leck auftritt, kann ich versuchen, den Testfall zu isolieren, der es verursacht hat. Allerdings sind einige Tests ziemlich komplex, so dass es keine einfache Lösung für diesen Zweck ist. Und der Editor ist eine echte Qual.

 

Wie kann man die neue Syntax unterscheiden?

Ich habe das Gefühl, dass ich ein anderes Wort brauche, um die "neue" Syntax und die "ursprüngliche" Syntax zu bezeichnen. Es scheint, dass MQ sich nicht um offizielle Namen kümmert und weiterhin so tut, als seien sie kompatibel.

Es sieht also so aus, als müssten wir selbst geeignete Namen finden. Irgendwelche Vorschläge? MQL4 V2, OMQL4 (d.h. Object-), MQL4.1 ...?

Grund der Beschwerde: