Erreurs, bugs, questions - page 1576
![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Je n'interviens pas. J'ai 26 ans de programmation non-stop à mon actif.
Les avertissements sont essentiellement des erreurs si l'on parle du secteur financier. Et les milliers de rapports de "perte de signe, perte de précision, perte de fantômes, etc. Apparemment, vous ne comprenez pas bien les implications.
Veuillez fournir sous une forme suffisamment complète le morceau de code que le compilateur a signalé comme une erreur.
Sans cela, toute cette discussion semble inesthétique et injuste.
Ok, Renat, ces arguments sur la "qualité du code" n'ont rien à voir avec le sujet de la discussion. Car nous ne parlons ici que de la compilabilité, c'est-à-dire de l'exploitabilité du code. Et la perte de précision, etc. - il s'agit d'une affaire personnelle du programmeur, c'est-à-dire de sa responsabilité. La conversion implicite, par exemple de int en short, n'est pas interdite par la norme linguistique, n'est-ce pas ? Alors pourquoi prêcher maintenant ?
OK, j'ai trouvé un de ces bugs :
que j'obtiens dans le journal :
CClass' - déclaration sans type TestScript.mq5 16 9
'CClass' - virgule attendue TestScript.mq5 16 9
Dans les versions précédentes, tout allait bien.
OK, Renat, ces arguments sur la "qualité du code" n'ont rien à voir avec le sujet de la discussion. Car nous ne parlons ici que de la compilabilité, c'est-à-dire de l'exploitabilité du code. Et la perte de précision, etc. - il s'agit d'une affaire personnelle du programmeur, c'est-à-dire de sa responsabilité. La conversion implicite, par exemple de int en short, n'est pas interdite par la norme linguistique, n'est-ce pas ? Alors pourquoi prêcher maintenant ?
OK, j'ai trouvé un de ces bugs :
que j'obtiens dans le journal :
Dans les versions précédentes, tout allait bien.
Oui, ce bug a déjà été discuté (probablement, avec l'A100) et corrigé le 4 mai. J'en ai trop fait avec le contrôle de la typographie, apparemment.
J'ai joint la dernière version de MetaEditor, build 1329, qui ne présente pas cette erreur. Veuillez le vérifier ici.
Le lancement de MT5 aura lieu le 12 mai.
C'était bien dans les versions précédentes.
Dans votre code, vous ne retournez pas un const-pointer vers un objet privé. Il s'avère que les fonctions tierces (en termes de visibilité des variables) peuvent modifier en apparence quelque chose qui ne devrait pas leur être accessible architecturalement, puisque le programmeur a spécifié private.
Chaque fois que je veux renvoyer un pointeur vers un objet privé, je dois nécessairement spécifier un modificateur const. Dans votre cas, je mettrais une déformation.
Je ne suis pas un oiseau de haut vol, alors je demande. Faut-il utiliser ce code quelque part ou est-ce que c'est juste paresseux de mettre const ?
Deux jours perdus pratiquement tout le temps (à mon âge c'est déjà beaucoup), et j'avais prévu de les utiliser d'une manière un peu différente.
Donc, une fois de plus, je tire mon chapeau à A100 pour sa patience. J'en suis moi-même fatigué, c'est plus facile pour moi de m'asseoir sur l'ancienne version, qui fonctionne bien, que de chercher les causes des bugs dans la nouvelle version, en travaillant sur le service-desk. Ou quelqu'un me paiera pour ce travail ?
Oui, servicedesk est une chose cool que les testeurs tiers peuvent faire gratuitement. Il est évident qu'il n'a pas été conçu pour cela, mais en fait, il est devenu exactement l'employeur des testeurs tiers travaillant gratuitement. Sans ces rapports de bogue, la compilation du compilateur aurait pris beaucoup plus de temps.
Tout le monde dira qu'il devrait y avoir une rétribution pour la découverte d'un bogue, comme c'est la pratique dans le monde. A100 devrait recevoir le salaire du testeur de l'État. Et apparemment un an de salaire de testeur.
Oui, cette erreur a déjà été discutée (peut-être avec l'A100) et corrigée dès le 4 mai. Ils ont exagéré le contrôle du type, apparemment.
J'ai joint le dernier MetaEditor build 1329 qui ne contient pas cette erreur. Veuillez le vérifier ici.
Le lancement de MT5 aura lieu le 12 mai.
Vérifié. Il n'y a presque pas d'erreurs de compilation maintenant, à l'exception de certaines merveilles étranges que je ne peux pas reproduire séparément du programme, mais que je parviens à contourner d'une manière aléatoire.
Voici un exemple de code de la zone problématique dont je vais vous parler. Là encore, il se compile bien séparément mais génère une erreur dans mon programme.
Si vous ajoutez une ligne dans la fonction Main à n'importe quel endroit (par exemple, après le retour) :
travail.Set(arr[0]) ;
il compile normalement.
Le programmeur semble être allé trop loin dans l'optimisation.
Et il y a aussi quelques pépins dans le temps d'exécution. Par exemple, j'assigne une valeur à un membre de la structure, mais il s'avère que la valeur qui s'y trouve est ancienne, c'est-à-dire que rien n'a été assigné. Si j'ajoute une ligne avec une opération arbitraire à proximité, tout devient normal. Ces bogues ont commencé depuis cette construction d'automne où vous avez optimisé le compilateur. Dans l'ensemble, tout est encore brut.
En outre, la compilation elle-même prend encore 20 secondes, alors que la build 1159 ne prenait que 1 à 2 secondes. En même temps, je ne remarque pas d'accélération significative de mes programmes, le gain est de l'ordre de 10 à 20 %. Vous pouvez donc oublier ces histoires de gain de vitesse de 2 à 10 fois. Peut-être que cela se produit avec des échantillons de test spécialement sélectionnés, mais nous avons de vraies applications, pas des fausses.
Au total, une compilation 10 à 20 fois plus lente pour une performance un peu plus élevée. À mon avis, cela n'en vaut pas la peine. Le temps perdu par le programmeur est bien plus précieux.
Je suis toujours obligé de rester sur la version 1159.
Dans votre code, vous ne retournez pas un const-pointer vers un objet privé. Il s'avère que les fonctions tierces (en termes de visibilité des variables) peuvent modifier en apparence quelque chose qui ne devrait pas leur être accessible architecturalement, puisque le programmeur a spécifié private.
Chaque fois que je veux renvoyer un pointeur vers un objet privé, je dois nécessairement spécifier un modificateur const. Dans votre cas, je mettrais une déformation.
Je ne suis pas un oiseau de haut vol, alors je demande. Faut-il utiliser ce code quelque part ou est-ce que c'est juste paresseux de mettre const ?
Je ne fais que cacher un tableau en privé alors que les objets CClass eux-mêmes sont disponibles à un utilisateur pour un accès complet, c'est le but. Si je n'en avais besoin que pour la lecture, je mettrais const.
Tous soutiendront qu'il devrait y avoir une rétribution pour la découverte d'un bogue, comme c'est la pratique dans le monde. A100 devrait recevoir un salaire de testeur d'état. Et apparemment un an de salaire de testeur.
Je ne sais pas s'il s'agit d'un bug ou simplement d'une mauvaise description des méthodes CDealInfoPositionId() etTicket(). J'ai écrit le code suivant
résultat
J'ai ajouté une requête pour l'historique des transactions en utilisant la fonctionHistorySelect().
résultat
Dans private, je ne cache que le tableau, et les objets CClass eux-mêmes sont disponibles à l'utilisateur pour un accès complet, c'est le but. Si j'avais besoin qu'il soit en lecture seule, je mettrais const.
Je vois. Pouvez-vous me dire dans quelles constructions cela peut être utile ? Je comprends qu'avec cette approche, vous ne pouvez rien faire avec le tableau lui-même (redimensionner, échanger des éléments, etc.). supprimer, cependant, peut être appliqué...
Je suppose que vous le faites quelque part avec un modèle, de sorte qu'il y ait la même syntaxe de l'opérateur [] pour différents types d'objets. D'une manière générale, pourriez-vous montrer l'utilisation de cette construction lorsque c'est opportun.
J'ai joint la dernière version de MetaEditor build 1329 qui n'a plus cette erreur. Veuillez vérifier.
La sortie de MT5 aura lieu le 12 mai.
Je suggère que les liens vers les dernières versions de metaeditor.exe et metaeditor64.exe soient postés en permanence, comme cela a été le cas pour mql.exe(http://files.metaquotes.net/metaquotes.software.corp/mt5/mql.exe) et mql64.exe, afin que chacun puisse télécharger et tester le compilateur sans attendre la sortie de la version.