Un résultat vraiment étonnant ! !! - page 6

 
Reshetov писал(а) >>

Clive Sinclair a développé l'ordinateur personnel bon marché ZX-Spectrum. Après que la première version a été vendue en grande quantité, il a été découvert que les développeurs avaient des tas de bugs dans la ROM. Ils ont donc pris la décision de documenter les bogues au lieu de les corriger pour les rendre entièrement compatibles avec les versions précédentes. Et la décision s'est avérée juste, car les bogues ont ensuite été utilisés pour protéger le logiciel de ce même ordinateur contre le piratage.


Je pense que le bug décrit dans ce fil de discussion peut également être conservé et utilisé pour protéger les Expert Advisors, c'est-à-dire pour insérer une condition incorrecte du point de vue de la logique, par exemple pour vérifier la date d'expiration. Et que ceux qui décompilent deviennent fous.

La discussion de cette erreur, je l'espère, motivera les développeurs de MQL5 à la corriger. Je vais devoir réécrire tous les programmes en MQL5 de toute façon.

 
nen >> :

Nous espérons que la discussion sur cette erreur incitera les développeurs de MQL5 à la corriger. Je vais devoir réécrire tous les programmes en MQL5 de toute façon.

Une preuve que c'est une erreur, allons-y !

En fait, c'est une déclaration contraire :


Les lois fondamentales de l'algèbre de Boole

Deux formules d'algèbre booléenne sont équivalentes si les fonctions qui leur sont assignées sont égales (c'est-à-dire qu'elles prennent les mêmes valeurs sur tous les ensembles de valeurs d'arguments). Vous trouverez ci-dessous les lois de base de l'algèbre de Boole qui permettent des transformations identiques des formules d'algèbre de Boole (notez à quel point elles sont similaires aux lois de l'arithmétique classique) :

  1. la loi de la double négation : pas x = x
  2. la loi de la commutativité (le résultat ne change pas en raison de la permutation des arguments) :
    x 1 ou x 2 = x 2 ou x 1
    x 1 et x 2 = x 2 et x 1

  3. La loi de l'associativité (l'ordre des calculs)
    x 1 ou (x 2 ou x 3 ) = (x 1 ou x 2 ) ou x 3
    x 1 et (x 2 et x 3 ) = (x 1 et x 2 ) et x 3

  4. la loi de la distributivité (ouverture des parenthèses) :
    x 1 ou (x 2 et x 3 ) = (x 1 ou x 2 ) et (x 1 ou x 3 )
    x 1 et (x 2 ou x 3 ) = (x 1 et x 2 ) ou (x 1 et x 3 )
  5. ...

Il en découle que du point de vue de l'algèbre de Boole, les opérations ou et ont la même priorité.

 
Ce n'est pas une erreur. C'est une putain d'erreur.
 
TheXpert писал(а) >>

la loi de la distributivité (parenthèse ouvrante) :
x 1 ou (x 2 et x 3 ) = (x 1 ou x 2 ) et (x 1 ou x 3 )
x 1 et (x 2 ou x 3 ) = (x 1 et x 2 ) ou (x 1 et x 3 )

Il s'ensuit que du point de vue de l'algèbre de Boole, les opérations et et ont la même priorité.

Ne soyez pas méchant. Votre exemple diffère de celui qui a lancé la discussion. Regardez de plus près.

 
keekkenen писал(а) >>

En fait, ce n'est pas un sujet pour un programmeur, car la spécification de chaque langage vient en premier et il importe peu qu'il existe d'autres normes quelque part...

et une norme unique est une chimère, vous savez.

Je pense que c'est l'idée la plus adéquate.

Chaque langue a ses propres normes. Par exemple, le C++ et le Pascal ont des règles différentes pour le calcul des nombres entiers. Dans certaines langues, les index commencent par 0, tandis que dans d'autres, ils commencent par 1. Je pense que tout cela n'a aucune importance.

Ce qui importe, c'est une mauvaise interprétation des lois de la nature, c'est-à-dire des lois qui échappent au contrôle de l'homme. Et les règles et les lois créées par les humains sont la prérogative de leurs créateurs. Dans ce cas, il importe seulement que les lois soient promulguées ; dans ce cas, les règles sont publiées.

Concentrons-nous plutôt sur le domaine appliqué :)

 

Messieurs, à la page deux de ce fil, j'ai donné un lien et une citation de la documentation - Priorités et ordre des opérations. Je vais vous le redonner sous une forme condensée :

Attention : la priorité des opérations en MQL4 diffère légèrement de celle en C.


Par conséquent, il est incorrect de parler de bogue.

 

Cela me rappelle l'humour de Zadornov "Qu'est-ce que deux plus deux fois deux". Une bonne illustration du débat religieux sur la priorité. Et en général, le sujet est la barbe, vous auriez pu utiliser la recherche du site - au lieu de créer un nouveau fil.

P.S. Eh, MuruFigi l'ennemi, et pourquoi tu as piégé Pak ...

 
Mathemat писал(а) >>

Le sujet a une barbe, vous auriez pu utiliser la recherche du site au lieu de créer un nouveau fil.

Le sujet restera d'actualité. Les développeurs semblent l'apprécier.

Le prochain programmeur "débutant" se tapera la tête contre le sujet... Et tout se répétera (hee-hee).

Et elle ne sort pas de nulle part.

Les développeurs ont décidé de recycler tout le monde à leur manière...

Ce sera un thème éternel... Jusqu'à ce que l'autre bout de la ligne soit fatigué de.... persister

 
Mathemat писал(а) >>

Débats religieux sur la priorité

La coutume ici est de faire un produit incliné avec des mains croches qui poussent à %, mais tout le monde se tait parce qu'il n'y a pas d'autre produit ... ou il y en a un, mais il vaudrait mieux ne pas l'être ;))

..

Un simple exemple "à moi", lors de l'utilisation de if() apparaît souvent un bug - lors de la combinaison de && et d'une série de conditions >/</!=, ce qui est très étrange,

vous copiez la chaîne Comment() pour examen - 1, 1, 1, 1, 1, etc - tout est OK, mais if() ne "fonctionne" pas, vous faites un "escalier" if() { if() { if() { ... }}}

tout fonctionne ... un problème de métacompilation je pense, ... et quoi, les développeurs pensent-ils qu'ils vont être intimidés et prouver, ... hehe

 
Rosh писал(а) >>

Messieurs, à la page deux de ce fil, j'ai donné un lien et une citation de la documentation - Priorités et ordre des opérations. Je vais vous le redonner sous une forme condensée :

Attention : la priorité des opérations en MQL4 diffère légèrement de celle en C.

Par conséquent, il est incorrect de parler de bogue.

Eh bien, j'étais en quelque sorte d'accord sur la deuxième page que si c'était un bug dans le compilateur, nous devrions parler d'un bug dans l'esprit du développeur. Ne le prenez pas mal, j'ai créé ce fil de discussion plutôt pour m'amuser.

Ce que je ne comprends pas maintenant, c'est ceci.

Sur quoi le compilateur MQL est-il développé ? S'il est développé dans un langage normal, les programmeurs ont dû être rendus fous par le fait que les opérations de multiplication et d'addition ont la même priorité. Comment ont-ils pu le manquer ? Est-ce que tout le monde met vraiment des parenthèses où il veut et où il ne veut pas ? D'ailleurs, trop de parenthèses rendent le code plus clair. Et lorsque vos programmeurs écrivent des opérations arithmétiques comme 2+3*4, ils écrivent également 2+(3*4), ou Dieu nous en préserve, un bug peut se glisser dans un compilateur C++ et l'imbrication de 100 parenthèses dans une expression est comptée manuellement :)