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 :
Les principaux objectifs de mon stage étaient :
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.
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 :
array_dimension
list_to_array
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.
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.