Dans ce cas le decltype dépend du type de retour de la lambda, ce qui rentre dans la catégorie lambda expression in unevaluated context et c'est interdit. Mais ça passe en c++14 il me semble (vu que le type de retour est inféré).
C'est pour supporter l'argument axis de numpy.argmin ou numpy.argmax dans pythran. Le commit complet, à peu près autour de la bonne ligne, est là :
https://github.com/serge-sans-paille/pythran/pull/803/files#diff-b20072554ff33a1cd786318f40ff0368R110 (attention, réponse demandant un peu de connaissance de l'API numpy)
Comme le paramètre d'entrée est une expression-tableau de dimension N (paramètre template), et qu'on veut calculer argmin en suivant l'axe axis (paramètre non connu à la compilation), il faut générer les N patrons de boucle possibles suivant la valeur de l'axe.
Petit exemple pour N = 3, on peut vouloir générer (cas du min qui est un peu plus simple, mais c'est l'idée)
Merci à toi de partager quelques instants de ton quotidien avec nous, de démystifier l'activité de recherche et montrer à quoi « ça sert » puisque l'on vit dans un monde où la finalité semble importante à beaucoup :-/
Quelques questions ! Tu dis que ta communauté est en contact avec celle qui poussent des langages comme Julia. Concrètement, comment se passent vos échanges, sur quels types de questions vous penchez vous etc ? Êtes-vous en contact avec la communauté LLVM pour aller vers des transformations prouvées, faire évoluer l'IR etc ?
Et tu n'as pas parlé d'une partie qui me semble prendre de plus en plus de temps dans le monde académique : la recherche de financement. Est-ce parce que l'INRIA est protecteur de ce point de vue, parce que c'est une partie négligeable dans ton cas, autre ?
Encore merci pour l'effort de vulgarisation et de partage !
Un grand merci pour ce journal passionnant, mêlant passion, code et humanisme. Je ne sais pas trop comment exprimer ça mais il se dégage de ce journal un ton de calme sérénité admirable. Ça donne envie !
Si un modérateur passe dans le coin : il manque un s à scientifique dans le titre, et dans la note de bas de page numéro 1, il faut remplacer chines par chiens sinon c'est moins drôle.
Qu'est-ce qui compile le plus vite ? gperf + le compilateur C, ou le code en C++ ?
Aucune idée. Je driais gperf +C intuitivement.
Qu'est-ce que tu entends exactement par le fait que olaf est moins robuste ?
C'est un bonhomme de neige, alors il fond :-)
En vrai, cette fonction de hash a de forte chance de toujours donner des collisions, donc elle est pas assez générique (j'aurais du écrire générique plutôt que robuste)
Comme en en C ou en C++, sans surprises, d'après la doc http://llvm.org/docs/LangRef.html#lshr-instruction
If op2 is (statically or dynamically) equal to or larger than the number of bits in op1, the result is undefined. Donc undefined behavior
Quand je lis la doc du projet, je ne vois aucune mention de typage statique, ça me fait plutôt penser à l'approche de Nuitka qui transforme n'importe quel code Python en programme C++ qui appelle le runtime CPython. Là ils ont ré-implem le runtime CPython il me semble, mais l'idée est la même.
D'une certaine façon, ça ressemble aussi à Pyston avec le JIT en moins.
Assez loin de Pythran finalement, puisqu'ils visent une approche générique, pas un embeded Domain Specifc Language, un langage spécialisé pour le calcul scientifique embarqué dans Python.
Sinon le fait de se concentrer sur Python2.7 (même choix que Pyston !) est discutable. On a mis plusieurs mois à supporter Python3 dans Pythran après avoir fait ce choix, je les plains :-)
Elle est compilée avec des drapeaux qui permettent la vectorisation, mais après avoir inspecté le binaire, gcc a pas réussi à vectoriser, non. Du coup ça veut dire que la version pythran a encore un soucis, mais je n'ai pas encore trouvé lequel :-)
car j'avais vraiment besoin de classes
C'est dans ma TODO liste, tiens tu attendrais quoi comme annotation #pythran export pour une classe ? C'est pas bien fixé pour moi…
[^] # Re: XPM
Posté par serge_sans_paille (site web personnel) . En réponse au journal Pixel Art et C++14. Évalué à 2.
Mais mais… tu as raison, très amusant ce petit format :-)
[^] # Re: Pas C++11
Posté par serge_sans_paille (site web personnel) . En réponse au journal Obfusque ton code avec C++. Évalué à 2.
Si tu lis bien le code
std::make_index_sequence
n'est pas utilisé, mais une version naïve est fournie.Quant au plantage sous GCC, je le constate aussi, mais je l'attribuerai plutôt à une limitation de GCC :-)
[^] # Re: Sans macro
Posté par serge_sans_paille (site web personnel) . En réponse au journal Obfusque ton code avec C++. Évalué à 3.
J'aurais bien aimé, mais non, la raison étant que si on passe par une fonction template on aurait un truc du genre
(parenthèsage non contractuel).
Dans ce cas le
decltype
dépend du type de retour de la lambda, ce qui rentre dans la catégorie lambda expression in unevaluated context et c'est interdit. Mais ça passe en c++14 il me semble (vu que le type de retour est inféré).[^] # Re: Namespace bits ?
Posté par serge_sans_paille (site web personnel) . En réponse au journal Jouons avec le ``switch`` et C++17. Évalué à 4.
Ça s'appelle Boost.operators non ?
[^] # Re: Lisibilité
Posté par serge_sans_paille (site web personnel) . En réponse au journal Jouons avec le ``switch`` et C++17. Évalué à 8.
C'est pour supporter l'argument
axis
denumpy.argmin
ounumpy.argmax
dans pythran. Le commit complet, à peu près autour de la bonne ligne, est là :
(attention, réponse demandant un peu de connaissance de l'API numpy)https://github.com/serge-sans-paille/pythran/pull/803/files#diff-b20072554ff33a1cd786318f40ff0368R110
Comme le paramètre d'entrée est une expression-tableau de dimension
N
(paramètre template), et qu'on veut calculerargmin
en suivant l'axeaxis
(paramètre non connu à la compilation), il faut générer les N patrons de boucle possibles suivant la valeur de l'axe.Petit exemple pour N = 3, on peut vouloir générer (cas du min qui est un peu plus simple, mais c'est l'idée)
le code pointé plus haut génère ces différentes boucles quelque soit
N
, dans le cas deargmin
, en gardant un typage correct.Je ne sais pas si je suis clair :-/
[^] # Re: Namespace bits ?
Posté par serge_sans_paille (site web personnel) . En réponse au journal Jouons avec le ``switch`` et C++17. Évalué à 4.
La fonction template en question est marquée
noinline
, ceci explique cela :-)[^] # Re: Namespace bits ?
Posté par serge_sans_paille (site web personnel) . En réponse au journal Jouons avec le ``switch`` et C++17. Évalué à 4.
complètement !
On peut aussi voir ça comme un exercice de style, une sorte de jeu, ce qui est le cas de ce journal :-)
[^] # Re: Lisibilité
Posté par serge_sans_paille (site web personnel) . En réponse au journal Jouons avec le ``switch`` et C++17. Évalué à 3.
L(e seul) avantage du deuxième, c'est que tu peux augmenter le nombre d'éléments du switch à volonté, sans avoir à spawner les copier-coller :-)
[^] # Re: Namespace bits ?
Posté par serge_sans_paille (site web personnel) . En réponse au journal Jouons avec le ``switch`` et C++17. Évalué à 2.
C'est ça !
# Passionant
Posté par serge_sans_paille (site web personnel) . En réponse au journal La recherche en langages de programmation au quotidien. Évalué à 10.
Merci à toi de partager quelques instants de ton quotidien avec nous, de démystifier l'activité de recherche et montrer à quoi « ça sert » puisque l'on vit dans un monde où la finalité semble importante à beaucoup :-/
Quelques questions ! Tu dis que ta communauté est en contact avec celle qui poussent des langages comme Julia. Concrètement, comment se passent vos échanges, sur quels types de questions vous penchez vous etc ? Êtes-vous en contact avec la communauté LLVM pour aller vers des transformations prouvées, faire évoluer l'IR etc ?
Et tu n'as pas parlé d'une partie qui me semble prendre de plus en plus de temps dans le monde académique : la recherche de financement. Est-ce parce que l'INRIA est protecteur de ce point de vue, parce que c'est une partie négligeable dans ton cas, autre ?
Encore merci pour l'effort de vulgarisation et de partage !
[^] # Re: Chieur de service
Posté par serge_sans_paille (site web personnel) . En réponse au journal Cinelerra, openshot video et kdenlive, le duel. Évalué à 8.
Et pour éviter les problèmes de genre, ont parle aussi d'une truelle !
[^] # Re: UN BIZUTH !
Posté par serge_sans_paille (site web personnel) . En réponse au journal [liens] Mais juste un. Évalué à 2.
Ou un Bizu :-)
[^] # Re: Existe-t-il des compilateurs C/C++ qui donnent une sémantique à tous les programmes ?
Posté par serge_sans_paille (site web personnel) . En réponse au journal Compilateur trop intelligent. Évalué à 3.
Pour un
rol
portable et efficace, il y a : https://blog.regehr.org/archives/1063 !cf https://godbolt.org/g/TQchFT
[^] # Re: pypy
Posté par serge_sans_paille (site web personnel) . En réponse au journal Formation à Lyon : Compilateurs pour le Python Scientifique. Évalué à 2.
@freejef, pour Lille, je te laisse voir avec l'organisateur.
# Trugarez
Posté par serge_sans_paille (site web personnel) . En réponse au journal Comment je suis devenu chef de projet. Évalué à 10. Dernière modification le 08 octobre 2017 à 21:48.
Un grand merci pour ce journal passionnant, mêlant passion, code et humanisme. Je ne sais pas trop comment exprimer ça mais il se dégage de ce journal un ton de calme sérénité admirable. Ça donne envie !
Oh, et merci de m'avoir fait découvrir le Principe de subsidiarité !
[^] # Re: un temps d'exécution multiplié par 0.76
Posté par serge_sans_paille (site web personnel) . En réponse au journal Pythran 0.8.2 — compilation de noyaux scientifiques écrits en Python. Évalué à 3.
Si l'original prend 1s, le nouveau temps est de 0.76s. Ça prend moins de temps, ça va plus vite.
# Typos
Posté par serge_sans_paille (site web personnel) . En réponse au journal Pythran 0.8.2 — compilation de noyaux scientifiques écrits en Python. Évalué à 3.
Si un modérateur passe dans le coin : il manque un s à scientifique dans le titre, et dans la note de bas de page numéro 1, il faut remplacer chines par chiens sinon c'est moins drôle.
[^] # Re: Numpy FTW
Posté par serge_sans_paille (site web personnel) . En réponse au journal Un Python qui rivalise avec du C++. Évalué à 6.
Merci pour ton journal qui m'a motivé à ajouter le support Pythran pour ce paquet ! La PR débarquera sous peu :-)
# Cython inside
Posté par serge_sans_paille (site web personnel) . En réponse au journal Un Python qui rivalise avec du C++. Évalué à 10.
lu dans le README
Donc triche :-) Ce n'est plus du Python mais un langage hybride…
[^] # Re: Temps de compilation
Posté par serge_sans_paille (site web personnel) . En réponse au journal Frozen - Une alternative à gperf pour les utilisateurs de C++14 fan de constexpr. Évalué à 5.
Aucune idée. Je driais
gperf +C
intuitivement.C'est un bonhomme de neige, alors il fond :-)
En vrai, cette fonction de hash a de forte chance de toujours donner des collisions, donc elle est pas assez générique (j'aurais du écrire générique plutôt que robuste)
# en LLVM
Posté par serge_sans_paille (site web personnel) . En réponse au journal Un décalage de 64 bits, ça vous inspire comment ?. Évalué à 4.
Comme en en C ou en C++, sans surprises, d'après la doc http://llvm.org/docs/LangRef.html#lshr-instruction
Donc undefined behaviorIf op2 is (statically or dynamically) equal to or larger than the number of bits in op1, the result is undefined.
[^] # Re: Module et type abstrait
Posté par serge_sans_paille (site web personnel) . En réponse au journal Une petite histoire d'utilisation type fort dans Ocaml. Évalué à 6.
j'ai ri :-)
# Concurent de Nuitka plutôt non ?
Posté par serge_sans_paille (site web personnel) . En réponse au journal Grumpy : un nouveau concurrent à pythran. Évalué à 7.
Quand je lis la doc du projet, je ne vois aucune mention de typage statique, ça me fait plutôt penser à l'approche de Nuitka qui transforme n'importe quel code Python en programme C++ qui appelle le runtime CPython. Là ils ont ré-implem le runtime CPython il me semble, mais l'idée est la même.
D'une certaine façon, ça ressemble aussi à Pyston avec le JIT en moins.
Assez loin de Pythran finalement, puisqu'ils visent une approche générique, pas un embeded Domain Specifc Language, un langage spécialisé pour le calcul scientifique embarqué dans Python.
Sinon le fait de se concentrer sur Python2.7 (même choix que Pyston !) est discutable. On a mis plusieurs mois à supporter Python3 dans Pythran après avoir fait ce choix, je les plains :-)
[^] # Re: SIMD
Posté par serge_sans_paille (site web personnel) . En réponse au journal Pythran chatouille Cython. Évalué à 3.
Elle est compilée avec des drapeaux qui permettent la vectorisation, mais après avoir inspecté le binaire, gcc a pas réussi à vectoriser, non. Du coup ça veut dire que la version pythran a encore un soucis, mais je n'ai pas encore trouvé lequel :-)
C'est dans ma TODO liste, tiens tu attendrais quoi comme annotation
#pythran export
pour une classe ? C'est pas bien fixé pour moi…[^] # Re: Temps d'exécution sans optimisation ?
Posté par serge_sans_paille (site web personnel) . En réponse au journal Pythran chatouille Cython. Évalué à 4.
Il y a un état de fai[tl] : la demande est là. Il suffit de regarder les compilos existants :
Et chacun de ces compilos a pour objectif principal ou auxiliaire mais en tout cas affiché d'optimiser du code Python utilisant numpy :-)