Journal Conversion entre pointeurs de fonctions incompatibles

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

Posons nous dans le cas suivant (oui ça commence direct)

int strange_apply(int (*f)(int) {

    return reinterpret_cast<(int(*)(int, int)>(f)(1, 2);

}

Ce code compile avec un warning depuis le dernier gcc, et c'est bien car c'est en fait un undefined behavior (cast entre types de fonctions incompatibles dans le cas présent).

Et pourtant on voit pas mal de code (…)

Verilator 4.002

Posté par  (site web personnel, Mastodon) . Édité par Davy Defaud, BAud, ZeroHeure, bubar🦥, palm123 et Benoît Sibaud. Modéré par ZeroHeure. Licence CC By‑SA.
Étiquettes :
29
24
sept.
2018
Matériel

La version 4.002 de Verilator a été annoncée à la conférence ORConf2018 en Pologne.

Verilator est sans conteste le simulateur HDL open source le plus rapide du « marché ». Il permet de simuler des porte‐grammes écrits en Verilog synthétisable.

Le nouveau logo de Verilator

Journal Le quiz c++ de l'été - Débriefing

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
12
31
août
2018

Très bonne discussion sur le fil du Quizz C++ de l'été !

Sur le problème en lui-même, Clément V a donné la bonne réponse en parlant de temporaire dans le 4ème appel (shared_ptr de B). Je vais développer :

Les deux premiers appels sont identiques en terme de code machine. En effet, en C++, un objet B dérivant de A est, au point de vue de l'arrangement mémoire, un A, suivi des attributs de B (oublions l'héritage virtuel pour le (…)

Journal Ⓒ✙✙ Le tiret bas (underscore) au début des variables membres ?

Posté par  (site web personnel) . Licence CC By‑SA.
11
18
août
2018

En réponse à guppy, j’ai rédigé un long commentaire qui mérite d’être promu en journal.   \_o_/

La norme C++ réserve l’utilisation du tiret bas (underscore)

Résumé de la norme Ⓒ✙✙ : https://en.cppreference.com/w/cpp/language/identifiers

[…]

An identifier can be used to name objects, references, functions, enumerators, types, class members, namespaces, templates, template specializations, parameter packs, goto labels, and other entities, with the following exceptions:

  • the identifiers that are keywords cannot be used for other purposes;
  • the identifiers with a double underscore (…)

Journal Tirez-vous une bûche, qu'on cause C++ et singletons

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
17
14
août
2018

Le métier est venu me voir. "On aime beaucoup ton composant A, celui qui cache les données depuis la base, mais on voudrait l'instancier tout plein de fois, sans qu'il recharge tout à chaque fois."

Comme j'aime bien le métier, je me suis attelé à la tâche, je me suis bouché le nez, et je leur ai planqué une petite variable globale des familles histoire de mettre en commun les caches. Et ils étaient fort contents.

Ensuite, j'ai regardé ma (…)

Journal Faites des tests !

Posté par  . Licence CC By‑SA.
14
22
juil.
2018

Actuellement sur le développement d'un programme en langage C++ et avec la quête de produire un logiciel fiable et performant je me suis mis à la recherche d'outils me permettant d'atteindre cet objectif.

Après quelques recherches, j'en ai découvert deux, le test unitaire et fonctionnel. Pour le test unitaire j'ai choisi la librairie Boost et un script Bash pour le test fonctionnel.

Durant la rédaction de ces tests, j'ai été surpris plusieurs fois à corriger des bugs dans mon programme (…)

Journal Une structure partiellement constante en C++

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
27
6
juil.
2018

Hop, quelques réflexions sur un langage non réflexif.

Si on veut un tableau de taille statique, on peut utiliser depuis C++11 la classe std::array<T, N>.

std::array<long, 5> my_array{{1, 2, 3, 5, 8}};

Si on veut forcer ce tableau à ne contenir que des constantes utilisables à compile-time, on a la possibilité de marquer cette déclaration constexpr.

constexpr std::array<long, 5
(…)

Journal Pythran, en plein délire

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
50
23
mai
2018

Cher journal, je dois te confesser que j'ai déclenché quelque chose dont j'ai un peu honte.

Tu te souviens bien sûr de Pythran, ce compilateur pour noyau scientifiques écrit en Python, et de ce petit détail d'implémentation qui veut que le compilateur commence par transformer les fonctions Python en fonctions C++ template (a.k.a. transformer du code Python en meta-programme C++ pour faire stylé voire pédant).

Un choix de design a été de faire en sorte que ces fonctions ne (…)

vcpkg, un gestionnaire de bibliothèque pour C++

Posté par  (Mastodon) . Édité par Davy Defaud, Nÿco et Benoît Sibaud. Modéré par bubar🦥. Licence CC By‑SA.
Étiquettes :
20
25
avr.
2018
C et C++

Depuis 2016, Microsoft développe vcpkg, un outil bien sympathique qui permet de télécharger et compiler un ensemble de bibliothèques et leurs dépendances. Jusqu’à présent, cet outil était disponible uniquement pour la plate‐forme Windows. Depuis le 24 avril 2018, cet outil prend également en charge les plates‐formes GNU/Linux et macOS. vcpkg est publié sous licence MIT.

Une limite cependant est que la compilation des bibliothèques sur GNU/Linux est uniquement statique. La raison invoquée est qu’il est plus compliqué d’utiliser des bibliothèques sur GNU/Linux (LD_LIBRARY_PATH, rpath, etc.) que sous Windows, où l’on peut tout mettre dans un seul répertoire.

Quoi qu’il en soit, c’est une bonne nouvelle. Même si les paquets des distributions resteront une source privilégiée pour obtenir les fichiers de développement d’une bibliothèque, vcpkg offre une alternative intéressante pour ceux qui voudraient tout construire en statique de manière à fournir un seul binaire pour toutes les variantes de GNU/Linux.

C++17 libère size(), data() et empty()

Posté par  (site web personnel) . Édité par David Marec, Benoît Sibaud, Oliver, Davy Defaud, palm123, gbdivers, whity, claudex, audionuma et kp. Modéré par Davy Defaud. Licence CC By‑SA.
Étiquettes :
36
17
mar.
2018
C et C++

Cette évolution est dans la continuité de la libération de begin() et end() en C++11. Ces trois nouvelles fonctions, size(), data() et empty(), avaient été oubliées lors des deux dernières évolutions. Le C++17 corrige le tir.

Tout d’abord, nous allons revenir sur les raisons de cette évolution. Puis, nous détaillerons ce qu’apporte chacune de ces trois fonctions. Et, pour conclure, nous verrons comment on va pouvoir les utiliser.

Les fonctions empty(), data() et size() sortent de la prison « class » et rejoignent les fonctions begin() et end() qui les accueillent. Ces deux dernières fonctions accueillent également string_view. Derrières les barreaux de la prison des spécifications techniques, Unified-Call-Syntax va devoir y rester trois ans pour tenter de sortir avec C++20

Forum général.petites-annonces [Stage][Annecy] Développeur middleware C++

Posté par  . Licence CC By‑SA.
Étiquettes :
0
8
mar.
2018

Bonjour à tous,

Ce stage se déroulerait au sein de la société Overkiz à Annecy.

Description de l'entreprise

Avec sa gateway, Overkiz permet aux fabricants, fournisseurs de service, constructeurs immobiliers et distributeurs, de commercialiser rapidement des solutions domotiques.
Grâce à sa plateforme IoT, ils peuvent installer, connecter, piloter et entretenir une vaste gamme d’équipements multi-marques, destinés à l’automatisation de l’habitat.

Mission du stage

Pour votre stage vous serez intégré à l’équipe middleware, travaillant en méthode agile scrum, dans un (…)

Journal 'Markdown presentation processor' (ou de l'intérêt des fichiers texte).

Posté par  (site web personnel) . Licence CC By‑SA.
22
25
fév.
2018

Cherchant à réaliser une présentation vidéo, et utilisant déjà par ailleurs Writer de Libre Office, je me suis naturellement tourné vers Impress pour cela. C'est peut-être un très bon logiciel dans le genre, mais, personnellement, le fait de devoir m'occuper, en même temps, et du contenu, et de sa mise en forme, le peu de motivation que je pouvais avoir disparaissait comme neige au soleil. C'est la première fois que je rédigeais une telle présentation, et c'est le genre (…)

Journal Un tap tempo en ligne de commande

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
39
19
fév.
2018

Bonjour à tous,

j'aimerai vous présenter mon dernier petit projet : TapTempo.

C'est un détecteur de tempo en ligne de commande. L'utilisateur frappe une touche en cadence régulière et le programme en déduit le tempo correspondant. Il est affiché en nombre de battements équivalent par minute (ou BPM en anglais).

La plupart des logiciels audio-numériques ainsi que beaucoup de d'instruments électroniques ont cette fonctionnalité, mais ça me rebutait de lancer un gros logiciel ou de me déplacer vers mon (…)