La nouvelle syntaxe MQL4

 

Cela fait un moment que la bêta est sortie, et j'ai repéré une note quelque part, que la version régulière pourrait apparaître à la mi-janvier. Bien que je doute que cela se produise, peut-être que quelques codeurs pourraient avoir envie de partager leurs idées et les problèmes qu'ils ont rencontrés avec la bêta.

Est-il déjà utile de lancer une discussion sur la nouvelle syntaxe source de MQL4, l'éditeur, le compilateur, les modèles, la POO, ou tout ce qui s'y rapporte ?

S'il vous plaît, pas de rapports de bogues, pas de cris, seulement une discussion constructive dans ce sujet.

 

J'ai révélé que la directive #include est ignorée si elle est répétée.

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

fonctionne de la même manière que

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

Bien que ce comportement soit le bienvenu si vous avez des déclarations de classes dans des fichiers séparés, il n'est pas mentionné dans le fichier d'aide.

 

La nouvelle version semble être un peu plus rapide.

Les tableaux dynamiques set-as-series semblent se décaler automatiquement.

La surcharge defonctions offre un meilleur interfaçage que les commutateurs.

 
J'aimerais avoir un indice sur la façon de localiser la cause de la "fuite de mémoire". Existe-t-il une bonne pratique ?
 
Ovo: J'aimerais avoir un indice sur la façon de localiser la cause de la "fuite de mémoire". Existe-t-il une bonne pratique ?
S'agit-il d'une question de programmation générale, comme s'assurer de "supprimer la mémoire allouée dynamiquement" ou de "limiter l'utilisation des fonctions récursives" ? Ou faites-vous référence à un bug de fuite de mémoire dans la version bêta ?
 
ubzen:
S'agit-il d'une question de programmation générale telle que "supprimer la mémoire allouée dynamiquement" ou "limiter l'utilisation des fonctions récursives" ? Ou faites-vous référence à un bug de fuite de mémoire dans la version bêta ?


Définitivement la première question. Je n'ai pas d'expérience dans la gestion des références d'objets inutilisés, car mon expérience vient de JAVA. Je veux donc dire que j'apprécierais un indice pour trouver les objets perdus après avoir reçu le message d'avertissement générique (si un tel indice existe). Pour l'instant, j'essaie d'identifier la classe de l'objet fuité à partir du nombre d'octets que l'avertissement affiche.

 
Ovo: Définitivement la première. Je n'ai pas d'expérience dans la gestion des références d'objets inutilisés, car mon expérience vient de JAVA. Je veux donc dire que j'apprécierais un indice pour trouver les objets perdus après avoir reçu le message d'avertissement générique (si un tel indice existe). Pour l'instant, j'essaie d'identifier la classe de l'objet fuité à partir du nombre d'octets que l'avertissement affiche.

Il est incomplet par rapport à mt5. Il devrait y avoir une autre ligne qui indique le nom de la classe. J'espère qu'ils vont l'ajouter assez vite.

 

Eh bien, la chasse aux fuites s'est avérée être vraiment ennuyeuse... plus que je ne le pensais.

J'ai fait quelques efforts pour créer un outil mais je n'ai pas réussi du tout. Bien que j'aie découvert que je pouvais redéfinir les instructions new/delete, j'ai réalisé que je n'avais rien pour les remplacer. S'il s'agissait de fonctions avec des parenthèses, ce serait assez simple, mais malheureusement ce sont des instructions. Je pourrais créer un wrapper autour des instructions new/delete pour les enregistrer, mais ce serait une solution très pénible et sans avenir.

Si quelqu'un a de l'expérience pour détecter la source de la fuite, merci d'envoyer un message.

 
Ovo:<br / translate="no">

Eh bien, la chasse aux fuites s'est avérée être vraiment ennuyeuse... plus que je ne le pensais.

J'ai fait quelques efforts pour créer un outil mais je n'ai pas réussi du tout. Bien que j'aie découvert que je pouvais redéfinir les instructions new/delete, j'ai réalisé que je n'avais rien pour les remplacer. S'il s'agissait de fonctions avec des parenthèses, ce serait assez simple, mais malheureusement ce sont des instructions. Je pourrais créer un wrapper autour des instructions new/delete pour les enregistrer, mais ce serait une solution très pénible et sans avenir.

Si quelqu'un a de l'expérience dans la détection de la source de la fuite, merci de laisser un message.

Peut-être que ces articles (pour mql5 mais les mêmes s'appliquent à la nouvelle mql4) peuvent vous aider à trouver une solution :

L'ordre de création et de destruction des objets dans MQL5.

Utilisation des pointeurs d'objets dans MQL5
 
angevoyageur:

Peut-être que ces articles (pour mql5 mais les mêmes s'appliquent à la nouvelle mql4) peuvent vous aider à trouver une solution :

L'ordre de création et de destruction des objets dans MQL5.

Utilisation des pointeurs d'objets dans MQL5



Merci de votre remarque.

Malheureusement, il ne semble pas aider à traiter les fuites, il explique seulement pourquoi elles se produisent.

La seule solution que j'ai utilisée jusqu'à présent est de coder un test unitaire pour chaque morceau de code que je crée, et d'exécuter les tests unitaires fréquemment pendant le développement. Ainsi, si une fuite apparaît, je peux essayer d'isoler le testcase qui l'a provoquée. Cependant, certains tests sont assez complexes, donc ce n'est pas une solution facile pour l'objectif. Et l'éditeur est une vraie plaie.

 

Comment distinguer la nouvelle syntaxe ?

J'ai l'impression d'avoir besoin d'un mot différent pour faire référence à la syntaxe "à venir" et à la syntaxe "originale". Il semble que MQ ne se soucie pas des noms officiels et continue à prétendre qu'ils sont compatibles.

Il semble donc que nous devions trouver nous-mêmes des noms appropriés. Des suggestions ? MQL4 V2, OMQL4 (i.e. Object-), MQL4.1 ... ?