Programmation
La programmation informatique est un trés vaste sujet. D'autant plus vaste que les langages de programmation sont nombreux et trés variés dans leur expressivité et abstractions. Donc, en choisissant le C++, il y aura déjà des déçus, des heureux et des sceptiques pour discuter de la pertinence de ce choix. Il y aura aussi de l'assembleur x86 (64 bits) impliquant une plateforme spécifique (processeurs x86 sous Windows) donc la portabilité s'en trouve restreinte. De toute façon, il n'est pas question de proposer une librairie portable et prête à l'emploi mais d'exposer comment on pourrait coder une telle librairie. Le code présenté est celui sur lequel je travaille dans mon environnement et pour mon usage en tant que loisir. Il sera pleinement fonctionnel et "propre" pour répondre à ces critères. En aucun cas il pourra servir tel quel pour un besoin professionnel.
L'objectif est de programmer un environnement permettant de faire des Mathématiques appliquées en précision arbitraire. Pour cela, il est bien évidemment nécessaire de quitter les types internes du C++ (int et double) pour les remplacer par d'autres représentations et de programmer, sur ces représentations, les opérations élémentaires et les fonctions "classiques". Dans un second temps, et afin de ne pas avoir à reprogrammer chaque algorithme, créer un "langage" interprété qui permettra de manipuler les objets mathématiques usuels (nombres complexes, vecteurs, matrices, etc...).
Ce site étant encore trés jeune, il n'y aura pour le moment pas grand-chose. Mais j'ajouterai de nouveaux exposés au fur et à mesure du développement. J'ai déjà pas mal de code mais il est en C (et non en C++) et nécessite d'être revu pour être présentable. Ce sera un excellent exercice de prendre du recul et de revoir ce code en cohérence, en lisibilité et en robustesse.
Cadre de travail
Quiconque a déjà programmé en C/C++ s'est rendu compte que ce sont des langages d'assez bas-niveau. Notamment en ce qui concerne la gestion de la mémoire. La librairie standard fournit pas mal de fonctionnalités de plus haut niveau mais, de mon point de vue, souffre du gros défaut de ne pas permettre une bonne gestion de la mémoire (en tout cas, pas facilement).
C'est la raison pour laquelle il est souvent nécessaire de coder un framework permettant de gérer ces parties pénibles: mémoire, plateforme (Windows, Linux, Android, etc...), compilateur, structures de données, chaines de caractère (y compris jeu de caractères), etc...
L'implémentation d'un framework généraliste est déjà un vaste sujet, assez subjectif et non trivial. Je ne souhaite pas discuter des tenants et aboutissants dans ce domaine pourtant nous en aurons tout de même besoin. D'un autre côté, j'aimerais que le code proposé dans ces pages ne soit pas trop dépendant d'un framework particulier afin de permettre à un maximum de personnes de le comprendre et de l'adapter facilement si elles le souhaitent.
Pour le moment, je ne souhaite pas imposer mon framework personnel pour une multitude de raisons, je n'ai pas encore de dépot public GitHub en place et je voudrais avancer dans l'écriture de ces pages. Donc, bientôt, je mettrai des fichiers zip en téléchargement, ça sera plus simple... Merci de votre compréhension.