Journal Le bon sens et le C++

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
6
14
nov.
2024

Demat' iNal.

On a l'impression, parfois, que dans un code compilé, pour savoir si une fonction (locale) est utilisée, il suffit de la supprimer, recompiler et si on obtient une erreur, elle était utilisée. Question de bon sens ! D'ailleurs c'est le cas en C [*]

Bien entendu, c'est faux, comme le montre le code C++ suivant:

#include <cstdio>

#ifndef REMOVE
static void foo(int x) {
    puts("foo(int)");
}
#endif

static void foo(float
(…)

Journal Du stockage des tableaux de chaînes de caractère

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

Demat' iNal,

J'ai récemment eu à me poser la question d'optimiser la taille de binaire pour un code équivalent à celui ci:

% cat a.cpp
const char *name(unsigned i) {
  static const char names[19][23] = {"normal",
                                     "bold",
                                     "italic",
                                     "bold-italic",
                                     "script",
                                     "bold-script",
                                     "fraktur",
                                     "double-struck",
                                     "bold-fraktur",
                                     "sans-serif",
                                     "bold-sans-serif",
                                     "sans-serif-italic",
                                     "sans-serif-bold-italic",
                                     "monospace",
                                     "initial",
                                     "tailed",
                                     "looped",
                                     "stretched"}
(…)

Journal Quel pov' type

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
13
21
mar.
2024

Demat'iNal

Il m'arrive de soumettre des patch à des projets Python utilisant cette délicate innovation qu'est le système de typage pour Python. Si si, tu sais ces trucs à base de mypy qui cherchent à améliorer le monde en le rendant plus rigide.

Regardez donc cette beauté :

try:
    from yaml import CSafeLoader as SafeLoader
except ImportError:
    from yaml import SafeLoader

qui essaie d'utiliser la version native (et plus rapide) qui peut ne pas être présent sur le (…)

Journal En passant par le FOSDEM, avec mes sabots 🎵

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
25
5
fév.
2024

Demat'iNal,

De retour du FOSDEM, je me permets de partager avec toi quelques notes techniques et découvertes glanées au fil des conférences.

SemVer in Rust [track rust]

Chouette présentation sur le semantic versionning. J'ai apprécié le temps passé à décrire les « différences d'appréciation » entre le SemVer strict et celui de Rust. Par exemple SemVer spécifie qu'une version majeur à zéro autorise de casser les APIs, mais la coloration Rust ne le permet pas.

Le but (…)

Journal Les codes fantastiques (et où les trouver)

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
42
1
juil.
2023

Demat' iNal,

Depuis fin 2022, j'anime une petite rubrique dans GNU/Linux Magazine, intitulée les codes fantastiques, où est décrit en une page une petite aventure informatique, un bout de code qui m'a amusé / plus / interpelé. [0]

Comme c'est les 25 ans de LinuxFR, et que j'en écris plus que ce qu'ils peuvent publier (trois d'avance pour le moment !), voici une sorte de ?hors série? que je ne publierai pas là bas du coup.

Les codes fantastiques

(…)

Journal SIGUSR1, SIGUSR2,..., SIGUSR_N ?

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
12
10
mai
2023

Demati'Nal,

À la lecture de signal(7), on se rend compte que deux signaux sont réservés pour les signaux utilisateurs SIGUSR1 et SIGUSR2. Deux, c'est peu. Je vous propose donc cette technique qu'on baptisera le signal knocking par analogie au Port_knocking

#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

int signalvalue = 0;

void sigusr1handler(int signum);
void sigusr2handler(int signum);

void sigusr1handler(int signum) {
  ++signalvalue;
}
void sigusr2handler
(…)

Journal Sortie de Pythran 0.13.0

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
29
2
mai
2023

Demat i'Nal,

J'ai publié ce matin une nouvelle mouture du compilateur pour codes scientifiques écrits en Python nommé Pythran. C'est la version 0.13.0 et elle porte le joli sobriquet bouch'hal.

Les plus impatients téléchargeront immédiatement la dernière version sur PyPi ou Github tandis que les plus curieux s'empresseront de lire le changelog associé.

Mais ce serait louper la suite de ce billet, où j'aimerai vous parler des bienfaits de l'émulation. Lors de ma veille, je suis tombé sur le (…)

Journal Quizz Python : esp[èa]ce de nom

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
15
8
mar.
2023

Demat' iNal

Regarde bien dans les yeux le bout de code suivant

def foo():
  x = 1
  class bar:
    x = x + 1
  return bar
foo()

exécute le mentalement. Rien d'exceptionnel ?
Et pourtant si,

NameError: name 'x' is not defined

Maintenant essayons avec :

def foo():
  x = 1
  class bar:
    y = x + 1
  return bar
foo()

Et là… non, rien.

Intuitivement, j'imagine que le x = x + 1 (…)

Journal Changelog, pour quoi, pour quoi ?

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
18
5
fév.
2023

Demat'iNal,

À quelques jours / semaines d'intervalles, j'ai eu besoin d'intéragir avec la notion de Changelog, ou plutôt de release note, mais je vais abusivement utiliser le premier terme pour désigner le second.

  1. Un utilisateur de la bibliothèque de types vectoriels xsimd nous a demandé d'en fournir un (ce que j'ai fait assez diligeamment)

  2. Lors d'une chouette présentation au FOSDEM hier, dans la devroom LLVM, quand j'ai appris que le Changelog n'était pas utilisé par les personnes (…)

Journal PyPI et les projets critiques

Posté par  (site web personnel) . Licence CC By‑SA.
32
11
juil.
2022

Demat' iNal,

En fin de semaine dernière, je reçois un courriel (oh, ce terme doucement désuet) des mainteurs de PyPI me félicitant pour mes trois projets promus "projets critiques", ce qui, à l'instar de mère-grand félicitant un jeune homme d'être costaud, puis s'empressant de lui demander de ranger sa valise dans le wagon TGV, me demande de mettre en place une authentification à deux-facteurs pour mon compte PyPI.

Petit retour sur cette expérience.

Déjà on comprend la motivation : Il (…)

Journal pythran 0.9.12 - heskenn

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

Demat' iNal,

je ne suis plus aussi diligent dans mes annonces de sortie de Pythran, mais j'ai quelques anecdotes à raconter pour la version 0.9.12 sortie hier, donc je me lance.

Petit rappel : Pythran est un compilateur pour noyaux de calcul scientifique écrit en Python. Il transforme ces derniers en code natif ne faisant appel à l'interpréteur qu'aux frontières avec le code interprété (pour la conversion entre objets Python et objet natifs), et peut générer du code vectoriel et/ou (…)

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
(…)