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 :
- d’étudier la conception de KC3,
- d’y contribuer techniquement (documentation, tests, déploiement, développement),
- et d’enrichir mes compétences en programmation web et bas niveau.
2. Objectifs du stage
Les principaux objectifs de mon stage étaient :
- Découvrir et manipuler KC3.
- Participer à des projets concrets (développement web, wiki).
- Comprendre le fonctionnement interne du langage KC3 afin de pouvoir contribuer à ses fonctions internes.
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).
J’ai contribué à la page de connexion du site kmx.io en travaillant sur la vue, son template et son contrôleur.
Cela m’a permis de comprendre le fonctionnement du MVC dans KC3 et de relier la logique métier aux vues utilisateur.J’ai participé au développement du wiki interne du site kmx.io.
Nous avons mis en place un système de gestion des routes : lorsqu’un lien n’existait pas, le serveur proposait la création d’une nouvelle page, uniquement si l’utilisateur était connecté.J’ai travaillé sur la gestion de l’historique des pages wiki.
Chaque version d’une page est conservée, et l’utilisateur peut choisir une version par date grâce à une interface avec des boutons radio en front-end.
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 :
- structures de données,
- gestion mémoire,
- modules et interpréteur.
Cette analyse m’a permis ensuite de corriger ou créer de nouvelles fonctions internes, comme :
array_dimensionlist_to_array
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 :
- développement web (wiki, MVC),
- et au développement bas niveau du langage KC3.
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.