Erreurs, bugs, questions - page 1573

 
Renat Fatkhullin:

Il a probablement des fonctions géantes sous forme de bobines de texte.

L'optimiseur doit effectuer un grand nombre de passages sur ces fragments de code, en améliorant le code encore et encore. Il suffit de réduire la taille des fonctions pour que l'optimiseur augmente considérablement la vitesse.

Vous devez passer aux dernières versions, car nous améliorons constamment leur qualité et leur vitesse.

Il n'y a pas de fonctions géantes. 150 lignes tout au plus (ou est-ce compté comme tel ?). Et si vous y réfléchissez de cette façon, pourquoi la taille d'une fonction a-t-elle quelque chose à voir avec le fait que le compilateur essaie un tas de petites fonctions ? Supposons qu'il passe par la grande fonction 10 fois.Je la décompose donc en 5 petites fonctions et elle passe par chacune d'elles 2 fois. Nous obtenons le même résultat. Donc, la quantité totale de code est importante, n'est-ce pas ? Mais même si le résultat s'accélère un peu lorsque l'on décompose de grandes fonctions, et alors ? Nous parlons d'une compilation 10 ( !) fois plus lente.

Il est clair que vous voulez accélérer l'exécution du programme autant que possible, donc vous faites beaucoup de passes pour essayer d'améliorer quelque chose. Et plus vous compliquez le langage, plus ces passes seront longues, ce qui consommera le temps du programmeur. Et il y a une question naturelle sur l'efficacité de tout cela : de combien le programme est-il accéléré par votre optimisation par rapport au temps d'inactivité du programmeur qui attend que l'optimisation soit terminée ?

Bien sûr, vous pouvez essayer de trouver des compromis mais il est beaucoup plus efficace de faire différents modes de compilation comme je l'ai écrit ci-dessus. La version du programme avec toutes les optimisations n'est nécessaire qu'à la toute fin - 99% du temps des programmeurs est passé à écrire et déboguer le code alors qu'ils n'ont pas du tout besoin de vos optimisations.

 
Alexey Navoykov:

Combien de temps cela va-t-il durer, alors qu'à chaque fois que vous mettez à jour le build, le code ne compile plus ! Et s'il compile, il ne fonctionne pas de la même manière qu'avant (ce qui est encore pire). Qui a besoin d'un tel langage de programmation ?

...

Je ne sais pas ce que vous voulez dire. J'ai plusieurs projets très complexes en MQL avec plus de 20 000 000 de lignes de code. Les nouvelles constructions sont compilées en un rien de temps. Il n'y a eu que deux problèmes pendant tout ce temps. Une fois à cause de mon bug et l'autre fois à cause du bug du développeur.
 
Alexey Navoykov:

Un maximum de 150 lignes

Il s'agit d'une fonction très importante et incorrecte.
 
Vasiliy Sokolov:
Je ne sais pas ce que vous voulez dire. J'ai plusieurs projets très complexes en MQL avec un code de plus de 20 000 000 lignes. Les nouvelles constructions sont compilées en un rien de temps. Il n'y a eu que deux problèmes pendant tout ce temps. Une fois à cause de mon bug et l'autre fois à cause du bug du développeur.

Eh bien, vous avez de la chance. Votre code ne contient aucune des constructions de mon code. Qu'y a-t-il de si étrange ?

Parcourez les quelques pages de l'homme ci-dessus et vous verrez qu'il a également détecté de nombreux bogues dans la nouvelle version, dont certains sont difficiles à détecter. Pensez-vous qu'il les a recherchés exprès ?

 
Alexey Navoykov:

Eh bien, vous avez de la chance. Votre code ne contient aucune des constructions de mon code. Qu'y a-t-il de si étrange ?

Feuilletez les pages ci-dessus, l'homme qui s'y trouve a également détecté un certain nombre de bogues dans la nouvelle version, dont certains sont difficiles à détecter.

Démontrez un exemple de frein rejouable, s'il vous plaît.

Malheureusement, jusqu'à présent, vous faites des déclarations non fondées, y compris des attaques directes contre les développeurs.


Vous avez tort en ce qui concerne la taille des fonctions et la taille globale du programme. La taille des fonctions individuelles influe directement et de manière non linéaire sur l'optimisation de chaque fonction particulière en raison à la fois de l'augmentation de l'arbre syntaxique et de l'optimisation multi-pass. Les petites fonctions sont optimisées à la volée.

 
Alexey Navoykov:

Eh bien, vous avez de la chance. Votre code ne contient aucune des constructions de mon code. Qu'y a-t-il de si étrange ?

Feuilletez les pages ci-dessus, l'homme y a également repéré un certain nombre de bogues dans la nouvelle version, dont certains sont difficiles à attraper. Pensez-vous qu'il les a recherchés exprès ?

1) Je me demande quelles sont les constructions que vous avez utilisées et que mon code ne contient pas. La taille de mon code est de plusieurs milliers de lignes et vos constructions n'existent pas ? Ce doit être quelque chose de super unique.

2) En fait, il y avait une erreur interne du compilateur dans la version précédente qui se produit lorsque les classes sont liées les unes aux autres. C'était un bug des développeurs mais ils l'ont corrigé. Je ne me souviens pas d'autres erreurs.

 
Vasiliy Sokolov:

2) En fait, la version précédente comportait une erreur interne du compilateur qui se produit lorsque les classes sont liées entre elles. Il s'agit d'un bogue dans l'équipe de développement, mais il a été corrigé. Je ne me souviens pas d'autres erreurs.

https://www.mql5.com/ru/forum/1111/page1591#comment_2463820

Et où est la liaison mutuelle des classes entre elles ?

Je l'ai encore simplifié ici pour vous faciliter la recherche de références mutuelles et vous permettre de comprendre les constructions que vous n'utilisez pas.

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • www.mql5.com
Форум трейдеров
Dossiers :
Test114.mq5  2 kb
 
A100:

https://www.mql5.com/ru/forum/1111/page1591#comment_2463820

Et où est la référence mutuelle des classes les unes aux autres ici ?

Nous l'avons encore simplifié ici, pour vous faciliter la recherche de références réciproques et vous permettre de comprendre quelles sont les constructions que vous n'utilisez pas.

Vous faites de la rétro-ingénierie. Le travail est utile pour améliorer le compilateur, mais en termes de programmation pratique n'est pas applicable. Je ne connais pas un seul programmeur qui utiliserait le code que vous avez cité dans la pratique :

//+------------------------------------------------------------------+
//|                                                      Test116.mq5 |
//|                                                                  |
//+------------------------------------------------------------------+
bool is( const string type, bool )
{
        return ( type == "1" || type == "2" || type == "3" || type == NULL );
}
bool _is( string type ) { return is( type, false ); }
//+------------------------------------------------------------------+
template<typename T>
bool __is( T ) { return _is( typename( T )); }
//+------------------------------------------------------------------+
#define  IS( T )         __is( T(0))
//+------------------------------------------------------------------+
template<typename T>
int sh( T t )
{
        T tt = 0x1;
        for ( int i = 0; i < 4; i++, tt <<= 1 )
                if ( (t & tt) == tt )
                        return i;
        return -1;
}
//+------------------------------------------------------------------+
class D { public:
template<typename T1, typename T2>                                     
                        T2                              g( T1 t1, T2, int sh = -1 ); 
};                                                                     
template<typename T1, typename T2>                                     
T2 D::g( T1 t1, T2, int sh )
{                                                                      
        sh = sh( t1 );                                   
        T2 t2 = T2(t1) >> 1;
        return (sh( t1 ) & sh) == sh( t1 ) && IS( T2 ) ? 1 : 0;
}                                                                      
//+------------------------------------------------------------------+
class M : public D {
        virtual void f1() { g( 0, 0 ); }
};
//+------------------------------------------------------------------+
class A {};
void g( A* ) export {}
class B { public:
        void h() { A a; g( &a ); }
};
class C { public:
        void f() {}
};
void OnStart()
{
        C c;
        c.f();
}
//+------------------------------------------------------------------+
 
Renat Fatkhullin:

Montrez un exemple de frein reproductible, s'il vous plaît.

Malheureusement, jusqu'à présent, vous faites des déclarations non fondées, y compris des attaques directes contre les développeurs...

Je vous ai dit que c'est un grand projet, la taille totale de tout le code source est d'environ 1 Mb. Comment pouvez-vous démontrer les freins ? Envoyer tout le code ou quoi ? Vous comprenez que c'est impossible. Et la compilation des pièces individuelles, bien sûr, va beaucoup plus vite.

Et que voulez-vous dire par "affirmations non fondées" ? Que votre compilateur optimisant est beaucoup plus lent ? Et que vous ne vous en souciez pas beaucoup ? Qu'est-ce qui n'est pas fondé ici ?

Voici un lien vers une discussion datant d'octobre de l'année dernière, lorsque vous venez d'introduire cette optimisation globale : https://www.mql5.com/ru/forum/1111/page1424#comment_1981722.

L'homme écrit :

Un autre code - notez l'heure - elle a dû être multipliée par 20.

Et puis vous répondez :

C'est un nouveau compilateur optimisant pour MQL5 (il est absent dans MQL4).

Vous devez payer pour un meilleur code cible avec un temps de compilation plus long.

Mais vos réponses semblent suggérer que vous ne vous souciez que de la "meilleure qualité du code cible" et d'un mythique "gain de vitesse de 2 à 10 fois", même si je n'ai pas vu de tels gains de vitesse dans des projets réels.

Comme je l'ai dit plus haut, je n'ai pas pu le tester sur la dernière build (22 avril) car j'ai eu quelques bugs lors de la compilation. Mais je suppose que la vitesse de compilation y est aussi lente, car vous n'avez jamais annoncé l'accélération du compilateur dans la nouvelle build.

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • avis : 2
  • www.mql5.com
Форум трейдеров
 
Vasiliy Sokolov:

Vous faites de la rétro-ingénierie. Le travail est utile pour améliorer le compilateur, mais du point de vue de la programmation pratique n'est pas applicable. Je ne connais aucun programmeur qui utiliserait le code que vous avez donné dans la pratique :

Un "psychanalyste" ici me diagnostique, l'autre m'attribue la rétro-ingénierie.

Admettez simplement que vous êtes encore loin de mon niveau.

C'est de là que viennent les erreurs (si vous avez encore la capacité d'écouter et de ne pas penser pour les autres). Si le code est simplifié au centuple et impersonnel pour localiser une erreur abstraite, cela ne signifie pas qu'il est pratiquement inutile.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Erreurs, bogues, questions

Vladimir Pastushak, 2016.05.03 14:47

Si vous ne savez pas comment résoudre ce problème, vous risquez de le faire vous-même ou de ne pas savoir quoi en faire. Juste en passant, un programmeur expérimenté peut vérifier d'autres méthodes et moyens d'identifier un bogue commun.

D'ailleurs, c'est très bien qu'il y ait des programmeurs expérimentés qui peuvent trouver le bogue et vous en informer. Sinon, lorsque vous tombez sur un bogue, vous devez attendre longtemps pour le corriger. (Long = prochaine construction)

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • avis : 5
  • www.mql5.com
Форум трейдеров