Displayed 34 times

Rapport de Stage JEANNE Jérémy 2024-2025

Rapport de Stage 2024-2025

1. Introduction

En octobre 2024, j’ai rejoint en stage l’entreprise KMX.IO, créée en 2020 et spécialisée dans le développement informatique.
Elle développe actuellement un langage de programmation open-source innovant, KC3, destiné à la programmation sémantique à l’aide d’un triple store intégré à un runtime C11.

Mon objectif à travers ce stage était :


2. Objectifs du stage

Les principaux objectifs de mon stage étaient :


3. Première partie du stage : Développement web avec KC3

Durant la première partie de mon stage, j’ai travaillé principalement sur le développement web en KC3, en suivant le modèle MVC (Modèle – Vue – Contrôleur).

Ces travaux m’ont sensibilisé aux enjeux de la gestion de contenu collaboratif, à la traçabilité et à l’importance d’une interface claire pour l’utilisateur.


4. Deuxième partie du stage : Compréhension et extension du langage KC3

Dans la seconde partie du stage, mes missions se sont orientées vers la compréhension du langage KC3 lui-même.

Pour cela, j’ai dû me replonger dans le langage C, sur lequel KC3 est basé.
J’ai étudié le fonctionnement interne du langage :

Cette analyse m’a permis ensuite de corriger ou créer de nouvelles fonctions internes, comme :


Exemple : correction de kc3_array_dimension

Voici un extrait simplifié de la fonction kc3_array_dimension que j’ai corrigée :

s_tag *kc3_array_dimension(s_array *a, s_tag *index, s_tag *dest) {
    uw index_uw;
    const s_sym *sym_Uw = &g_sym_Uw;
    s_tag tmp = (s_tag){0};

    assert(a);
    assert(index);
    assert(dest);

    // Vérifie que 'index' peut être casté en entier non signé (Uw)
    if (!uw_init_cast(&index_uw, &sym_Uw, index)) {
        return NULL;
    }

    // Vérifie les bornes
    if (index_uw >= a->dimension) {
        err_puts("kc3_array_dimension: out of bound dimension index");
        assert(!"kc3_array_dimension: out of bound dimension index");
        return NULL;
    }

    // Renvoie la taille de la dimension demandée
    tag_init_uw(&tmp, a->dimensions[index_uw].count);
    *dest = tmp;
    return dest;

Dans cette fonction, j’ai mis en place un double filet de sécurité : un message d’erreur (err_puts) pour tracer l’erreur côté exécution/utilisateur, et une assertion explicite (assert(!"…")) en mode debug, afin de détecter rapidement les usages hors bornes en développement.

5. Conclusion

Ce stage m’a permis de participer à la fois au :

J’ai pu renforcer mes compétences en C, comprendre la conception d’un langage de programmation, et contribuer directement à un projet open-source.

Cette expérience m’a apporté une vision complète, allant de la programmation web front-end et back-end jusqu’à la programmation système.
Elle m’a également appris à travailler sur un projet réel, avec ses contraintes, ses bugs à corriger, et ses évolutions continues.

En résumé, ce stage a été une étape essentielle pour développer mes compétences techniques et ma capacité d’adaptation face à des environnements complexes.