C/C++ [Projet] Couche socket pour D²

  • Auteur de la discussion Anonymous
  • Date de début
A

Anonymous

Invité
#21
La réécriture en D a commencé au même moment que le précédent post, mais je n'avais pas mis à jour l'avancement, donc voici :

L'état actuel est bien plus avancé que là où en était le bot en C++, voici ce qui est fonctionnel pour le moment.
- Réseau, entièrement fonctionnel, il a fallu écrire moi même une classe socket asynchrone ce qui fut un peu une épreuve ^^
- Architecture, le bot est construit, même si il y a un peu de boulot sur la reflection pour pouvoir exploiter complètement le polymorphisme comme un bot moderne ( et éviter les switchs géant par exemple ... )
- Utilitaires, réécriture d'une classse RSA ( exploitant aussi la lib openssl ), des IO binaires ( très facile avec la lib de base du D ), ainsi que d'autres trucs
- Types de données, messages, types sont implémentables dans le bot, il faut que je travaille sur un créateur de protocol à la manière de bim pour automatiser cette tache
- Comportement, je ne suis pas insatisfait de ce que j'ai fait pour le moment à ce niveau ( système de phases qui appellent des handler qui leur appartiennent à la réception d'un message ), bien que ce soit encore un peu à retravailler, mais on verra plus tard pour ça
- Affichage, un logger joli pour arriver à lire les messages dans la console
- Divers : de part sa construction, cette fois-ci le programme est en théorie capable de gérer plusieurs comptes avec la même instance, j'ai fait ça proprement :)

Bien entendu l'auth aux serveurs de login est fonctionnelle, et le bot n'accuse aucun problème de crash comme c'était le cas avec son prédecesseur.
La consommation de mémoire est probablement un peu excessive, 2 mo chargés une fois que le bot a finit l'auth. Je devrais m'occuper de détruire quelques objets manuellement à différents endroits du code, on verra plus tard pour ça. Il est possible que cette augmentation de consommation de mémoire soit due à l'augmentation de la taille du code ( import de plus de librairies notamment ), et le D est quelque peu gourmand par rapport au C++, rien de dramatique en tout cas pour le moment.



Edit : j'ai testé avec 3 comptes en même temps, le bot fonctionne très bien, et réussit les trois logins en parallèle. L'augmentation de mémoire est minime ( de l'ordre de quelques kb ), donc je confirme que c'est bel et bien multithreadé correctement, et multicompte. Et du coup aucun soucis de mémoire.
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#22
Joli bot, oui en effet tu as bien ´multithreadé´.
Tu fait deux thread par client ?
 
A

Anonymous

Invité
#23
Non, lors de mon test il n'y pas pas un thread par bot, en fait dans le main thread tous les bots sont instanciés, mais ils possèdent tous un thread à eux pour la connexion réseau. Il est par contre tout à fait envisageable et très facile de threader les bots indépendamment du thread courant ( + deux ou trois lignes de code pour lancer un thread ), ce qui ferait un total de 3 threads pour un bot, 5 pour deux, etc ... et ce qui ferait que ce serait entièrement multithreadé, mais ça ne changerait pas grand chose de toutes façon en terme de performances.

En revanche plus tard je le mettrais surement en place, puisque j'envisage quelque chose en plus dans le thread courant, d'assez inédit je dois dire dans les bots et intéressant je pense, vous en saurez plus bientôt ( quand je serais bachelier et en vacances pour coder ... ).
 
A

Anonymous

Invité
#24
Bonsoir,

Même si pas de nouvelles depuis longtemps, j'ai pendant ces vacances un peu avancé le bot et surtout j'ai crée en parallèle un début d'émulateur 2.0.
Mais là avec les études qui reprennent, je n'ai plus le temps de m'en occuper, donc j'ai décidé de libérer mes deux projets sous license GPL v3, et je les ai mis sur github.

https://github.com/Munrek/NuxBotD
https://github.com/Munrek/NuxEmu

En tant que tels ces projets sont un peu inutiles, et le code est _loin_ d'être propre, ni optimisé, ni terminé en fait. J'espère seulement que ça puisse inspirer éventuellement des gens pour apprendre le langage D.
 
A

Anonymous

Invité
#25
Très bonne initiative. Le langage D a l'air très productif, mais est-ce que ça suit niveau performances ?
Je trouve que Qt résout déjà quasiment toutes les problématiques du C++ (pointeurs, threads, signaux/slots...) ; l'avantage du D est donc que c'est plus "joli" ?
 

Sparkdaemon

Staff
Membre du personnel
Inscrit
7 Avril 2009
Messages
556
Reactions
3
#26
Le D a l'air sympathique et moins complexe que ses confrères. Je vais me pencher sur tes sources pour voir si j'y capte quelque chose :lol:
 
A

Anonymous

Invité
#27
Caramba a dit:
Très bonne initiative. Le langage D a l'air très productif, mais est-ce que ça suit niveau performances ?
Je trouve que Qt résout déjà quasiment toutes les problématiques du C++ (pointeurs, threads, signaux/slots...) ; l'avantage du D est donc que c'est plus "joli" ?
Niveau performances, le D produit des applications natives. Rien à voir avec du bytecode Java ou C#, quoi qu'on en dise. Le compilateur DMD a de bonnes performances, mais il me semble que GDC ( frontend D pour GCC ) produit des programmes encore plus performants, sous Linux en tout cas.

C++ est un bon langage, cependant il a été conçu il y a une autre époque. J'ai lu récemment le livre de Stroustrup, qui explique entre beaucoup d'autres choses les raisons de choix comme les entêtes de préprocesseur par exemple. Ces contraintes répondaient à l'époque aux limites des compilateurs, en plus de la volonté de compatiblité avec le C, ce qui est un des piliers du langage ( et vous n'êtes pas sans savoir que les compilateurs convertissent le C++ en code C avant de le compiler ). Aujourd'hui développer une application sure en C++ est très difficile, puisque ont y a rajouté successivement des couches en plus des fonctionnalités du C et que le fonctionnement du langage et ses spécifications sont mal comprises globalement ( par exemple, il a 4 façons différentes d'avoir des tableaux, deux façons d'instancier des objets avec les pointeurs et le mot clef new, il y a beaucoup de manières de faire mais peu de correctes, etc ... il y a des tonnes d'articles d'experts C++ sur le sujet ).

Le D est un langage moderne, conçu avec les moyens et les contraintes actuelles. Le D veut que le code qui à l'air correct, fonctionne correctement et soit sur, sans avoir à gérer de comportements étranges à causes d'une mauvaise connaissance du langage. En D pas de headers de préprocesseur, puisque ça ne sert à rien pour les compilateurs, et une gestion managée de la mémoire ( garbage collector ). Le langage possède une librairie de base ultra complète, et complètement multi plateforme. Pas d'héritage multiple car comme en Java ses créateurs estiment que c'est une mauvaise pratique, et une gestion des threads et de la sureté entre threads ( mot clef shared, pe ) nativement.

Biensur on peut être satisfait des outils fournis par Qt pour tous ces aspects, et c'est vrai que c'est un super SDK pour créer des applications puissantes et pratiques, mais ça n'est qu'une surcouche sur un langage déjà vieillissant et loin d'être parfait. Le D veut être le digne successeur de C++, en proposant quelque chose de moderne.

Bon voila je vais pas écrire un roman non plus, mais déjà il y a quelques pistes de réflexion sur les raisons de s'intéresser au D.
 

Sparkdaemon

Staff
Membre du personnel
Inscrit
7 Avril 2009
Messages
556
Reactions
3
#28
J'ai DL le bouzin hier soir, et ta source avec.
Question peut être stupide (Même sûrement) mais, Quel éditeur tu utilise pour D ? (J'ai vu une solution Visual Studio mais j'ai pas trouvé comment l'ouvrir avec... =_=)

Le D a l'air intéressant, Ca m'intéresse D:
 
A

Anonymous

Invité
#30
Tout cela est très intéressant, et surtout très juste ! Je vais donc me mettre au D rapidement :p

La lib standard est très séduisante aussi, mais pour ce qui est de l'interface graphique (plus pratique pour un bot) il y a des choses en natif ou il faut passer par une lib externe ?

Enfin où as-tu appris le D ? Directement dans la référence ? Peut-être qu'un tutoriel/lien t'as aidé en particulier pour commencer ?
Je dois avouer que j'ai du mal à trouver des bons tutos progressifs comme on peut en trouver par dizaines en C++ ;)
 
A

Anonymous

Invité
#31
Oui la doc en d est uniquement en anglais.
Pour un book complet : http://ddili.org/ders/d.en/index.html
Pour les gui tu as des bindings pour toutes les libs connues ( qt, gtk, wxd, winforms ), c'est selon ta préférence. En revanche utiliser l'éditeur graphique qt si c'est ta question n'est pas possible directement. Il faudra coder ta gui en code D. Le site officiel bien sur est incontournable pour la référence sur la librairie et certains fonctions du langage. J'espère que tu apprécieras le D autant que je l'apprécie moi :)
 
A

Anonymous

Invité
#32
Je l'espère aussi :) De toutes façons l'éditeur graphique de QT n'est utilisable que pour des interfaces simples. Dès qu'on fait des choses un poil plus complexes c'est difficile à utiliser, donc ça ne me dérange pas du tout.

Mais une question qui avait été posée sur un forum me trotte toujours dans la tête : puisque que le D est si fantastique, pourquoi tout le monde ne se jette pas dessus ?
Si je ne connaissais pas ce forum, je ne connaitrais toujours pas le D... :D

edit : super ton lien, c'est ce que je cherchais ;)
 
A

Anonymous

Invité
#33
Plusieurs raisons pour la méconnaissance du D :
- aucune communauté francophone sur le langage ( donc pas de diffusion, ni de ressources disponibles en français ). Crois moi que si il existait un tuto sur le SDZ ça aiderait énormément, même une traduction du book de mon autre post ^^
- dans la communauté anglaise il monte doucement, mais il n'est pas très connu car ce contrairement à C++/C#/Java il n'a aucun environnement de développement dédié ( sdk Qt, .net, eclipse etc ... ) ni n'est sponsorisé par aucune entreprise ( Go = google, Vala = gnome, Rust = mozilla, etc ... )
- c'est une technologie assez jeune qui a été assez critiquée à ses débuts parce que les premières versions avaient les problèmes du C++, c'est maintenant corrigé depuis un moment
- la malchance, y'a des fois quand tu arrives pas à créer l'engouement, aussi fantastique que ta découverte est, ça fait plouf quand même. Peut être qu'un jour le D éclatera au jour, en tout cas j'y travaille de mon côté, ça fait un moment que j'en parle à des connaissances. J'ai du initier au moins une dizaine de personnes au langage.

Pour la question de la communauté, il se peut que je résolve le problème prochainement, j'y travaille ;)
 
Haut Bas