À toutes fins utiles, j'ai rédigé un petit traducteur pour la zorglangue. Un traducteur de et vers la zorglangue, puisque, comme le ROT13, le codage et le décodage se font avec la même seule opération.
Subtilités de ce traducteur :
- il est écrit en Python 3 (et n'utilise que des modules standard) ;
- il laisse la ponctuation en place ;
- il met les majuscules où il faut, même pour des caractères hors ASCII.
Exemples :
$ echo 'Dose maximum !' | zorglang
Esod mumixam !
echo 'Dose maximum !' | zorglang | zorglang
Dose maximum !
Voilà, c'est tout, ça devrait même marcher pour des langues qui s'écrivent de droite à gauche puisque cette subtilité est indépendante du flux de caractères. Eviv Bulgroz !
Ah non, j'oubliais. Le code :
#! /usr/bin/python3
import io
import re
import sys
word_re = re.compile(r'\b\w+\b')
def zorglang(text):
with io.StringIO() as buf:
last_index = 0
for match in word_re.finditer(text):
buf.write(text[last_index:match.start()])
word = match.group()
for i in range(len(word)):
if word[i].isupper():
buf.write(word[-1 - i].upper())
elif word[i].islower():
buf.write(word[-1 - i].lower())
else:
buf.write(word[-1 - i])
last_index = match.end()
buf.write(text[last_index:])
return buf.getvalue()
if __name__ == '__main__':
for line in sys.stdin:
print(zorglang(line), end='')
# M'enfin
Posté par ʭ ☯ . Évalué à 3.
M'enfin, Gaston va enfin pouvoir lire Spirou…
⚓ À g'Auch TOUTE! http://afdgauch.online.fr
[^] # Re: M'enfin
Posté par Thomas Debesse (site web personnel) . Évalué à 10.
Mais si Gaston lit Spirou, est-ce qu’il écrit lui aussi au courrier des lecteurs ?
ce commentaire est sous licence cc by 4 et précédentes
[^] # Re: M'enfin
Posté par reynum (site web personnel) . Évalué à 10.
En tout cas il est bien placé pour savoir ce qu'il adviendra de la réponse.
Paix et prospérité à l'âme de Franquin.
kentoc'h mervel eget bezan saotred
# En php?
Posté par Nitchevo (site web personnel) . Évalué à -6.
Je me demande si le php n'est pas plus simple:
Découper la phrase avec explode() puis inverser les lettres de chaque mot avec strrev.
Je ne code pas beaucoup mais amha cela doit pouvoir se régler en 5 lignes.
[^] # Re: En php?
Posté par 🚲 Tanguy Ortolo (site web personnel) . Évalué à 10.
La même approche serait tout aussi simple en Python, mais le problème, c'est que :
Ça donnerait ça :
[^] # Re: En php?
Posté par Nitchevo (site web personnel) . Évalué à 10.
M'apprendra à balancer un truc en deux minutes du boulot….
[^] # Re: En php?
Posté par KiKouN . Évalué à 10.
Il faut prendre plus le temps quand tu est au boulot.
# Emroné \!
Posté par refreketu . Évalué à 3.
À dnauq iulec ruop eriudart al eugnal Fpmuorths ?
[^] # Re: Emroné \!
Posté par 🚲 Tanguy Ortolo (site web personnel) . Évalué à 9.
L'ennui, c'est que celle-là n'est pas injective pour un être humain, ou pour un ordinateur conçu par des humains…
[^] # Re: Emroné \!
Posté par yohann (site web personnel) . Évalué à 4.
PLus les schtroumpfs eux-même sont divisés sur la bonne manière de schtrompfer : cf: schtroumpf vert et vert schtrompf
[^] # Re: Emroné \!
Posté par BAud (site web personnel) . Évalué à 6.
Ut xuev erid refpmuorthcs al eugnal Hfpmuorthcs ?
# Sans expression rationnelle
Posté par tsanch3z . Évalué à 1.
Une variante utilisant seulement les outils de manipulations de chaînes
[^] # Re: Sans expression rationnelle
Posté par 🚲 Tanguy Ortolo (site web personnel) . Évalué à 4. Dernière modification le 04 décembre 2014 à 17:46.
Ce n'est pas équivalent, la ponctuation se retrouve mal placée :
Et le retour à la ligne final est mangé, au passage (d'où l'invite de commande
$
que j'ai mis sur la ligne de résultat, dans mon example).[^] # Re: Sans expression rationnelle
Posté par THE_ALF_ . Évalué à -1.
Yep, mais cette piste est quand meme plus lisible. Dans le même esprit, on peut en tout cas simplifier pas mal la fonction de départ par:
[^] # Re: Sans expression rationnelle
Posté par 🚲 Tanguy Ortolo (site web personnel) . Évalué à 10.
Effectivement, remplacer le StringIO par une simple chaîne permet de tuer les performances en forçant une copie à chaque opération, et n'effectuer le test de capitalisation que pour la première lettre permet de ne plus transcrire correctement les mots à capitalisation interne tels que LinuxFr.org.
C'est un peu plus simple, oui. Et moins bien.
[^] # Re: Sans expression rationnelle
Posté par Tit . Évalué à 3.
et ça donne quoi LinuxFr.org en zorgland? (je ne suis pas sûr de la place du point et de la majuscule "interne")
[^] # Re: Sans expression rationnelle
Posté par 🚲 Tanguy Ortolo (site web personnel) . Évalué à 5.
RfxunIl.gro
(le point sépare deux mots ; les lettres sont capitalisées à la même place que dans les mots d'origine, en tout cas c'est mon interprétation, Franquin n'ayant pas exploré ce genre de subtilité)
[^] # Re: Sans expression rationnelle
Posté par Sufflope (site web personnel) . Évalué à 7.
Je connais très peu l'univers Spirou, mais au vu des règles que tu as exposées dans ce journal et les commentaires, j'ai le sentiment que l'esprit serait plutôt que ça donne "XunilRf.gro".
Pour tenter d'expliquer, l'idée générale que je vois est de garder la « structure » , par exemple s'il y a une majuscule en début de phrase, elle doit l'être au début du résultat et pas à la fin, de même pour la ponctuation, et les mots sont dans le même ordre, et de n'inverser les lettres qu'au sein d'un seul mot délimité par cette structure à la fois.
Et pour moi cette construction (accoler deux mots en capitalisant leur première lettre) relève de la structuration. D'où mon sentiment.
[^] # Re: Sans expression rationnelle
Posté par 🚲 Tanguy Ortolo (site web personnel) . Évalué à 3.
Peut-être, l'ennui étant que ce cas de se présentant pas à ma connaissance dans les albums de Spirou et Fantasio de Franquin, on ne pourra jamais le savoir. Et, par ailleurs, la détection de mot dans les expressions rationnelles considère LinuxFr comme un seul mot, donc je m'y suis tenu. En outre, il est plus facile de lire RfxunIl.gro que XunilRf.gr, même si la capitalisation interne n'y est plus que cosmétique.
[^] # Re: Sans expression rationnelle
Posté par Sufflope (site web personnel) . Évalué à 3.
Si j'ai bien compris le peu que j'ai lu sur Zorglub-truc-machin-chose, c'est plutôt un argument contre ta solution, ça, non ? ;-)
# as allways
Posté par hervé Couvelard . Évalué à -7.
ça se termine en concours de celui qui à la plus grosse. da linux french page devient déprimant.
[^] # Re: as allways
Posté par BAud (site web personnel) . Évalué à 1.
euh, c'est le rot13 qui te fait dire cela ? rot24 comme Rocco_Siffredi c'est l'inverse de 42 on va dire… l'alphabet français est de 26 lettres
[^] # Re: as allways
Posté par SChauveau . Évalué à 10.
Cela s'écrit "as hallways" ou en bon français "comme dans les couloirs"
Désolé …
[^] # Re: as allways
Posté par Guillaume Denry (site web personnel) . Évalué à 4.
Personnellement, c'est, je trouve, la partie la plus intéressante du journal.
Mais t'as le droit de préférer un journal avec que des commentaires "wow, super ! Rien à redire, c'est l'algo parfait !".
# et en perl
Posté par fearan . Évalué à 7.
plop
je rajoute du vide pour éviter le décalage de l'avatar
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: et en perl
Posté par fearan . Évalué à 4.
sur un système utf-8 il peut être utile de faire l'une des action suivante
Voila, j'ajouterai qu'en cas de caractères spéciaux avant le premier mot, ils sont bouffés; je poste donc une version améliorée qui marche avec de la ponctuation avant :
$> echo '!!! ya mêMe des accents en plein milieu !!!'| ./zorg.pl
!!! ay emÊm sed stnecca ne nielp ueilim !!!
$>
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: et en perl
Posté par fearan . Évalué à 4.
et encore une correction :)
remplacer [A-Z] par \p{upper}
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: et en perl
Posté par anaseto . Évalué à 3.
Pareil (si je dis pas de bêtises), mais sans boucle :)
[^] # Re: et en perl
Posté par fearan . Évalué à 3.
presque mais
$>echo '!Eviv BuLgrozé!!' | zorg2.pl
!Vive ÉzorgLub!!
$>
On a un changement des majuscules interne au mot, ce n'est donc pas équivalent au code initial; ensuite je me demande si on peut pas de faire a coup de regex récursive ;)
(t)ru(C) => C(r)(u)t => Curt, à rechercher du coté de la recherche des palindromes (du point de vu de la logique)
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: et en perl
Posté par anaseto . Évalué à 2.
Pas faux, j'avais pas pensé que les majuscules à l'intérieur des mots étaient à prendre en compte de cette façon.
[^] # Re: et en perl
Posté par anaseto . Évalué à 2.
Je vois pas trop comment on pourrait s'en sortir avec des regexps récursives, car elles servent uniquement à matcher. Peut-être en utilisant des blocs
?{...}
pour insérer du code dans la regexp. Par contre, on peut s'en sortir en faisant une fonction récursive :mais c'est un peu tordu… et probablement moins efficace que d'utiliser substr et des indices. Mais c'est marrant quand même :)
[^] # Re: et en perl
Posté par anaseto . Évalué à 4.
Bon, test sur un roman de plus de trois cent pages, j'obtiens :
Comme quoi, ça change pas grand chose, et dans tous les cas, c'est clair que les langages de script sont pas fait pour travailler sur du texte caractère à caractère.
# Plus simple
Posté par lovasoa (site web personnel) . Évalué à 7.
[^] # Re: Plus simple
Posté par _kaos_ . Évalué à 2.
J'allais la demander !
Du coup, je change mon fusil d'épaule : quelqu'un pour du befunge, ou j'ai le temps d'y réfléchir demain ?
Matricule 23415
[^] # Re: Plus simple
Posté par cosmocat . Évalué à 7.
En whitespace:
(Bon, c'est pas ma faute si ça passe pas sur linuxfr….)
Demain, je poste en AAAAAAAAAAAAAA!!!! ou autre
[^] # Re: Plus simple
Posté par fearan . Évalué à 3.
essayes en .Gertrude ( http://esolangs.org/wiki/.Gertrude ) (par contre bon courage :)
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: Plus simple
Posté par max22 . Évalué à 3.
Zorglub, Au secours!
,bulgroZ uA
Il y a un souci quelque part !
# elituni
Posté par reynum (site web personnel) . Évalué à 6.
cnod eriassecén
kentoc'h mervel eget bezan saotred
# Merci, ô grand merci ...
Posté par totof2000 . Évalué à 1.
… d'avoir enfin utilisé Python dans un contexte qui lui va particulièrement bien. C'est d'ailleurs le genre de truc pour lequel on devrait utiliser Python, et ne garder les autres trucs sérieux que pour des langages dignes de ce nom (Ruby étant l'un des meilleurs).
[^] # Re: Merci, ô grand merci ...
Posté par Anonyme . Évalué à 7. Dernière modification le 05 décembre 2014 à 11:22.
Tu te trompes. C’est justement parce qu’il est aussi possible d’utiliser Python à des fin burelesques qu’il surpasse Ruby : lui (Python) au moins n’a pas une pierre coincée dans l’oignon.
[^] # Re: Merci, ô grand merci ...
Posté par xcomcmdr . Évalué à 3.
Après le monkey patching de Ruby, je crois que le burlesque n'a plus de limites que ce soit pour Ruby ou pour Python…
"Quand certains râlent contre systemd, d'autres s'attaquent aux vrais problèmes." (merci Sinma !)
[^] # Re: Merci, ô grand merci ...
Posté par fearan . Évalué à 3.
je regrette son programme ne respecte pas la norme python, il manque une citation :P
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: Merci, ô grand merci ...
Posté par Shuba . Évalué à 4.
Trop gros, passera pas…
# Parce que j'essaye de progresser en bash
Posté par hervé Couvelard . Évalué à 5.
./zorg "la phrase à reverser, une bonne phrase qui tue."
al esarhp à resrever, enu ennob esarhp iuq eut.
[^] # Re: Parce que j'essaye de progresser en bash
Posté par fearan . Évalué à 5.
Il y a un problème au niveau des majuscule et des la gestion de la ponctuation ;)
$>./zorg.sh '!!!Plop!?!'
!?!polP!!!
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: Parce que j'essaye de progresser en bash
Posté par hervé Couvelard . Évalué à 3.
ahoui….
petit scarabée devra progresser encore.
[^] # Re: Parce que j'essaye de progresser en bash
Posté par hervé Couvelard . Évalué à 2.
Amélioration des majuscules, mais bon la ponctuation est toujours dans les choux, enfin… dans une certaine mesure.
herve@DreamMachine:~$ ./zorg "La phrase à reverser, Une bonne phrase Qui tue."
Al esarhp à resrever, Enu ennob esarhp Iuq eut.
# Haskell
Posté par max22 . Évalué à 10.
J'ai passé un bon vendredi…
[^] # Re: Haskell
Posté par Ife . Évalué à 2.
Pourquoi faire du faux "currying"?
(\a -> \b -> w a == w b)
est la même chose que(\a b -> w a == w b)
.Ruby est le résultat d'un gamin qui apprend le Java, puis jette un œil à Perl et se dit « je peux le réparer! »
[^] # Re: Haskell
Posté par navaati . Évalué à 3. Dernière modification le 07 décembre 2014 à 12:40.
Qui est la même chose que :
qui est la même chose que :
(==) `on` ((||) <$> isAlphaNum <*> (=='_'))
Huhuhu, le Haskell, qu'est-ce qu'on se marre.
EDIT: Oh, j'avais pas remarqué, très joli emploi du zip !
[^] # Re: Haskell
Posté par max22 . Évalué à 1.
ah oui merci pour le
on
. justement je me souvenais avoir vu ça, mais impossible de retrouver comment faire…[^] # Re: Haskell
Posté par navaati . Évalué à 3.
Dans le même genre, tu peux remplacer ça
getContents >>= putStrLn . unlines . map zorglangue . lines
par çainteract $ unlines . map zorglangue . lines
.Et ça
map cap $ zip l1 l2 where cap (f, c) = f c
par çazipWith ($) l1 l2
.Et enfin (mais là je suis pas sûr sûr, en tout cas les types matchent), ça
concatMap capReverse . splitWords
par çacapReverse <=< splitWords
.[^] # Re: Haskell
Posté par max22 . Évalué à 2.
'<=<' je connaissais pas.
j'ai lu "programming in haskell", j'ai presque fini "learn yourself a haskell", et j'ai toujours l'impression de ne pas trop maitriser le haskell…
alors qu'à l'époque, pour python il m'a suffit d'un tutorial…
[^] # Re: Haskell
Posté par anaseto . Évalué à 7.
Ce que je trouve, c'est qu'avec haskell, il y a beaucoup de choses simples dans d'autres langages qui sont enrobées de choses compliquées, et pas forcément faciles à retenir au début. Et puis certaines choses qu'on estime de base, pour lesquelles on a des syntaxes spéciales dans d'autres langages (tableaux, chaînes de caractères et tables de hachages) ne sont pas plus pratiques à utiliser que des choses moins courantes. En fait, la seule structure de base vraiment pratique à utiliser en Haskell, c'est les listes chaînées.
Mais le plus gênant, c'est quand tu crois que tu commences à connaître le langage et que tu tombes sur du code qui utilise des Lens, Arrows ou autre et tu t'aperçois qu'en fait, non :)
# blague
Posté par savitzkaia . Évalué à 1.
référence inside
et grotesque se dit euqsetorg je suppose?
fin de ma blague, celui qui trouve la référence gagne un bon point
[^] # Re: blague
Posté par max22 . Évalué à 4.
si personne ne trouve avant vendredi prochain tu nous donneras la réponse ?
[^] # Re: blague
Posté par savitzkaia . Évalué à 2.
rhalala, bon c'est dans "l'horloger de la comète" de Tome et Janry. Je ne peux donner la page pour l'instant la BD est toujours chez mes parents qui ne sont pas à côté.
# Let's get Groovy, Baby!
Posté par Sufflope (site web personnel) . Évalué à 6.
Moi aussi je saute des lignes pour éviter l'avatar.
Ou alors je pourrais vous mettre la version Java.
Nan j'déconne.
[^] # Re: Let's get Groovy, Baby!
Posté par YBoy360 (site web personnel) . Évalué à 1.
Trop simple!
# Avec du poil aux pattes
Posté par gnx . Évalué à 9.
Une version en x86_64, pour Linux. À assembler avec FASM.
Pour l'ASCII étendu, suit l'ISO 8859-15 (aka Latin-9), et donc pas l'UTF-8. Limites en dur pour la longueur de la ligne et des mots.
Pas spécialement propre (je dois écrire en moyenne 50 lignes d'assembleur par an…), ni documenté, ni optimisé (mais vus les langages d'urbains épilés présentés dans la plupart des autres propositions, ce programme (binaire de 1364 octets) devrait avoir fini son exécution avant que les autres n'aient fini leur chargement en mémoire). Ne gère pas pas correctement les signes « multiplication » et « division » (pas envie de m'embêter pour ce cas particulier « intelligemment » placé au beau milieu des majuscules accentuées).
[^] # Re: Avec du poil aux pattes
Posté par Sufflope (site web personnel) . Évalué à 3.
Ah bah peut-être (encore que tu sais pas ce qu'un compilo / une VM malins peuvent faire !), mais nous au moins :
140 characters640kB should be enough for everyoneAlors au choix hein… :-P
[^] # Re: Avec du poil aux pattes
Posté par claudex . Évalué à 5.
Vu que le script original est en Python…
« Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche
[^] # Re: Avec du poil aux pattes
Posté par Sufflope (site web personnel) . Évalué à 4.
J'ai mis du temps à comprendre ta remarque. Alors elle est juste (et pas que pour la version python, les autres ne me semblent pas non plus utiliser de multithreading), mais on ne parle pas de la même chose :) Je parlais du fait que son assembleur x86_64 ne doit pas trop bien marcher sur d'autres types de processeurs alors que le python, le perl, le groovy… pas de souci. Mais c'est vrai que j'aurais du dire "un seul type de processeur".
[^] # Re: Avec du poil aux pattes
Posté par gnx . Évalué à 5.
Mouais, c'est quelque chose que l'on entend répété ad nauseam depuis des années, mais en pratique il est rare qu'ils produisent un code plus performant qu'un premier jet bêtement codé à la main. Et de toutes manières, vu qu'en général on passe son temps à appeler des fonctions assez génériques qui ne sont donc pas optimisées pour le cas que l'on utilise, il n'y a pas grand chose d'optimisable par le compilateur…
OK, mais on le gère comment ? Faudrait se mettre d'accord sur ce qu'on veut avant de commencer à le gérer, sinon, on gère l'UTF-8 en entrée mais en produisant une sortie au petit bonheur la chance. Par exemple, dans le programme Python d'origine, le "\w" de la regexp ne va pas forcément donner les résultats que l'on attend. Avec les chiffres, par exemple, pour "Vol_714", on pourrait raisonnablement attendre "Lov_714" (comportement de mon programme) ou "Lov_417" comme résultat. Eh bien non, parce que le "\w" compte les chiffres et les "_" comme des caractères de mot, ça va donner "417_lov". Ah non, tiens, en plus ça donne "417_loV", une « erreur » supplémentaire :-) puisque les chiffres n'ont pas de casse et que dans ce cas le programme recopie les caractères tels qu'ils sont entrés).
Quant au Chinois, tu as choisi un bon exemple des emmerdements dans lesquels on est plongé par la complexité et la richesse d'Unicode si on veut le gérer dans son intégralité : dans un texte chinois, il n'y a pas de mots discernables et il n'y a pas de majuscules. Bim, les 2 principales spécification de notre zorglub sautent. Que fait-on ? On inverse tout le bloc d'idéogrammes entre 2 ponctuations, comme le programme d'origine le fait ? Ou pas ? Et surtout quel sens cela a-t-il de rentrer du chinois dans ce programme ?
Ben dans la langue de Franquin, le mot le plus long ayant 25 caractères, avec 64 on should be tranquille. Sinon, on rachètera un caractère supplémentaire pour écrire « 128 » à la place :-)
Oui, je constate que c'est le mode de développement actuel. « Allez, cette fonction a un bon nom, je vais l'utiliser ; on verra bien ce que ça donne : avec un peu de bol, ça marche. » … « hop c'est bon, j'ai testé avec un exemple, ça roule. Ouais, non lire la spécification de la fonction, ce n'est pas la peine puisque ça marche pour l'instant. On verra bien si quelqu'un se plaint » …
NB : j'ai bien conscience que dans les programmes présentés ici, il ne s'agit pas d'un logiciel critique ou d'un soft facturé 200 000 € à un malheureux pige^ Wclient, mais d'un petit jeu, donc ces reproches(?) ne leur sont pas destinés mais puisque je vois qu'on est d'humeur taquine… :-)
Ben… au moins dans le truc que j'ai proposé, les caractéristiques et les limites sont assez clairement mises en avant.
Si on respecte ces règles, le comportement devrait être fiable1.
Si on prend le programme d'origine, pour les même données d'entrées, si on l'exécute dans un environnement différent (changement des locales) => BOUM. Alors il vaut peut-être mieux savoir ce qui est supporté et ce qui ne l'est pas par le programme et s'y tenir plutôt que d'avoir un comportement non prévu ou un crash.
là, logiquement, comme quand on fait une remarque sur l'orthographe, je ne doute pas que quelqu'un va me faire remarquer que j'ai oublier de traiter/spécifier un cas particulier :-) Ce que je veux dire, c'est que j'ai essayé d'une part d'être conscient des limites de ma version et de les mentionner et d'autre part de ne traiter qu'un type d'entrée restreint à ce qui fait sens, plutôt que de faire un truc qui est censé tout traiter sans limites, mais qui le fait mal ou de manière inattendue. Et le coup de la non-gestion assumée des signes « multiplier » et « diviser », c'est un geste politique de protestation contre la faute de goût d'avoir collé ces deux signes en plein milieu des majuscules accentuées :-). Sinon, c'est juste 2 fois 2 instructions à rajouter pour les gérer correctement. ↩
[^] # Re: Avec du poil aux pattes
Posté par lasher . Évalué à 4.
Chic, chic, un troll ! Donc euh, mon boulot a été, pendant un moment, d'optimiser des codes scientifiques (qui souvent sont bien plus faciles à optimiser pour un compilateur que des codes plus traditionnels). Je n'ai presque jamais eu à recourir à l'écriture en ASM, mais par contre savoir le lire était important :
Concernant mon dernier point : au final, plutôt qu'écrire en ASM, je finissais par savoir comment exprimer mes programmes sous une forme que le compilateur savait optimiser. Souvent, ça passe par la « débilisation » du code : si on essaie d'être trop intelligent, le compilateur voit un tas de code compliqué, et laisse tomber. Si au contraire on écrit le code de la façon la plus simple possible, souvent le compilo comprend l'idiome, et trouve des choses intelligentes à faire. Il y a bien entendu des exceptions :
Sur certaines architectures c'est relativement faux : par exemple sur Itanium, tout un tas de mécanismes super cool concernant la prédication des branches, la spéculation de contrôle ou de données, etc., n'étaient tout simplement pas accessible à moins de faire de l'assembleur (gcc est dans les choux niveau optim sur ia64, et icc interdit l'utilisation d'assembleur inline — mais il y a des intrinsics pour certains trucs).
Bref. J'en profite pour lier vers ce blog qui propose un quiz à propos de différentes optimisations que le compilateur peut effectuer.
Ça par contre je suis relativement d'accord. Je n'ai pas été regarder, mais j'aimerais bien savoir s'il existe des fonctions de la libc qui ont des variantes, du genre (code non testé, y'a sans doute des bugs) :
NB: avec icc (et en supposant que mon code ne soit pas complètement rempli de bugs, ce qui est très possible), les boucles vont être déroulées, entre 2 et 6 fois, pour tirer avantage des 16 registres SSE. Pour tirer avantage des cas intermédiaires, icc va générer des variantes qui vont complètement dérouler les cas du genre N=8, N=16, N=32, etc. Je ne crois pas que gcc fasse cela aussi systématiquement, mais il commence aussi à être bon pour ce qui est de la vectorisation.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.