Un petit post pour signaler l'avancement du projet, avec un changement majeur, et non des moindres, une réécriture from scratch. Et un autre changement majeur, et non des moindres, le C++ a été abandonné au profit du langage D ( http://dlang.org/ ).
J'ai beaucoup appris en C++, mais je ne souhaite pas continuer avec, pour plusieurs raisons :
- Tout l'attirail de boost nécessaire à mettre en place pour faire fonctionner asio ( et encore je ne sais même pas encore trop comment c'est tombé en marche ... ) est trop contraignant, et aurait été un boulet à supporter pendant tout le développement. La dernière facétie du bordel était que je ne pouvais pas mettre un simple cout dans le code du socket manager sans provoquer des bad allocs mystérieux au démarrage. Ca ma vraiment soulé et j'ai senti que ça allait continuer :)
- Les pointeurs sont dangereux. Très dangereux.
- Je ne souhaitais pas utiliser Qt à la base, parce que faire du C++ avec Qt, ben c'est faire du Qt en fait. Seulement Qt résout énormement de problématiques réccurentes dans la construction d'un programme, comme par exemple les slots, les pointeurs, les types de données et leur place en mémoire en fonction des plateformes ... passer du temps à compenser ( en partie du moins ) ces manques est certes instructif sur le C++, mais rééllement casse couille, et je ne pense pas avoir le niveau nécessaire pour développer un projet de cet ambition en continuant à galérer et à perdre du temps comme ça.
- Le multiplateforme ( du moins, sans Qt ), est contraignant et difficile à mettre en place.
Je crois que c'est a peu près tout pour les causes, maintenant pourquoi le langage D ?
- C'est un langage moderne, efficace, et qui je pense est appelé à devenir très populaire dans les années qui suivent. Son créateur le résume très bien : « If a language can capture 90% of the power of C++ with 10% of its complexity, I argue that is a worthwhile tradeoff. »
- La librairie de base fournit une très large variété d'outils ( un truc utile par exemple, les conversions en native endian <-> big/little endian, parmis beaucoup d'autres trucs ), bien documentés et accessibles ( docs à la msdn sur le site de dlang.org )
- Pas de bytecode, le compilateur "traduit" directement le code en D vers l'assembleur. Il dispose des avantages du code managé de plus avec par exemple un garbage collector ( désactivable ), compile incroyablement vite et est rapide à l'éxecution.
- J'ai pu produire une version windows ( je développe sous linux ) sans difficultés, et sans modifier le code. Je n'ai pas de mac pour tester mais je ne doute pas que cela fonctionne, la librairie de base D en est la raison. La seule difficulte fut de linker correctement la lib openssl ( pour la gestion du RSA ).
- Syntaxe de style C#/Java, malgré quelques différences c'est très facile à appréhender.
- C'est 10'000 fois plus facile.
Voila voila, stay tuned.