J'ai regardé ton code (pas possible de reproduire les perfs, il me manque le fichier d'entrée et une valeur pour le nombre de round) et le gain de x100 n'est pas surprenant : double boucle imbriquée, le cas parfait pour les compilos statiques ;-)
Note que ça n'enlève rien aux mérites de condon hein, juste pour dire que c'est un point ou cPython ne brille pas et où tout compilateur pour Python devrait s'en sortir plutôt bien. Le support des générateurs et d'expression du style next(filter(lambda m: m[1], moves))[0] c'est chouette (et c'est aussi dans pythran bien sûr ;-))
Je trouve la liste des modules supportés plutôt respectable !
Bonne question! Si on regarde précisément le code sans passage par référence, on voit qu'une des deux récursions a été transformée en boucle, on peut imaginer une contrainte sur l'analyse d'aliasing ?
If a name binding operation occurs anywhere within a code block, all uses of the name within the block are treated as references to the current block. This can lead to errors when a name is used within a block before it is bound. This rule is subtle.
en gros on rentre dans le scope de la classe. Ce scope introduit une variable locale x et donc toute référence à x dans ce scope se fera en référançant la variable locale. Or lors de l'évaluation de la partie droite de l'assignation, x n'est pas encore assigné, bam NameError.
Merci pour le partage ! C'est sympa l'idée de filtrer les commit suivant le bug id, et de les classifier en se basant sur les infos du bug.
Par contre ça fait d'énorme changelog. Ce n'est pas un mal hein, probablement un choix. On pourrait imaginer (je n'ai pas regardé si votre gestionnaire de bug permet de hiérarchiser ces derniers) de n'afficher que les bugs d'une certaine criticité... Merci en tout cas \o
Je partage largement ton point de vue. Il n'y a pas à ma conaissance d'entreprise derrière PyPI, c'est un projet communautaire, autant essayer d'améliorer l'existant ensemble, que chacun donne un peu du sien me semble plutôt normal.
Et bien à mon grand soulagement, oui. les seules choses qu'il a fallu faire ont été :
Prendre en compte le fait que sys.platform renvoie une valeur jusqu'alors non supportée
La fonction sincos se détecte différemment.
Pour le reste, il semblerait que Python soit suffisamment bien supporté sous cette plateforme, et que le code C++ généré par Pythran est suffisamment portable.
Ensuite je n'ai pas testé moi même, ni même lancé la suite de test. C'est juste un retour d'utilisateur satisfait une fois ces deux changements appliqués !
À mon tour de me montrer curieux : quel genre de galère rencontres-tu ?
L'histoire dont est tiré ce journal est relatée dans https://reviews.llvm.org/D104745. J'ai voulu isoler le problème pour que le journal soit plus accessible, mais tu devrais y trouver de quoi satisfaire ta légitime curiosité !
C'est un chouette projet ! J'ai parcouru des bouts et j'aime bien l'approche avant/après pour motiver le passage à C++11.
Je remarque que tu as extrait certains code source dans des fichiers séparés, ça pourrait être bien d'essayer de les compiler pour garantir qu'ils sont « propres ». Par exemple je vois plusieurs fonctions main renvoyant int mais sans return. Ça ne change rien au discours de fond, mais fournir des exemples sans warning ajoute un côté classou à l'ensemble à mon avis.
Chouette biblio ! Peu de temps après avoir posté ce journal, on m'a également pointé https://github.com/jfalcou/raberu qui est en C++20 mais reprend des idées des différentes approches que tu cites :-)
On notera que l'article de Jonathan Boccara que tu mentionnes répond à certaines des question de ce fil ;-)
mais en l'état on n'a plus les noms ni les types des paramètres dans la signature de l'appelé.
C'est vrai. Mais on l'a dans le corps de la fonction, surtout si on se passe de auto
int&val=args.get("some_integer_ref"_kw);
l'appelé est forcément template.
Voui :-) ensuite on peut imaginer que cet appelé face un appel à une fonction non-template une fois les arguments traités.
Comment passer des paramètres par adresse ? Combien de copies des paramètres sont faites entre l'appelant et l'appelé ? Sur cet exemple j'ai déjà une copie superflue
Merci pour ce cas test, ce bug est corrigé (et tu es crédité dans le commit !), plus de copie maintenant. Pour le passage par référence, c'est les règles de déductions des universal références classiques.
D'un point de vue outil, le support OpenMP implique :
du travail au niveau du front-end (parser les directives OpenMP, et les traduire en appels au runtime OpenMP)
du travail au niveau runtime (implémenter à la fois les symboles standardisés de la bililiothèque, et ceux générés par le front-end)
(optionnel, je suppose, mais c'est fait comme ça dans LLVM) modéliser la sémantique des symboles de la libomp, pour pouvoir optimiser certaines séquences
[^] # Re: autre compilo python : codon
Posté par serge_sans_paille (site web personnel) . En réponse au journal Sortie de Pythran 0.13.0. Évalué à 2.
J'ai regardé ton code (pas possible de reproduire les perfs, il me manque le fichier d'entrée et une valeur pour le nombre de round) et le gain de x100 n'est pas surprenant : double boucle imbriquée, le cas parfait pour les compilos statiques ;-)
Note que ça n'enlève rien aux mérites de condon hein, juste pour dire que c'est un point ou cPython ne brille pas et où tout compilateur pour Python devrait s'en sortir plutôt bien. Le support des générateurs et d'expression du style
next(filter(lambda m: m[1], moves))[0]c'est chouette (et c'est aussi dans pythran bien sûr ;-))Je trouve la liste des modules supportés plutôt respectable !
[^] # Re: Mais pourquoi ?
Posté par serge_sans_paille (site web personnel) . En réponse au journal Sortie de Pythran 0.13.0. Évalué à 4.
Bonne question! Si on regarde précisément le code sans passage par référence, on voit qu'une des deux récursions a été transformée en boucle, on peut imaginer une contrainte sur l'analyse d'aliasing ?
[^] # Re: autre compilo python : codon
Posté par serge_sans_paille (site web personnel) . En réponse au journal Sortie de Pythran 0.13.0. Évalué à 3.
Vu dans les sources de condon:
# Le moi d'après répond au moi d'avant
Posté par serge_sans_paille (site web personnel) . En réponse au journal Quizz Python : esp[èa]ce de nom. Évalué à 10.
D'après https://docs.python.org/3/reference/executionmodel.html#resolution-of-names :
en gros on rentre dans le scope de la classe. Ce scope introduit une variable locale
xet donc toute référence àxdans ce scope se fera en référançant la variable locale. Or lors de l'évaluation de la partie droite de l'assignation,xn'est pas encore assigné, bamNameError.[^] # Re: Retours
Posté par serge_sans_paille (site web personnel) . En réponse au journal Changelog, pour quoi, pour quoi ?. Évalué à 3.
Merci pour ce retour personnel. Exactement ce que je cherchais :-)
[^] # Re: dans le projet Koha
Posté par serge_sans_paille (site web personnel) . En réponse au journal Changelog, pour quoi, pour quoi ?. Évalué à 2.
Merci pour le partage ! C'est sympa l'idée de filtrer les commit suivant le bug id, et de les classifier en se basant sur les infos du bug.
Par contre ça fait d'énorme changelog. Ce n'est pas un mal hein, probablement un choix. On pourrait imaginer (je n'ai pas regardé si votre gestionnaire de bug permet de hiérarchiser ces derniers) de n'afficher que les bugs d'une certaine criticité... Merci en tout cas \o
[^] # Re: sujet
Posté par serge_sans_paille (site web personnel) . En réponse au journal PyPI et les projets critiques. Évalué à 6. Dernière modification le 11 juillet 2022 à 11:33.
Je partage largement ton point de vue. Il n'y a pas à ma conaissance d'entreprise derrière PyPI, c'est un projet communautaire, autant essayer d'améliorer l'existant ensemble, que chacun donne un peu du sien me semble plutôt normal.
[^] # Re: AIX
Posté par serge_sans_paille (site web personnel) . En réponse au journal pythran 0.9.12 - heskenn. Évalué à 3.
Si tu as du temps à investir pkoa pas :-) Mais bon, il faudra probablement que tu aies aussi le temps d'aider à les corriger, à toi de voir ;-)
[^] # Re: AIX
Posté par serge_sans_paille (site web personnel) . En réponse au journal pythran 0.9.12 - heskenn. Évalué à 4.
Pythran aurait tellement pu tomber dans n'importe lequel de ces soucis... je soupçonne que la suite de test explosera ;-)
[^] # Re: AIX
Posté par serge_sans_paille (site web personnel) . En réponse au journal pythran 0.9.12 - heskenn. Évalué à 3.
Et bien à mon grand soulagement, oui. les seules choses qu'il a fallu faire ont été :
sys.platformrenvoie une valeur jusqu'alors non supportéesincosse détecte différemment.Pour le reste, il semblerait que Python soit suffisamment bien supporté sous cette plateforme, et que le code C++ généré par Pythran est suffisamment portable.
Ensuite je n'ai pas testé moi même, ni même lancé la suite de test. C'est juste un retour d'utilisateur satisfait une fois ces deux changements appliqués !
À mon tour de me montrer curieux : quel genre de galère rencontres-tu ?
[^] # Re: short strings
Posté par serge_sans_paille (site web personnel) . En réponse au journal Alignement chaotic neutre. Évalué à 5.
Carrément ! Un clou de plus dans le cercueil de mes illusions.
[^] # Re: Et LLVM dans tout ça ?
Posté par serge_sans_paille (site web personnel) . En réponse au journal Alignement chaotic neutre. Évalué à 5.
L'histoire dont est tiré ce journal est relatée dans https://reviews.llvm.org/D104745. J'ai voulu isoler le problème pour que le journal soit plus accessible, mais tu devrais y trouver de quoi satisfaire ta légitime curiosité !
[^] # Re: Hibou (chouette)
Posté par serge_sans_paille (site web personnel) . En réponse au journal Compter en C++, de 98 jusqu'à 11. Évalué à 4.
Super tip! Merci o/
# Hibou (chouette)
Posté par serge_sans_paille (site web personnel) . En réponse au journal Compter en C++, de 98 jusqu'à 11. Évalué à 4.
C'est un chouette projet ! J'ai parcouru des bouts et j'aime bien l'approche avant/après pour motiver le passage à C++11.
Je remarque que tu as extrait certains code source dans des fichiers séparés, ça pourrait être bien d'essayer de les compiler pour garantir qu'ils sont « propres ». Par exemple je vois plusieurs fonctions
mainrenvoyantintmais sansreturn. Ça ne change rien au discours de fond, mais fournir des exemples sans warning ajoute un côté classou à l'ensemble à mon avis.[^] # Re: Pas si simple.
Posté par serge_sans_paille (site web personnel) . En réponse au journal Constexpr versus template. Évalué à 2.
On pourrait imaginer que le compilo mémoise l'appel à la fonction constexpr - j'imagine que c'est valable et on retomberait sur nos pattes :-)
Chouette article, sur le fond et la forme c'est un plaisir à lire !
[^] # Re: Tu oublies des fritures !
Posté par serge_sans_paille (site web personnel) . En réponse au journal Sortie de C++ 2000. Évalué à 2. Dernière modification le 01 avril 2021 à 14:40.
constforkpermet déjà cela, à travers un[^] # Re: Déjà vu ?
Posté par serge_sans_paille (site web personnel) . En réponse au journal Sortie de C++ 2000. Évalué à 3. Dernière modification le 01 avril 2021 à 14:17.
C'est... excellent :-) Merci !
[^] # Re: Autres pistes
Posté par serge_sans_paille (site web personnel) . En réponse au journal Toujours plus proche du Python avec C++. Évalué à 5.
Chouette biblio ! Peu de temps après avoir posté ce journal, on m'a également pointé https://github.com/jfalcou/raberu qui est en C++20 mais reprend des idées des différentes approches que tu cites :-)
On notera que l'article de Jonathan Boccara que tu mentionnes répond à certaines des question de ce fil ;-)
[^] # Re: Limité
Posté par serge_sans_paille (site web personnel) . En réponse au journal Toujours plus proche du Python avec C++. Évalué à 7.
Dans mon exemple, j'ai semé des
autopartout pour rester pythonic. Mais tu peux aussi écriresi tu veux forcer le type (et/ou le documenter).
Carrément.
Y a des
static_assert, donc tu as un message à la compil, mais moins élaboré / lisible que ce que peut produire un compilo, c'est sûr hein :-)C'est surtout pour la beauté de la chose, pour la note artistique, le frisson de repousser les limites du langage :-)
[^] # Re: Moui
Posté par serge_sans_paille (site web personnel) . En réponse au journal Toujours plus proche du Python avec C++. Évalué à 5.
C'est vrai. Mais on l'a dans le corps de la fonction, surtout si on se passe de
autoVoui :-) ensuite on peut imaginer que cet appelé face un appel à une fonction non-template une fois les arguments traités.
Merci pour ce cas test, ce bug est corrigé (et tu es crédité dans le commit !), plus de copie maintenant. Pour le passage par référence, c'est les règles de déductions des universal références classiques.
[^] # Re: Littéraux non-standard
Posté par serge_sans_paille (site web personnel) . En réponse au journal Toujours plus proche du Python avec C++. Évalué à 4.
Wé c'est pas standard, mais supporté par gcc et clang :-/
J'ai pas trouvé comment avoir une approche similaire sans ça...
# Merci
Posté par serge_sans_paille (site web personnel) . En réponse au journal Interview de Michel Pigenet : la loi des associations 1901. Évalué à 4.
J'ai adoré cette mise en perspective historique d'un fait qui nous semble couler de source, alors qu'il ne l'a pas toujours été, semble-t-il.
Un grand merci à l'interviewer et l'interviewé, donc !
[^] # Re: OpenMP
Posté par serge_sans_paille (site web personnel) . En réponse au journal LLVM 11.0.0. Évalué à 6. Dernière modification le 13 octobre 2020 à 20:49.
D'un point de vue outil, le support OpenMP implique :
libomp, pour pouvoir optimiser certaines séquences[^] # Re: c'est bien gentil ça mais...
Posté par serge_sans_paille (site web personnel) . En réponse au journal Tous cousins. Évalué à 2.
En te disant que tu es aussi cousin, je de sais pas moi, du Dalaï Lama, de Linus Torvald ou tout autre personne que tu apprécies ;-)
[^] # Re: Quel est l'intérêt ?
Posté par serge_sans_paille (site web personnel) . En réponse au journal C++ vin va vous faire tourner en barrique !. Évalué à 6.
Une blague connexe : C++, ça augmente le C, mais ça renvoie toujours du C.