Quelques frameworks web C++ (2/2)

Posté par (page perso) . Édité par Benoît Sibaud, ZeroHeure, Xavier Claude, palm123 et Trollnad Dump. Modéré par patrick_g. Licence CC by-sa.
Tags :
33
12
déc.
2018
C et C++

Actuellement, il existe de nombreux langages et frameworks intéressants pour le développement web backend. Dans ce domaine, le C++ n'est pas le langage le plus à la mode, mais il possède cependant des atouts intéressants. En effet, le C++ possède de nombreuses bibliothèques (dont des frameworks web), il est réputé pour ses performances, enfin ses dernières normes le rendent plus agréable à utiliser.

L'objectif de cet article est de donner un aperçu des outils C++ disponibles pour le développement web backend, à partir d'un exemple d'application. Les codes sources présentés ici sont disponibles sur ce dépôt git. Les différents frameworks utilisés sont résumés en annexe (partie 2). Enfin, une liste de bibliothèques C++ est disponible sur Awesome C++.

Partie 2 : frameworks web.

Quelques cadriciels Web C++ (1/2)

Posté par (page perso) . Édité par Davy Defaud, ZeroHeure, Julien Jorge, palm123, Benoît Sibaud, Trollnad Dump et Xavier Claude. Modéré par ZeroHeure. Licence CC by-sa.
Tags :
31
9
déc.
2018
C et C++

Actuellement, il existe de nombreux langages et cadriciels (frameworks) intéressants pour le développement Web côté serveur. Dans ce domaine, le C++ n’est pas le langage le plus à la mode, mais il possède cependant des atouts intéressants. En effet, le C++ dispose de nombreuses bibliothèques (dont des cadriciels Web), il est réputé pour ses performances, enfin ses dernières normes le rendent plus agréable à utiliser.

L’objectif de cet article est de donner un aperçu des outils C++ disponibles pour le développement Web back‐end, à partir d’un exemple d’application. Les codes sources présentés ici sont disponibles sur ce dépôt Git. Les différents cadriciels utilisés sont résumés en annexe (partie 2). Enfin, une liste de bibliothèques C++ est disponible sur Awesome C++.

Partie 1 : exemple d’application, génération de HTML et accès à une base de données.

Journal Un harnais de test pour Qt

Posté par (page perso) . Licence CC by-sa.
Tags :
9
7
déc.
2018

Bonjour Nal,

Je viens de publier ce harnais de test qui permet de lancer facilement des tests écrits avec le moteur de Qt et de collecter les résultats dans un rapport en HTML.

Le contexte

Qt fournit quelques classes pour réaliser des tests unitaires, mais ils proposent de générer une application séparée pour chaque test, et de les lancer toutes à la fois via un "make check". Les résultats sont alors affichés sur la console et pénibles à lire. De (...)

Journal Déployer une application web C++ sur Heroku avec Docker et Nix

Posté par (page perso) . Licence CC by-sa.
17
15
nov.
2018

Les services de plateforme (PaaS) comme Heroku permettent de déployer des applications web écrites dans des langages comme PHP, Ruby, Java… Cependant, déployer des applications C++ est plus compliqué (portabilité de l'interface binaire ABI, gestion des dépendances…). Ce post présente plusieurs solutions pour déployer des applications web C++ sur Heroku, en utilisant des images Docker et le gestionnaire de paquet Nix.

Voir aussi : code source - vidéo youtube - vidéo peertube

Exemple d'application web C++ avec

(...)

Journal Spacewar! pour Haiku

Posté par (page perso) . Licence CC by-sa.
33
11
nov.
2018

Bonjour Nal,

Bon voilà, il fait froid dehors, je suis un peu fatigué et j'ai pas envie de replonger tout de suite dans le code de WebKit pour trouver pourquoi il est persuadé de ne pas savoir traiter les tags aujourd'hui, mes slides pour le Capitole du Libre sont prêtes (enfin à peu près…)…

C'est le moment de porter Spacewar! sur Haiku!

Spacewar! est un jeu vidéo écrit à l'origine pour le PDP-1 entre 1961 et 1962 (en savoir (...)

Journal Conversion entre pointeurs de fonctions incompatibles

Posté par (page perso) . Licence CC by-sa.
Tags :
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 (page perso) . Édité par Davy Defaud, Trollnad Dump, ZeroHeure, palm123, BAud et Benoît Sibaud. Modéré par ZeroHeure. Licence CC by-sa.
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 (page perso) . Licence CC by-sa.
Tags :
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 ?

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 (page perso) . Licence CC by-sa.
Tags :
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 (page perso) . Licence CC by-sa.
Tags :
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 (page perso) . Licence CC by-sa.
Tags :
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 . Édité par Davy Defaud, Nÿco et Benoît Sibaud. Modéré par Trollnad Dump. Licence CC by-sa.
21
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 (page perso) . Édité par David Marec, Benoît Sibaud, Oliver, Davy Defaud, palm123, gbdivers, whity, audionuma, Xavier Claude et kp. Modéré par Davy Defaud. Licence CC by-sa.
Tags :
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