30900

J'éspère que tu comprends que je vois ton argumentation comme très limite, même si tu défends très bien les compilateurs ? cheeky

=>
Zerosquare (./30899) :
- ça permet aussi que les compilos fassent des optimisations assez poussées
+ ça permet que les compilos fassent des optimisations sans trop se prendre la tête
et j'imagine que c'est ça qui provoque les déconnades dans les corner cases que tu évoques au paragraphe suivant.

Zerosquare (./30899) :
le compilateur peut tirer parti du fait que certains trucs sont considérés comme indéfinis pour optimiser agressivement, même quand l'archi sous-jacente a un comportement déterministe
C'est ça que j'appelle un bug. En l'occurence, ce que j'ai écrit a une sens très précis, et a une seule façon de s'écrire en code machine pour mon target. Si le compilateur décide de faire autre chose, c'est lui qui déconne, ou tout au moins la norme, mais pas moi.
Enfin, "pas moi" au sens pratique. Evidemment au sens formel, je suis censé me plier à la norme, même si elle ne colle pas à la réalité des machines.


ps-> un grand merci pour tes lumières. smile

30901

57.0.2987.133
avatar
pedrolane stoppe la chute des chevaux

La DNC-Team : un club plein de mystères

30902

Folco (./30900) :
J'éspère que tu comprends que je vois ton argumentation comme très limite, même si tu défends très bien les compilateurs ? cheeky
Oh, je ne défends pas les compilos, ça me fait suer aussi grin
Mais quand tu décortiques, souvent même des optimisations "évidentes" reposent sur des présupposés qui ne sont pas vrais dans 100% des cas, et toute la difficulté est justement de détecter ces cas (parfois, c'est simplement infaisable ou carrément impossible). On ne s'en rend pas forcément compte quand on programme en assembleur, parce qu'on en sait beaucoup plus sur le code qu'on écrit qu'un compilateur. Malheureusement, je pense qu'on ne peut pas résoudre ce problème sans changer fondamentalement le langage, ou accepter d'avoir des perfs franchement dégradées.

Folco (./30900) :
En l'occurence, ce que j'ai écrit a une sens très précis, et a une seule façon de s'écrire en code machine pour mon target.
Alors je pense qu'il faut que tu arrêtes de faire du C, ou au minimum que tu décortiques la spéc, parce que tu vas au devant de cruelles désillusions grin

Contrairement à ce que certains prétendent, le C n'est pas un assembleur portable. Premièrement, parce qu'il est spécifié de manière beaucoup moins stricte et rigoureuse que l'assembleur. Deuxièmement, parce qu'il n'y a aucune garantie sur la correspondance entre le sources C et le code assembleur généré, en-dehors du fait qu'ils sont censés avoir le même effet suivant les principes de la spéc (qui ne sont pas forcément ceux de la machine sous-jacente). Troisièmement, parce qu'écrire du code C non trivial qui soit réellement portable (à savoir : qui fonctionne de la même façon sur toutes les implémentations) est affreusement difficile : tu peux avoir une architecture qui soit à la fois strictement conforme à la spéc, et suffisamment tordue pour que quasiment tout le monde finisse par tomber dans un piège. Et le pire, c'est qu'il n'y a même pas de moyen automatisé qui garantisse l'absence de code non portable, parce qu'on ne sait détecter qu'une partie des cas de figures.

Il ne faut pas oublier le contexte dans lequel ce langage a été créé : à l'époque il y avait pas mal d'archis différentes et (du point de vue moderne) assez baroques, et pour beaucoup d'applications, on ne pouvait pas se permettre le luxe de privilégier la sécurité aux perfs. Le C était un langage à la syntaxe (faussement) facile, implémentable sur à peu près n'importe quelle machine/OS, avec de bonnes perfs, et laissant suffisamment de liberté aux codeurs pour ne pas les gêner. C'est pour ça qu'il a connu un tel succès, d'ailleurs. Ce qui est embêtant, c'est que maintenant que les priorités ne sont plus les mêmes, il soit toujours aussi répandu.

Et le cas que tu présentes est encore "gentil" comparé à d'autres trucs. J'avais déjà posté, par exemple :
- un compilateur qui, si une variable booléenne est laissée non initialisée, considère que les conditions var et !var sont toutes les deux vraies
- le fait qu'il soit impossible, du moins avec GCC, de forcer de manière fiable le séquencement des blocs C et ASM - ce qui veut dire qu'on ne peut pas, par exemple, ne désactiver les interruptions que pendant la section de code qu'on veut
- un compilateur qui supprime carrément une boucle infinie sans condition de sortie (genre while (1);) [je considère ça comme un bug grave, et apparemment je ne suis pas le seul, mais certains auteurs de compilateur sont d'avis que la spéc le permet]

(on devrait forker vers le topic approprié, je crois ^^)
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

30903

30904

laught
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

30905

30906

Zerosquare (./30902) :
- un compilateur qui supprime carrément une boucle infinie sans condition de sortie (genre while (1)wink [je considère ça comme un bug grave, et apparemment je ne suis pas le seul, mais certains auteurs de compilateur sont d'avis que la spéc le permet]

Oo

30907

http://stackoverflow.com/questions/2178115/are-compilers-allowed-to-eliminate-infinite-loops
C'est même pire que ce dont je me rappelais, apparemment la spéc C11 permet explicitement aux compilos de faire cette optim. Je me répète, mais en plus d'être théoriquement plus que douteux, c'est franchement dangereux : il y a des systèmes embarqués dans lesquels ce genre de boucle est utilisé pour bloquer l'exécution en cas d'erreur irrécupérable, et où il ne faut surtout pas qu'on en sorte, sous risque de provoquer des dommages matériels voire humains.
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

30908

avatar
pedrolane stoppe la chute des chevaux

La DNC-Team : un club plein de mystères

30909

http://www.cs.utah.edu/~regehr/papers/emsoft08-preprint.pdf
>>> "les compilos ne respectent pas volatile"
tritop

30910

30911

Ah oué, pour un gars comme toi en embarqué, bonsoir...

30912

je trouve même ca scandaleux, le compilo, c'est quand même un truc un peu critique... ils ont souvent des bugs mais a ce point la...

bon en même temps c'est un doc de 2008...

30913

Folco (./30909) :
http://www.cs.utah.edu/~regehr/papers/emsoft08-preprint.pdf
>>> "les compilos ne respectent pas volatile"
tritop

quand on a une publi qui critique le standard, on peut se poser des questions en effet grin

30914

30915

30916

30917

addresse
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.

30918

30919

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.

30920

30921

30922

le dauphin ?

30923

30924

le dauphin ?

30925

SPUD
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.

30926

30927

Bonjour,

OK pour moi.

Cordialement,
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

30928

9td9af-jpg.136858
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.

30929

avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

30930

le dauphin ?