@lanodan oui je pense que c'est comme ça qu'il faut le voir, mais ça m'a toujours fait rire de prendre le mot « équilibre » au sens littéral (= côté sombre et côté clair égaux)
[Nouvel article] Comment j'ai rejoint la communauté du bug 323
Attachez vos ceintures pour l'histoire d'un bug incompréhensible dont l'origine se trouve finalement directement dans une unité de calcul du processeur…
@tangeek baaaa… c'est une sacrée bonne remarque. Je sais pas pourquoi j'ai gardé ce réflexe de compiler du 32 bits pour Windows, mais en vrai y'a encore des gens qui ont besoin de ça ?
(Ceci étant dit, prenons le problème à l'envers : un bug de ce genre peut être révélateur d'un problème qu'on voit pas en 64 bits mais qui pourrait péter d'une autre manière, ça reste préférable de le comprendre 😛 )
@jenesuispasgoth yep, en vrai je suis devenu plus confiant sur mon rapport aux flottants depuis que j'ai bossé dans une boîte où on bossait sur des nombres exacts (avec ce genre de lib https://fr.wikipedia.org/wiki/GNU_MPFR ).
Pour le bug, je m'en rapproche, mais ça semble plutôt venir d'un souci avec un int/size_t mal branlé : ça plante en 32bits, mais pas en 64bits, oups 😛
@gugurumbe ben y'a pas de pointeurs utilisés tel quel dans le code… et avec mingw j'arriver ni à utiliser de sanitizer ni même de débuguer digne de ce nom, c'est un enfer.
(Et le code a tourné 20000 fois dans plein de cas différent *avec* address et undefined sanitizer sur Linux sans jamais se plaindre de que dalle…)
C'est pas mon bout de code le plus glorieux. Mais ça marche #TrueStory
(Non sans déc, j'essaierai quand même de trouver mieux, mais là j'crois qu'il est temps d'aller faire quelque chose de plus doux avant le dodo. Des bises)
Bon. Petit update si y'a des gens que ça intéresse.
Le bug ne se produit qu'avec mingw 32 bits, pas en 64 bits. Donc ça pue une conversion implicite int/int32_t/size_t/ptrdiff_t quelque part qui foire. Sauf que j'ai beau tourner et retourner le code, je trouve pas.
Donc je vais voir si je reproduis sur une Debian 32 bits : si oui, j'aurai un environnement de dév digne de ce nom pour débuguer (ne serait-ce qu'un sanitizer et un GDB) ; si pas de bug, j'abandonne, et fuck Windows 32 bits.
Là, j'en suis à un point où j'ai littéralement, dans le débugueur, l'endroit où un test est "vrai" mais le programme continue sur la branche "faux" (et les valeurs de test qui deviennent "optimized out", haha).
Avec GCC comme avec Clang comme avec Mingw. J'en suis à 7h sur ce bug, je me suis niqué quasi une journée de dév sur un planning déjà bien serré, je pense que je vais abandonner.
Vous vous souvenez de mon bug chelou (une comparaison qui déconne *uniquement en 32bits avec les optimisations activées*) dans le code Superflu Riteurnz qui m'a niqué 7 heures de boulot en avril dernier, sans que j'arrive à le résoudre ?
Ben là, j'avais une période creuse alors je me suis dit que j'allais m'y replonger, parce que j'aime pas abandonner un truc sans comprendre.
On progresse : j'ai réussi à réduire à un code de 50 lignes sans dépendance autre que la STL et qui déclenche le bug.
Spotify augmente ses tarifs, ça fait un peu chier.
Et en même temps, je crois que c'est la première fois que je reçois un mail où une entreprise m'informe clairement qu'elle « augmente » ses tarifs, et non que ses tarifs « évoluent ». Mine de rien, j'apprécie qu'on ne me prenne pas pour un con.
@aaribaud à la base, un algo de simplification de graph, qui marche bien partout sauf sur Win32 où ça plante.
Du coup j'affiche à chaque itération quel sommet est simplifié / quels arêtes supprimées ou ajoutées. Au départ, même chose sur Linux et Win32, mais au bout d'un moment ça diverge.
Du coup je veux afficher la valeur de priorité calculée pour voir qu'est-ce qui fait diverger le déroulé, et c'est ça qui fait disparaître le bug sur Win32.
Ça fait facile 1h30 que je tourne sur le bug le plus imbitable du monde. Un algo qui marche sans problème sur Linux mais pas sur Windows/MinGW. Enfin si. Sauf si j'active les optimisations.
Je compare le déroulé entre Linux et Windows : à un moment, je vois que la queue de priorité diverge (NON Y'A PAS DE JEU DE MOTS).
J'ajoute un affichage sur la fonction de comparaison. Le bug disparaît. Je retire l'affichage, il revient. C'est le bug de Schrodinger, j'vais péter un boulon.
Je ne sais pas si je suis le seul, mais que ça me gonfle, les indications temporelles relatives sur les sites web !
« Il y a 4 mois, il y a 2 ans », MAIS DONNE-MOI LA DATE MERDE, j'ai pas envie de faire des calculs ! Le pire c'est que plus c'est loin, moins c'est précis ! Genre là je regarde une vidéo « il y a 2 ans » : c'est quoi ? Mars 2021 ? Novembre 2020 ? Grmmpf.
Et encore, des fois tu peux avoir la date via l'infobulle, mais c'est même pas toujours le cas…
Gribouilleur, scribouillard, docteur en informatique (généraliste conventionné secteur 42), anar, irréaliste & irresponsable, compagnon de route de #Framasoft et de l'#April.