== Solutions

Nous abordons ici plusieurs solutions possibles pour pallier au problème de python concernant la gestion des tableaux multidimensionnels. 

Python a développé le concept de "type hint" permettant d'ajouter graduellement des types à notre code et assurer la sécurité dans des zones critiques de notre code. Il y a aussi Cpython qui permet de créer du code à la frontière entre c et python et permet de produire du code plus efficace. Il y a cependant certaines plaintes qui présentent le système de type de python comme non suffisant pour interagir avec des librairy. L'équipe de #cite(label("Liu2020-ja")) ont développé un système de type qui permettrait d'étendre des modules qui manipulent les tableaux multidimensionnels qui sont beaucoup utilisés dans les data sciences. 
D'autres scientifiques des données ont aussi opté pour d'autres langages comme Julia qui présente les avantages d'un langage construit pour la science des données et qui propose un paradigme proche de l'orienté objet qui a ses avantages. De plus Julia est compilable et utilise par défaut la compilation JIT (Just in time compilation). 

Mojo est un langage qui est arrivé récemment et se prononce comme le remplaçant de python. Comme le langage Typescript est un super set du langage Javascript, Mojo est un super set de python apportant un système de type plus robuste, une réelle programmation parallèle et la création de binaires. Mojo a été spécifiquement créé pour le développement d'intelligences artificielles. Ce langage a été fait pour faciliter la transition depuis le python. Malheureusement, Mojo n'a pas de système de type capable de traiter avec les tableaux multidimensionnels. Puisqu'il prend python pour base, il a quelques limitations sur sa syntaxe de base. 

R est un langage conçu par les statisticiens, pour les statistiques premièrement et à des applications intéressantes pour les sciences des données et l'intelligence artificielle. Comme les langages abordés précédemment, R est un langage dynamique et faiblement typé, rendant l'aisance d'écriture simple et le prototypage accessible et l'interaction agréable. La particularité de R vient de ses structures de données qui sont basées sur des vecteurs, rendant les calculs basés sur l'algèbre linéaire et le traitement de collection de données faciles. Dans la philosophie de R, tout est vecteur, même la définition de valeur génère automatiquement des vecteurs. Nous traiterons du système de type de R plus en détail tout un peu plus loin. 

<NAME> et al #cite(label("10.1145/3428249")) ont élaboré un système de type pour le langage R et ont défini les principales caractéristiques qui le rendrait utilisable. L'équipe a fait le constat que R peut admettre difficilement un système de type au vu de sa nature dynamique. De plus, il faudrait définir un système de type qui apporterait un changement qui pousserait son adoption par la communauté de R. C'est pourquoi ils ont opté pour un système de type plus simple axé sur les signatures de fonctions (Typetracer) et un outils d'évaluation du typage du code en cours d'exécution (ContractR). Leur résultat ont été concluant, le système de type est facile à utiliser et montre un taux d'erreur d'inférence de type inférieur à 2%. Leur système de type est un bon fondement pour l'élaboration d'un éventuel système de type pour R. 

== Ma solution


J'ai pris la décision de créer un langage de programmation qui inclura un système de type efficace pour la manipulation de tableaux multidimensionnels ainsi que la création de modules pour les sciences de données. Il serait intéressant dans un future de créer ce langage sur le modèle du langage R comme cela était initié à la base. Pour l'instant, nous nous concentrons sur un langage noyau qui contiendra tous les éléments nécessaires à la manipulation de tableaux multidimensionnels. 

Nous verrons en détail notre solution, mais nous pouvons déjà décrire les caractéristiques de notre solution. Celle-ci inclura bien évidemment des notions comme les tableaux, les génériques, les types dépendants et tout autres fonctionnalités qui rendrait le langage plus puissant dans son expression. Cependant nous prendrons aussi en compte le besoin pratique de notre recherche. Il faut que la solution puisse aussi être flexible et raisonnable en termes de courbe d'apprentissage pour éviter de créer un modèle théorique qui ne marchera jamais pour la communauté des scientifiques de données. 

#pagebreak()

= Pourquoi les types ?

Les systèmes de types détectent les erreurs dans les langages de programmation en analysant les types de données avant l'exécution. Ils imposent des règles strictes pour garantir des opérations cohérentes, comme empêcher l'addition d'un entier et d'une chaîne de caractères. En vérifiant les types lors de la compilation ou avant l'exécution, ils détectent des erreurs telles que les affectations incorrectes, les appels de fonction avec des types inadéquats, et l'accès à des propriétés inexistantes. Ces vérifications réduisent les erreurs d'exécution et facilitent la détection précoce des bogues, améliorant ainsi la fiabilité du code.

Un système de types bien conçu pour un langage utilisant des tableaux multidimensionnels présente plusieurs avantages significatifs dans le domaine de la programmation et des sciences de données. Tout d'abord, un tel système permet de spécifier et de vérifier de manière statique la structure et les dimensions des tableaux utilisés dans le code. Cela aide à prévenir les erreurs courantes telles que les accès hors limites ou les opérations incompatibles sur les tableaux. Par exemple, en définissant des types spécifiques pour les tableaux à deux dimensions (comme matrices) ou à trois dimensions (comme tenseurs), le système de types peut garantir que les opérations effectuées sur ces structures respectent leurs propriétés dimensionnelles attendues.

De plus, un système de types robuste pour les tableaux multidimensionnels facilite la maintenance du code en offrant une documentation intégrée sur la structure et l'utilisation des données. Cela rend le code plus lisible et compréhensible pour les développeurs travaillant sur des projets collaboratifs ou en phase de maintenance. En spécifiant clairement les types des tableaux, les développeurs peuvent également bénéficier de fonctionnalités telles que l'inférence de types et la détection automatique d'erreurs potentielles lors de la compilation ou de l'exécution du programme.

De plus, un système de types bien adapté aux tableaux multidimensionnels peut favoriser l'optimisation automatique des performances. Les compilateurs et les interprètes peuvent utiliser les informations sur la taille et la disposition des tableaux pour générer un code plus efficace, exploitant par exemple la localité spatiale et temporelle des données lors des accès mémoire et des calculs.

Enfin, pour les applications en science de données et en calcul scientifique, où la précision des calculs et la gestion efficace des données sont cruciales, un système de types pour les tableaux multidimensionnels contribue à assurer la cohérence des opérations et la validité des résultats. Cela permet aux chercheurs et aux analystes de se concentrer sur les aspects conceptuels et algorithmiques de leurs travaux sans être constamment préoccupés par les problèmes liés à la gestion des données. 

La solution développée dans ce papier est indépendante du langage de programmation, mais pour développer une solution qui aurait le potentiel d'être utilisée dans le futur, il faut adopter la solution de prendre ce qui existe déjà et en faire une version améliorée. J'ai décidé de choisir le langage R pour plusieurs raisons. Premièrement, par rapport à ses alternatives (Python, Julia), R ne dispose pas d'un système de type explicite permettant d'établir la correction des opérations fait dans le cadre du langage. Deuxièmement, le langage R est la raison pour laquelle ce projet a débuté à l'origine, car j'avais le désir de mettre en avant ce langage pour proposer une alternative intéressante à Python et Julia dans les sciences des données. En effet, ces deux langages sont principalement construits sur le paradigme orienté objet. Cependant, étant moi-même un partisan des langages de programmation fonctionnels, R était le meilleur candidat pour poser son pied dans le domaine. Troisièmement, ayant certains contacts avec la base d'utilisateurs de R, j'ai pu établir le vrai besoin d'un système de type surtout dans la construction de package efficace. L'idéal serait de construire des package qui puissent être automatiquement accepté par CRAN #footnote[CRAN, abréviation de "Comprehensive R Archive Network", est l'organisation qui gère et distribue les packages et les ressources pour le langage de programmation R. Fondée en 1997, CRAN constitue une ressource centrale essentielle pour la communauté R, permettant aux développeurs et aux utilisateurs d'accéder à des milliers de packages R, de documentation, de manuels, et de données associées.]. 

