Je suis Imagic (un pseudonyme qui n'a aucun rapport avec une certaine gamme de produit) et je viens vous présenter mon projet de bibliothèque C++, "Tsux". Je programme dans plusieurs langages depuis maintenant quelques années et me suis rapidement voué d'affection pour le C++ et le JavaScript. J'aime les choses simples, parfois trop simples même.
C'est en développant des sites web que m'est venu l'idée de cette bibliothèque, ma curiosité ma poussée à regarder l'envers du décors, c'est à dire ce qu'il y a derrière php et comment fonctionne fondamentalement le système de requête <-> réponse. En voyant toute la diversité des techniques de développement du web aujourd'hui, je voulais réaliser un site web robuste, rapide et très épuré afin de renouer avec le "bas niveau" et la simplicité.
C'est dans cette idée qu'est née Tsux.
Généralités et avancements
Tsux est donc une bibliothèque C++ basée sur la bibliothèque FastCGI (fcgi et fcgi++) qui permet de créer des applications web. Il s'agit d'application car la principale particularité de FastCGI est de pouvoir lancer un processus "permanent" qui répond aux différentes requêtes qui lui sont soumises, le processus n'est donc pas rechargé pour chaque connexion. Ce qu'apporte Tsux à FastCGI, c'est un ensemble d'outils qui se veulent le plus simple possible afin de créer une application très rapidement.
Par exemple, un système de route (comme certains framework php) avec expression régulière, la gestion des variables post ou get, mais aussi la gestion de l'upload des fichiers. Tsux se veut complète, mais dans la simplicité, elle n'a pas vocation à devenir un framework C++ qui impose sa façon de faire. L'utilisation peut en être très libre, même si un ensemble d'outils permettent de faciliter le développement.
La bibliothèque vient juste de naître, mais elle permet déjà de réaliser des sites web intéressants.
Objectifs
La bibliothèque peut énormément évoluer mais ne deviendra pas compliquée. Du moins, elle essaiera de rester la plus simple possible. Parmi les évolutions à venir, j'ai quelques idées qui ne devraient pas tarder à voir le jour :
Identification des utilisateurs, similaire aux sessions de PHP (fait)
Une classe de gestion de traduction (fait)
Multithreading (mais cela peut s'avérer compliqué à mettre en place)
En dehors des fonctionnalités, développer un site avec Tsux nécessite d'avoir une façon de faire propre car aucune organisation n'est imposée pour envoyer les réponses. A l'avenir, des idées d'organisation du code source pourraient naître. Mais cela changerait drastiquement le code, c'est donc une évolution qui ne sera pas prise à la légère et qui demanderait beaucoup de réflexion.
Je réaliserais également un exemple de site web avec Tsux très prochainement.
Le projet et son originalité
Je n'ai pas trouvé énormément de bibliothèques de ce genre, c'est d'ailleurs une des raisons qui m'a poussée à la réaliser. Je ne voulais pas d'un framework de serveur web, car il est bien plus pratique de laisser des serveurs génériques gérer les applications et les sites (tel que nginx ou apache). Tsux permet de se concentrer sur l'essentiel et d'avoir de bonnes performances (qui s'expliquent principalement par le fait qu'il s'agisse d'une application compilée).
Au passage, la bibliothèque en elle même est sous la licence MIT afin de pouvoir l'utiliser sans restriction (voir tout de même la licence de FastCGI qui n'est pas explicitement "intégralement" libre).
Voilà, si vous voulez en savoir plus n'hésitez pas à consulter le github du projet (https://github.com/ImagicTheCat/Tsux) où je me suis empressé de réaliser de petits tutoriels (en anglais) pour la prendre en main. Et si vous avez des questions, vous pouvez me les poser ici, j'essaierais d'y répondre au maximum.
Ajout d'une classe Translator pour gérer le contenu en fonction de la langue
Possibilité de linker des fonctions à des identifiants dans les templates
Support des traductions dans les templates
Ajout d'un système de session
Ajout de "route rewriting" (pouvoir reécrire de manière interne les routes, pratique pour créer un espace admin, une page de maintenance ou encore pour suffixer les pages par la locale utilisateur /fr /en etc)
Pour l'instant les performances sont plutôt intéressantes, je reviendrais bientôt avec un exemple de site web plus ou moins simple.
bonjour , très bon projet, et très intéressant , j'ai déjà programmé en c++ et je connais le niveau de difficulté que t'as eu en développant cette bibliothèque donc félicitation
Bon , j'aimerais bien avoir des infos au niveau des performance , et aussi es que ta bibliothèque nous permet d'utiliser l'architecture MVC
Bonne continuation
On nous apprend à compter les secondes, les minutes, les heures, les jours, les années... mais personne ne nous explique la valeur d'un instant.
Pour le modèle MVC c'est à voir, le système de module, de route et de template permet de faire quelque chose de similaire, mais Tsux n'a pas vocation à imposer une manière de coder particulière ou de créer une architecture pour les fichiers. Ceci dit je vais y réfléchir en développant quelques sites avec, ça me permettra d'avoir des cas de figure plus complexe.
Au niveau des performances je pense qu'un site d'exemple pourra mieux les mettre en évidence. Après tout dépend, vu que c'est en C++ tu peux t'amuser à garder en mémoire vive tout un tas de truc et optimiser au maximum ton site.
Merci pour les encouragements. Je pense qu'à terme ça sera plus qu'un niveau d'abstraction, en fait c'est déjà un ensemble d'outil pour la réalisation de site en C++ (notamment par la présence du Translator).
Ajout d'une fonction similaire à htmlentities de php (doc)
Ajout d'une fonction "slugify" pour créer des slug (pas parfaite) (doc)
Ajout d'une classe Paginator (pour générer des paginations customisées facilement) (doc)
Ajout d'une classe MySQL basée sur la bibliothèque mysql-cpp-conn afin de faciliter l'utilisation de mysql (ça ne rentre pas totalement dans la philosophie de Tsux, car je devrais normalement faire la même chose pour tout les SGBD et ce n'est même pas forcément nécessaire, mais MySQL reste le plus utilisé et mysql-cpp-conn n'était pas pratique)
La classe MySQL n'est pas encore documentée sur le github, j'hésite encore à la laisser dans la bibliothèque.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.