Je n'aime pas trop le terme mais pour faire simple je suis un "expert" en compilation (doctorat en informatique + 20 ans à travailler dans le domaine). Quand je vois un article comme celui ci, je n'ai donc pas trop de difficultés à imaginer les implémentations possibles avec leur avantages et inconvénients.
Concernant l'indentation. Elle apparaît au milieu donc cela s'est probablement produit quand j'ai fait le gros copier-coller pour passer de 100 à 200 tableaux.
C'est possible mais cela pourrait coûter très cher car les fonctions constexpr peuvent contenir des boucles. Il n'y a donc pas de limite théorique au nombre d'appels de fonctions constexpr lors de l'évaluation d'une seule expression.
A ce propos, j'ai utilisé 800 dans mon code car g++ refusait de compiler avec 1000. Erreur 'too many recursive templates' ou quelque chose dans le genre.
On peut probablement avoir le beurre et l'argent du beurre en encapsulant la fonction constexpr dans une template. Et potentiellement avec une autre fonction constexpr par dessus pour garder une syntaxe lisible:
Cela fait pas mal de temps que je n'ai pas utilisé les fold-expressions mais je ne pense pas que cela fonctionne comme tu le propose ici. C'est une sorte de vararg donc pour count2<24>, l'expression 0+...+N est en fait équivalent à 0+24. Pour obtenir la somme demandée il te faudrait explicitement indiquer tout les membres de la somme: count2<1,2,3,4,5,6, etc ,24>
Le formatage a fait sauter quelques caractères. Il fallait lire:
Mon explication est que, dans la version template, la quasi totalité du temps se passe lors de la 1ere instanciation (donc les 800 classes count_t<800>, count_t<799>, …). Pour les 99 tableaux restants, le coût est minimal car le compilateur possède déjà la classe count_t<800> dans sa table des symboles.
j'ai modifié ton code en changeant 24 en 800 et aussi en répétant la définition du tableau 100 fois (dans des scopes séparés).
Pour 100 compilations, la version constexpr prend 17.2s contre seulement 2.8s pour les template.
En doublant le nombre de définition des tableaux, le temps de compilation avec constexpr double quasiment (33.3s) alors que template ne change quasiment pas (3.0s).
Mon explication est que, dans la version template, la quasi totalité du temps se passe lors de la 1ere instanciation (donc les 800 classes count_t, count_t, …). Pour les 99 tableaux restants, le coût est minimal car le compilateur possède déjà la classe count_t dans sa table des symboles.
Au contraire la version constexpr doit réévaluer count(800) à chaque apparition.
#define P 800#if 1constexprintcount(unsignedn){return(n==0)?0:1+count(n-1);}#define N count(P)#elsetemplate<unsignedN>structcount_t;// le cas d'arrêttemplate<>structcount_t<0>{enum{value=0};};// le calcul récursif pour le cas général.template<unsignedN>structcount_t{enum{value=1+count_t<N-1>::value};};#define N count_t<P>::value #endifvoidfoo(){// Pouf ! Ça marche.{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}{intarray[N];}}
Posté par SChauveau .
En réponse au lien FTP a 50 ans.
Évalué à 1.
Dernière modification le 18 avril 2021 à 12:12.
C'est pas la mort. Cela ne changera rien pour 99% des utilisateurs qui n'utilisent jamais FTP (oui! je sais que, comme 83% des pourcentages donnés dans les commentaires, celui ci est inventé) et pour le 1% restant Firefox lancera un utilitaire externe comme pour un mailto:// ou un irc://
Et C++2000 ajoute également le support du caractère '·' (Codepoint 183, "MIDDLE DOT") dans les identifiants. On pourra donc améliorer la lisibilité du code avec des programmes inclusifs:
for (int compteur·se· = 0 ; compteur·se· < n ; ++compteur·se· ) {
if ( fsf_direct·eur·rice[compteur·se·] == richard_stallman )
throw sale_macho ;
}
Et dans tout les cas, on peut aussi faire un petit sudo apt changelog sudo pour s'assurer que CVE-2021-3156 est corrigé:
sudo (1.9.5p1-1.1) unstable; urgency=high
* Non-maintainer upload.
* Heap-based buffer overflow (CVE-2021-3156)
- Reset valid_flags to MODE_NONINTERACTIVE for sudoedit
- Add sudoedit flag checks in plugin that are consistent with front-end
- Fix potential buffer overflow when unescaping backslashes in user_args
- Fix the memset offset when converting a v1 timestamp to TS_LOCKEXCL
- Don't assume that argv is allocated as a single flat buffer
...
Je suis sous Debian Testing et j'ai vu passer une mise à jour du CVE-2021-3156 il y a plusieurs jours dans la version 1.9.5p1-1.1 (le 20 janvier à en croire le Changelog). J'imagine que toutes les Debians ont effectivement patché leur version actuelle avant même que 1.9.5p2 ne soit disponible. Cela me semble assez logique.
Sauf erreur, dans le projet MontBlanc, les unités vectorielles sont plutôt standard. C'est de l'ARMv8 NEON probablement avec des vecteurs un peu plus grands que les 128bits habituels (256, 512, ou peut être 1024?). Les compilateurs seront probablement gcc et llvm. Ce n'est pas comme si il y avait beaucoup d'autres possibilités.
Il faut voir du coté du Projet MontBlanc dont le but est de créer un processeur Européen à base d'ARM pour le HPC (le calcul haute performance). Le HPC est un domaine stratégique mais ce n'est clairement pas grand public donc le projet reste assez confidentiel hors des «milieux autorisés».
«les seules variables consistent donc dans les bibliothèques bas niveau (libc, pthread), des outils communs (tar, cp) et l'OS lui-même»
Et le compilateur? Je trouve étrange que rien ne soit mentionné au sujet du compilateur. GCC? LLVM? version?
Et même en supposant que les compilateurs soient identiques, il serait bien de s'assurer qu'ils étaient compilés de façons identiques. Plus généralement, il faudrait probablement recompiler tout les outils de compilations.
En effet, il n'y a pas de mémoire donc il ne faut oublier les cas ou le nombre d'essais est supérieur à 4096.
Et pour le fun, voici une petite commande bash simulant un tel tirage au sort. Chaque ligne indique le nombre d'essais pour trouver une valeur entre 0 et N-1 (donc avec une probabilité de 1/N) ainsi que la moyenne depuis le début.
Je remarque en particulier que la fonction isc_time_set représente le temps en secondes depuis le 1er jan 1970 avec un entier 32bit (donc le temps UNIX classique). C'est le fameux bug de l'an 2038.
je ne veux pas être méchant mais les textes rouges surlignés en blanc sur fond blanc semi-transparent sur une image … comment dire … ça pique les yeux.
Si on réduit la durée d'une génération à 20 ans alors le nombre de génération passe à 60 et le nombre de segments d'ADN hérités de cette période devient 46+60*34 = 2086. Cela ne change pas grand chose au résultat final.
[^] # Re: Super intéressant ...
Posté par SChauveau . En réponse à la dépêche Quelles températures après 2080 ?. Évalué à 2.
Du Fortran? Où cela?
[^] # Re: Pas si simple.
Posté par SChauveau . En réponse au journal Constexpr versus template. Évalué à 2.
Je n'aime pas trop le terme mais pour faire simple je suis un "expert" en compilation (doctorat en informatique + 20 ans à travailler dans le domaine). Quand je vois un article comme celui ci, je n'ai donc pas trop de difficultés à imaginer les implémentations possibles avec leur avantages et inconvénients.
Concernant l'indentation. Elle apparaît au milieu donc cela s'est probablement produit quand j'ai fait le gros copier-coller pour passer de 100 à 200 tableaux.
[^] # Re: Pas si simple.
Posté par SChauveau . En réponse au journal Constexpr versus template. Évalué à 2.
C'est possible mais cela pourrait coûter très cher car les fonctions constexpr peuvent contenir des boucles. Il n'y a donc pas de limite théorique au nombre d'appels de fonctions constexpr lors de l'évaluation d'une seule expression.
A ce propos, j'ai utilisé 800 dans mon code car g++ refusait de compiler avec 1000. Erreur 'too many recursive templates' ou quelque chose dans le genre.
[^] # Re: et avec les fold-expressions ?
Posté par SChauveau . En réponse au journal Constexpr versus template. Évalué à 2. Dernière modification le 23 avril 2021 à 17:11.
La confusion est facile à faire. Certains langages utilisent effectivement .. ou … comme opérateurs d'intervalle. Par exemple en Bash
[^] # Re: Pas si simple.
Posté par SChauveau . En réponse au journal Constexpr versus template. Évalué à 2.
On peut probablement avoir le beurre et l'argent du beurre en encapsulant la fonction constexpr dans une template. Et potentiellement avec une autre fonction constexpr par dessus pour garder une syntaxe lisible:
Dans ce cas, la classe sert en quelque sorte de cache.
[^] # Re: Belle exemple du gain en lisibilité
Posté par SChauveau . En réponse au journal Constexpr versus template. Évalué à 4.
A mon avis les 2 premiers sont plutôt
(1) le Porno
(2) la NSA qui surveille pour savoir qui regarde (1)
[^] # Re: et avec les fold-expressions ?
Posté par SChauveau . En réponse au journal Constexpr versus template. Évalué à 4.
Cela fait pas mal de temps que je n'ai pas utilisé les fold-expressions mais je ne pense pas que cela fonctionne comme tu le propose ici. C'est une sorte de vararg donc pour
count2<24>
, l'expression0+...+N
est en fait équivalent à0+24
. Pour obtenir la somme demandée il te faudrait explicitement indiquer tout les membres de la somme:count2<1,2,3,4,5,6, etc ,24>
[^] # Re: Pas si simple.
Posté par SChauveau . En réponse au journal Constexpr versus template. Évalué à 2.
Le formatage a fait sauter quelques caractères. Il fallait lire:
Mon explication est que, dans la version template, la quasi totalité du temps se passe lors de la 1ere instanciation (donc les 800 classes
count_t<800>
,count_t<799>
, …). Pour les 99 tableaux restants, le coût est minimal car le compilateur possède déjà la classecount_t<800>
dans sa table des symboles.# Pas si simple.
Posté par SChauveau . En réponse au journal Constexpr versus template. Évalué à 10.
j'ai modifié ton code en changeant 24 en 800 et aussi en répétant la définition du tableau 100 fois (dans des scopes séparés).
Pour 100 compilations, la version constexpr prend 17.2s contre seulement 2.8s pour les template.
En doublant le nombre de définition des tableaux, le temps de compilation avec constexpr double quasiment (33.3s) alors que template ne change quasiment pas (3.0s).
Mon explication est que, dans la version template, la quasi totalité du temps se passe lors de la 1ere instanciation (donc les 800 classes count_t, count_t, …). Pour les 99 tableaux restants, le coût est minimal car le compilateur possède déjà la classe count_t dans sa table des symboles.
Au contraire la version constexpr doit réévaluer count(800) à chaque apparition.
[^] # Re: Papy fera de la résistance ?
Posté par SChauveau . En réponse au lien FTP a 50 ans. Évalué à 1. Dernière modification le 18 avril 2021 à 12:12.
C'est pas la mort. Cela ne changera rien pour 99% des utilisateurs qui n'utilisent jamais FTP (oui! je sais que, comme 83% des pourcentages donnés dans les commentaires, celui ci est inventé) et pour le 1% restant Firefox lancera un utilitaire externe comme pour un mailto:// ou un irc://
# Et C++2000 ajoute également ...
Posté par SChauveau . En réponse au journal Sortie de C++ 2000. Évalué à 10.
Et C++2000 ajoute également le support du caractère '·' (Codepoint 183, "MIDDLE DOT") dans les identifiants. On pourra donc améliorer la lisibilité du code avec des programmes inclusifs:
for (int compteur·se· = 0 ; compteur·se· < n ; ++compteur·se· ) {
if ( fsf_direct·eur·rice[compteur·se·] == richard_stallman )
throw sale_macho ;
}
[^] # Re: Update instructions sur Ubuntu
Posté par SChauveau . En réponse au journal CVE-2021-3156 Vulnérabilité majeure dans sudo. Évalué à 2.
Et dans tout les cas, on peut aussi faire un petit
sudo apt changelog sudo
pour s'assurer que CVE-2021-3156 est corrigé:[^] # Re: Pas encore dispo ?
Posté par SChauveau . En réponse au journal CVE-2021-3156 Vulnérabilité majeure dans sudo. Évalué à 1.
Je suis sous Debian Testing et j'ai vu passer une mise à jour du CVE-2021-3156 il y a plusieurs jours dans la version 1.9.5p1-1.1 (le 20 janvier à en croire le Changelog). J'imagine que toutes les Debians ont effectivement patché leur version actuelle avant même que 1.9.5p2 ne soit disponible. Cela me semble assez logique.
[^] # Re: indépendance numérique
Posté par SChauveau . En réponse au journal Trois processeurs, trois processus. Évalué à 2.
Sauf erreur, dans le projet MontBlanc, les unités vectorielles sont plutôt standard. C'est de l'ARMv8 NEON probablement avec des vecteurs un peu plus grands que les 128bits habituels (256, 512, ou peut être 1024?). Les compilateurs seront probablement gcc et llvm. Ce n'est pas comme si il y avait beaucoup d'autres possibilités.
[^] # Re: indépendance numérique
Posté par SChauveau . En réponse au journal Trois processeurs, trois processus. Évalué à 2.
Il faut voir du coté du Projet MontBlanc dont le but est de créer un processeur Européen à base d'ARM pour le HPC (le calcul haute performance). Le HPC est un domaine stratégique mais ce n'est clairement pas grand public donc le projet reste assez confidentiel hors des «milieux autorisés».
Personnellement, je me demande à quel point le projet MB sera affecté par l'acquisition de ARM par NVIDIA
# Houps!
Posté par SChauveau . En réponse à la dépêche Systèmes d'exploitation pour téléphones — partie 4 : Firefox OS 🦊🚀. Évalué à 1.
La page correspondant au lien «Conclusion» ne semble pas exister. Un volontaire pour un petit DOS facile?
[^] # Re: il manque 01
Posté par SChauveau . En réponse au journal C'est traditionnel, ne boudons pas notre plaisir !. Évalué à 4.
Non, Non et encore Non!!!! Une ère moderne se doit de commencer avec l'an ZERO. Et puis aussi il devrait y avoir 256 jours dans une année.
[^] # Re: integer
Posté par SChauveau . En réponse au journal rsync. Évalué à 2.
Dans le même genre il y a cette vidéo assez amusante
https://www.youtube.com/watch?v=A8zWWp0akUU
[^] # Re: free
Posté par SChauveau . En réponse au journal raspi400. Évalué à 7. Dernière modification le 24 novembre 2020 à 15:03.
Et aussi 'sort' ce qui est très pratique pour des trucs du genre
# Et le compilateur?
Posté par SChauveau . En réponse au journal MacOS contre Debian sur un test de build de Firefox. Évalué à 10.
«les seules variables consistent donc dans les bibliothèques bas niveau (libc, pthread), des outils communs (tar, cp) et l'OS lui-même»
Et le compilateur? Je trouve étrange que rien ne soit mentionné au sujet du compilateur. GCC? LLVM? version?
Et même en supposant que les compilateurs soient identiques, il serait bien de s'assurer qu'ils étaient compilés de façons identiques. Plus généralement, il faudrait probablement recompiler tout les outils de compilations.
[^] # Re: 4096 vs 2048
Posté par SChauveau . En réponse au journal Yes Master. Évalué à 3.
En effet, il n'y a pas de mémoire donc il ne faut oublier les cas ou le nombre d'essais est supérieur à 4096.
Et pour le fun, voici une petite commande bash simulant un tel tirage au sort. Chaque ligne indique le nombre d'essais pour trouver une valeur entre 0 et N-1 (donc avec une probabilité de 1/N) ainsi que la moyenne depuis le début.
[^] # Re: 2038
Posté par SChauveau . En réponse au journal DHCP et heure système. Évalué à 3. Dernière modification le 22 novembre 2020 à 22:25.
et ISC n'est visible pas «2038 ready» si on en crois la fonction isc_time_set dans https://users.isc.org/~each/doxygen/bind9/isc_2unix_2include_2isc_2time_8h.html#806dda800c7f198aa373aab9d88e436f
[^] # Re: Bug isc-dhcp
Posté par SChauveau . En réponse au journal DHCP et heure système. Évalué à 4.
En effet. Le problème se situe probablement dans le code ISC. Je pense en particulier à leur API time.h
https://users.isc.org/~each/doxygen/bind9/isc_2unix_2include_2isc_2time_8h.html#806dda800c7f198aa373aab9d88e436f
Je remarque en particulier que la fonction isc_time_set représente le temps en secondes depuis le 1er jan 1970 avec un entier 32bit (donc le temps UNIX classique). C'est le fameux bug de l'an 2038.
# Humm ...
Posté par SChauveau . En réponse au journal CPU Ex0150 Radiodiffusion DAB+ en logiciels libres. Évalué à 1.
je ne veux pas être méchant mais les textes rouges surlignés en blanc sur fond blanc semi-transparent sur une image … comment dire … ça pique les yeux.
[^] # Re: Nombre d'ancêtres ayant contribué de l'ADN
Posté par SChauveau . En réponse au journal Tous cousins. Évalué à 5.
Si on réduit la durée d'une génération à 20 ans alors le nombre de génération passe à 60 et le nombre de segments d'ADN hérités de cette période devient 46+60*34 = 2086. Cela ne change pas grand chose au résultat final.