4590

"Le typage dynamique c'est intuitif", qu'ils disaient tongue
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

4591

https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
La méthode sort() trie les éléments d'un tableau, dans ce même tableau, et renvoie le tableau. Par défaut, le tri s'effectue sur les éléments du tableau convertis en chaînes de caractères et triées selon les valeurs des unités de code UTF-16 des caractères.

en même temps le type des variables du tableaux étant possiblement différents c'est la seule manière logique de faire sans devoir au préalable analyser chaque type et lancer une fonction de comparaison dédié ..

et bien sur arr.sort(fonctionComparaison) existe aussi smile
et la le mec il le pécho par le bras et il lui dit '

4592

Tellement intuitif et logique.

Je me demande bien comment font les langages tel que Python et Lua pour rester dans l'interpreter avec typage dynamique.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

4593

Simple : ça plante quand ce n’est pas faisable.
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

4594

Tu veux dire plutot que ca te gueule dessus
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

4595

1 > rtfm plutôt que présumer

2 > https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray
le sort sera comme tu l'attend et au passage bien plus rapide
sinon : arr.sort((a, b) => a - b);

3 > https://portingguide.readthedocs.io/en/latest/comparisons.html
python n'autorise visiblement pas la comparaison de liste de types hétérogènes, mais dans ce cas précis ça fonctionnera
l'api js à plutôt choisis de ne pas remonter d'erreur et rester générique

après python autorise (plébiscite ?) également une fonction de comparaison ...
et la le mec il le pécho par le bras et il lui dit '

4596

Tu as raison, défends les choix idiots du javascript
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

4597

Ben comme tout choix, c'est défendable à un certain point de vue...

4598

Ça revient à accepter de faire quelque chose qui n'a aucun sens et donc certainement pas désiré par le développeur plutôt que de lui faire remarquer.
C'est le bon plan pour avoir des bugs qui traînent pendant des années…
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

4599

c'est loin d'être faux,

mais d'un coté ce n'est pas parse-que le langage est interprété qu'il doit maintenir un état de l'intégralité des types contenus dans le tableau en vue d'un éventuel sort,
si sort parse au préalable tout le tableau pour checker les types ça ne m'irais pas non plus, et checker chaque type à chaque comparaison ouvre des soucis éventuels de sécurité en plus de la perte de temps cpu ..

mais sort est un cas à part, ici le tableau est composé d'entier donc on s'attend à un tri numérique car on regarde le cas avec nos yeux d'humain mais ce n'est pas si simple et il n'y a pas de solution générique passe partout
en php il y à un flag pour spécifier le type de comparaison, qsort du C oblige à fournir une fonction de comparaison .. après chaque api à fait un choix par défaut, pertinent ou non ..
c'est au dev de faire gaffe un minimum sans présumer même si la chose parait pourtant triviale et évidente comme ici
et la le mec il le pécho par le bras et il lui dit '

4600

quand lua voit un nombre il le garde nombre, il essaye pas d'en faire une string

aussi, lua n'a pas de librairie kilométrique, les tableaux n'existent pas vraiment, ce sont des dictionnaires, donc une fonction sort() devrait avoir une spec beaucoup plus précise qu'en js.

4601

squalyl: je sais l'idée c'est que d'autre langages sans typage explicite y arrivent.

Javascript est plein de trucs bizzare du meme genre, et la c'est quand meme enormel.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

4602

oui, c'est vraiment trèstrèsnorme, je suis d'accord.

4603

minimaxir/big-list-of-naughty-stringsGitHubThe Big List of Naughty Strings is a list of strings which have a high probability of causing issues when used as user-input data. - minimaxir/big-list-of-naughty-strings

Ça peut être utile, et le contenu est intéressant smile
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

4604

En Python, il y a Hypothesis qui permet entre autres de faire ça.

Par exemple, si je viens de coder des fonctions pour encoder et décoder du texte, telles que l'une est l'inverse de l'autre, je peux les tester avec plein de chaînes pertinentes (chaîne vide, caractères bizarres, etc.) et en plus hypothesis essaiera d'isoler ce qui provoque l'erreur :

from hypothesis import given, strategies @given(strategies.text()) def test_decode_inverts_encode(s): assert decode(encode(s)) == s
Il y a des équivalents pour les nombres également (puissances de 0, infinis, NaN, etc.). C'est parfois fort pratique oui
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

4605

Intéressant smile
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

4606

Oui, ça peut éviter pas mal de pièges bêtes smile
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

4607

C'est voisin du property-based testing non ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

4608

En pratique, oui, mais je n'ai pas l'impression que ça soit vraiment théorisé.
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

4609



(il a d'autre vidéos amusantes sur sa chaîne smile)
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

4610

flanker (./4608) :
En pratique, oui, mais je n'ai pas l'impression que ça soit vraiment théorisé.
Bon je viens de chercher la doc de Hypothesis et la page d'accueil dit "This is often called property-based testing" donc a priori oui, c'est assez voisin grin (on a un collègue qui est fan et qui maintient une lib open-source de property-based testing, c'est par là que j'en ai entendu parler smile)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

4611

En tout cas, en pratique c'est dur à utiliser réellement (autrement que des cas simplistes).
Par contre, c'est facile à utiliser sans réellement vérifier de propriété, simplement pour voir si ça crashe ou pas.
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

4612

Une question tres interessante et au resultat ... hmm.. surprenant:



Essayez de répondre avant de tester/regarder ce qui se passe. Le résultat pourrais vous surprendre!
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

4613

Théoriquement, tout ce que le compilateur veux bien te sortir vu que qu'il y a un underflow ce qui est undefined behavior . Ensuite on compare des types de taille différente, Il y a fort a parier que ça peux varier en fonction des compilateurs et des architectures.
C'est ce que j'aime bien dans le Rust, on a pas ce genre de surprise. Le compilateur va juste refuser de te compiler ça.
avatar

4614

Et non. Vu comment ce comporte chacun des compilateur c’est clairement défini par le language.

Le C n’est pas un langage ésotérique où chacun fait sa popote et croise les doigts pour que ça marche. Il y a une norme derrière, imparfaite oué, mais beaucoup plus que ce que certains peuvent penser y est défini et en l’occurrence le comportement ici est de ce que je peux en lire clairement défini. Pas intuitif peut être au premier abords, mais défini.
Dépendre de l’architecture n’est pas quelque chose d’indéfini.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

4615

Godzil (./4614) :
Et non. Vu comment ce comporte chacun des compilateur c’est clairement défini par le language.

Le C n’est pas un langage ésotérique où chacun fait sa popote et croise les doigts pour que ça marche. Il y a une norme derrière, imparfaite oué, mais beaucoup plus que ce que certains peuvent penser y est défini et en l’occurrence le comportement ici est de ce que je peux en lire clairement défini. Pas intuitif peut être au premier abords, mais défini.
Dépendre de l’architecture n’est pas quelque chose d’indéfini.
et donc, vu que tu maitrises si bien cette norme, ça donne quoi ?
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

4616

Il y a en effet une norme avec des cas explicitement non defini que tu es censé éviter ou le compilateur est libre de faire ce qu'il veut et un underflow en fait partie.

Mais en effet ce n'est pas ce point là qui est surprenant. Je suppose que le soucis pour toi est que le literal est traité comme un int et que du coup la valeur du complément après les casting automatique est différente suivant la taille du type. Et la taille des type n'étant pas totalement fixée par la norme, il y a moyen que les résultats varient en fonction des archi/compilateur.
avatar

4617

vince (./4615) :
Godzil (./4614) :
Et non. Vu comment ce comporte chacun des compilateur c’est clairement défini par le language.

Le C n’est pas un langage ésotérique où chacun fait sa popote et croise les doigts pour que ça marche. Il y a une norme derrière, imparfaite oué, mais beaucoup plus que ce que certains peuvent penser y est défini et en l’occurrence le comportement ici est de ce que je peux en lire clairement défini. Pas intuitif peut être au premier abords, mais défini.
Dépendre de l’architecture n’est pas quelque chose d’indéfini.
et donc, vu que tu maitrises si bien cette norme, ça donne quoi ?
A priori ça devrait afficher c d e.
~0 != (unsigned char)-1, qui reste 255.
Par contre pour le reste cela constant est promue de mémoire (donc en long long etc.).
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

4618

Ce n'est pas de l'underflow, et le cas présent est clairement défini, il n'y a aucun lieu d’interprétation dans le cas courant.

Vince: je ne connais pas la norme par cœur loin de la, mais je sais chercher quand j'ai besoin d'infos.

En l’occurrence ce cas en partit répondu par la norme C89 A2.5.1 (je n'ai pas le paragraphe pour la norme C99 faute d'en avoir une copie)

Une plateforme 64bit (et 32bit aussi) va afficher cde. Une plateforme 16bit si elle support le long long affichera bcde, et 8bit abcde.


Tout est lié a A2.5.1, une valeur constante est par défaut signé et de la taille qui permet de faire tenir la valeur, donc dans le cas courant, ça va dépendre du test qui est fait, et sans valeur prédéfinie tel que la, le signe serait étendu a la taille du nombre qui a la plus grande taille, par contre, on ne reduit pas la taile d'un entier.

Par ce qu'on compare avec un nombre signé.

Si on change ~0 par ~0U pour un nombre non signé, le résultat change.


char a = -1; unsigned char _a = a;Dans les deux cas, a et _a contient 0xFF.

if (_a == ~0)
Le compilateur cherche a faire rentrer ~0 dans la valeur minimum qui permet de le contenir en suivant la norme:

C89: int, long, unsigned long
C99: int, long, long long

On est ici avec du C99

Donc ~0 rentre dans un int, qui pour la majorité des plateformes 32/64bit est un entier de 32bit, donc 0xFFFFFF

0xFF != 0xFFFFFFFF donc "a" ne s'affiche pas

Idem pour B on a 0xFFFF vs 0xFFFFFFFF

Pour C, on a 0xFFFFFFFF dans _c et tester avec 0xFFFFFFFF est correct, donc on affiche c.

Pour D, sous windows on a 0xFFFFFFFF donc ca reste la meme chose. Pour linux long fait 64bit, donc cf pour E qui utilise long long

Pour E, on est sur du 64bit, _d = 0xFFFFFFFFFFFFFFFF. On peux se dire "oui mais 0xFFFFFFFFFFFFFFFF != 0xFFFFFFFF" alors pourquoi ca affiche E ?

Parce que ~0 est signé (et ici comme c'est un nombre négatif) de 32bit on fait l’extension de signe en faisant la conversion vers 64bit.

Et pourquoi c'est cette explication? Simple. si on fait

if (_e == ~0U) { printf("e"); }
E ne s'affichera pas, parce que ~0U == 0xFFFFFFFF aka un nombre sur 32bit, mais non signé, donc on ne fait pas d'extension de signe pour la comparaison.


Ce n'est pas indéfini, ce n'est pas un cas borderline, c'est complétement explicable avec la norme et il n'y a pas d’ambigüité.
La seule variance suivant plateforme/compilateur est la taille (en bits) des types de base.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

4619

Et après quand le JS fait un tri lexicographique au lieu de numérique par défaut, c'est une catastrophe. Je sens un léger biais grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

4620

Pas vraiment.

Un est mathématiquement correct, l'autre.. comment dire.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.