Journal Alignement chaotic neutre

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
21
10
juil.
2021

Demat' iNal,

J'ai récemment eu l'ineffable [1] plaisir de corriger un bug dans LLVM qui m'a causé quelques mauvaises soirées. Afin que l'histoire devienne légende et que la légende fasse mythe, je me décide à vous en raconter quelques détails amusants.

Considérons le bout de code suivant :

#include <string>
#include <boost/align/aligned_allocator.hpp> 

constexpr std::size_t align = 32;
template<class T>
using aligned_allocator = boost::alignment::aligned_allocator<T, align>;

using aligned_string = std::basic_string<char, std::char_traits<char>, aligned_allocator<char>>;

aligned_string make_string(int num) {
    return aligned_string(num, '\0');

}

#include <iostream>
(…)

Journal Sortie de C++ 2000

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
27
1
avr.
2021

Depuis la sortie de C++11, la langage C++ a connu de nombreuses évolutions: C++14, C++17 et enfin C++20 l'an dernier.

Cependant, ce rythme de sortie semblait assez lent aux vrais amateurs de C++, aussi le C++omité de standardisation a-t-il décidé de sortir une nouvelle version, affectueusement nommée C++2000. Fidèle à sa volonté de simplification du langage, le C++omité n'a intégré que les fonctionnalités les plus attendues et nécessaires :

  • Une nouvelle syntaxe pour apporter la puissance des template à l'assembleur (…)

Journal Toujours plus proche du Python avec C++

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
20
22
déc.
2020

Demat'iNal,

Le langage Python offre une sacré flexibilité dans la gestion des arguments: arguments positionnels, nommés, passage par mot-clef, c'est un peu la foire à la saucisse des paramètres.

J'aime particulièrement le passage d'arguments nommés, ça documente bien le site d'appel, et la syntaxe Python est assez flexible. Mais peut-on en faire autant avec C++ ? Tu te doutes bien que oui, sinon l'intérêt de ce journal serait limité :-)

La syntaxe supportée :

auto res = my_function_call(pos0
(…)

Journal LLVM 11.0.0

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
34
13
oct.
2020

Demat'iNal,

Après 6 release candidates, la version 11.0.0 de l'écosystème LLVM a finalement été rendue publique.

LLVM suit un cycle de sortie de 6 mois, quelles sont donc les grandes nouveautés ? On notera déjà l'arrivée du compilateur Flang dans la suite officielle LLVM, qui se dote ainsi d'un compilateur Fortran. Il vient remplacer le peu usité llvmgo qui a été retiré du dépôt officiel.

LLVM release note

LLVM possédait déjà un type vectoriel, p.e. <i32 x 4> pour (…)

Journal Debug de code Python embarqué dans du code C++

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
35
30
sept.
2020

Demat' iNal,

On m'a posé tantôt une question assez intrigante au premier abord :

Dans une application native qui embarque un interpréteur Python, et que l'on est en train de déboguer avec gdb, comment faire pour débogguer le code Python associé ?

Pour donner un peu de contexte, on peut lire la doc Python et en extraire ce petit code C:

 #define PY_SSIZE_T_CLEAN
#include <Python.h>

int
main(int argc, char *argv[])
{
    wchar_t *program
(…)

Journal C++ Hell/Heaven et les concepts

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
11
17
sept.
2020

Salut à tous,

C++20 apporte les concepts, mais par pure nostalgie, regardons comment émuler ça en C++11

#include <utility>

#define REQUIRES(x) class _ = decltype(x)

template<class T,
         REQUIRES(((std::declval<T>()==0), T(1), std::declval<T>() * (std::declval<T>() -1)))>
T fact(T const& n) {
    return n == 0
(…)

Journal Analyse de plage de valeurs dans Pythran

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
16
11
mai
2020

Demat'iNal,

Il y a quelques semaines, Pythran a gagné une analyse de plage de valeurs un peu plus solide que la précédente implémentation. Rien qui ne révolutionne la recherche, mais l'occasion pour moi d'explorer le sujet avec vous ici.

L'histoire commence en octobre 2018 avec l' issue #1029, alors que j'essayais de convertir des bouts de code de scikit-image à Pythran.

La fonction _integ

La fonction ci-dessous est extraite du fichier _hessian_det_appx.pyx, écrite en cython

# cython: wraparound=False
(…)

Journal Sortie de LLVM 10.0.0

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
39
31
mar.
2020

Demat'INal,

La semaine dernière sortait, après un processus de release candidate bien plus long que d'habitude (la rc1 date quand même du 30 janvier 2020), la version 10.0.0 de la toolchain LLVM, dont un des représentants les plus connus est le compilateur Clang.

Ce petit journal pour faire une sélection partiale des nouveautés.

Niveau Clang

[release note]

On notera principalement le support des concepts de C++20 à travers le drapeau -std=c++2a.

Si vous avez l'habitude de lancer (…)

Journal Toujours plus de fun avec C

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
10
27
mar.
2020

Demat' iNal,

En regardant cette vidéo: https://www.youtube.com/watch?v=lkgszkPnV8g, j'ai découvert une de ces petites perles qui viennent rompre la monotonie d'un quotidien où l'on dérive constamment.

int(riguant);

Ce code C compile. C'est d'ailleurs aussi un code C++, qui compile également.

Mais pourquoi donc ?

Journal C++, surcharge d'opérateur, ordre d'évaluation

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
17
21
fév.
2020

Demat'iNal,

Un collègue a récemment piqué mon intérêt (ouille) avec ce petit bout de code :

#include <map>
#include <iostream>

int main() {
    std::map<int, int> m;
    m[1] = m.size();
    std::cout << m[1] << std::endl;
    return 0;
}

Qui, compilé par deux version différentes de GCC (9.2 et 5.1) donne deux résultats différents (voir https://godbolt.org/z/4_xVPV).

Qu'en déduire (…)

Journal De retour du FOSDEM 2020

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
17
4
fév.
2020

Demat’iNal,

Le week‑end dernier avait lieu le FOSDEM, événement annuel, gratuit, pendant lequel différentes communautés se retrouvent autour d’un thème — les devrooms ou autour de sujets fédérateurs.

Il y a une ambiance assez spéciale pour une conf, vu que c’est éclaté sur le campus de l’ULB, et que vu la gratuité de l’évènement et son rayonnement, il y a beaucoup de monde. Vraiment beaucoup, à tel point que la stratégie gagnante me semble être de choisir (…)

Journal Exit Pyth(on|ran)2

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
41
10
jan.
2020

Demat'iNal,

parmi les vœux de 2020, il y en a un qui ne devrait pas passer inaperçu tellement il est attendu depuis longtemps. Je veux bien évidement parler de l'abandon officiel du support de Python2 au profit de Python3.

Les plus abasourdis pourront lire le python 3 statement. Et tout particulièrement cette phrase :

We will then be able to simplify our code and take advantage of the many new
features in the current version of the Python language (…)

Journal Quelques surprises techniques dans Pythran

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
31
7
nov.
2019

Demat' iNal,

Il y a peu sortait la version 0.9.4 du compilateur Pythran, délicatement appelée Hollsent. Pour rappel, Pythran est un compilateur pour du code scientifique écrit en Python, canal optimisation de performances.

À cette occasion, en plus de l'habituelle annonce sur la mliste de diffusion, un petit pot-pourri des améliorations techniques a été rédigé par votre serviteur. Et comme c'est quand même plus marrant d'écrire en français, en voici une traduction libre.

C'est surprenant, mais il (…)

Journal Pythran 0.9.3 a une Fedora sur la tête

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
15
21
août
2019

Demat'iNal,

Te remémores-tu de Pythran, ce compilateur pour le Python scientifique caractérisé par la compatibilité de ces entrées avec Python et l'effort mis sur l'optimisation de codes de haut niveau écrits en Numpy ? Si oui, tu peux lire la suite. Si non, une petite plongée dans l'histoire peut être bénéfique :-)

La version 0.9.3 a été publiée hier, et est disponible sur pypi, conda (à travers conda-forge) et à travers un tag git.

Mais (…)