Le mois d'Août fut placé sous le signe de la documentation, des arbres syntaxiques et des deux à la fois.
Ce fut un mois assez faste avec du développement quasi à temps plein. Il faudra, bien sur, s'attendre à un ralentissement en septembre vu que les cours reprennent.
Les statistiques, pour le mois donnent
$ git diff --shortstat origin/master@{2013-08-01}..
620 files changed, 197587 insertions(+), 106707 deletions(-)
Ont contribué (ou ont eu des patches intégrés): Jean Privat, Alexandre Terrasa, Alexis Laferrière, Stefan Lage, Lucas Bajolet et Matthieu Lucas
Le merge cc5680c0 a apporté de grosses amélioration du coté de l'AST.
Un paquet de classes de l'AST ont été commentées et l'API a été améliorée pour être plus robuste (voir la documentation du module parser).
Les modules astbuilder de transformation et astvalidation de vérification structurelle de l'AST on été développés.
Tout ça est utilisé par le module transform de simplification de l'AST.
Du travail de rationalisation et de nettoyage reste à faire mais c'est une bonne avancée (dans la bonne direction?)
Le module highlight (et le nouveau programme nitlight) permet de faire la coloration syntaxique de programmes Nit. Ce fut plus difficile à coder qu'initialement supposé (pour de nombreuses raisons) et ça a même donné lieu à des modifications dans le lexeur.
Vu qu'on dispose de plein d'informations, le HTML généré est également structuré et décoré intelligemment: élément HTML englobant chaque classes et propriétés, attribut title indiquant le type statique ou l'entité du modèle associé, et liens vers la définition (ou l'introduction).
Les artistes css et javascript peuvent commencer à s’amuser à bricoler les styles. L'outil nitlight est dans le répertoire bin et du html déjà généré est disponible chez jenkin
En développant la coloration, Jean a en profité pour étendre un peu la grammaire et autoriser certaines construction qui étaient refusés (parseur trop strict).
En particulier, les symboles qualifiés (genre a::b::c) sont acceptés un peu partout (meme si, pour l'instant, la partie qualifiante est ignorée par tout les moteurs).
Un autre ajout est l'opérateur booléen implies (Eiffel et OCL), principalement utile pour les contrats.
Plusieurs vieux commentaires de documentation de la lib standard on été revus. Voir commits 61676da6, 817169f9 et 82215852
Le style est maintenant plus unifié et risque de servir de base pour une spec officielle du formatage de la doc.
Avec l'arrivée du nouveau méta-modèle il restait un outil important à migrer: la nitdoc.
La nouvelle nitdoc, basée sur le nouveau méta-modèle est presque officielle. Les béta-testeurs peuvent l'utiliser le programmebin/nitdox. Le plus gros du travail a consisté en le portage vers le nouveau méta-modèle qui a finalement conduit a une réécriture complète de l'outil.
Parmi les améliorations:
Dans les améliorations on trouve aussi le portage du plugin GitHub vers la nouvelle Nitdoc. Les utilisateurs possédant un compte GitHub peuvent désormais modifier les commentaires en ligne et pousser les modifications vers le dépôt central en quelques clics (Workflow détaillé dans le commit fa45624f). L'idée est d'encourager l'enrichissement des commentaires du code source par les lecteurs de la documentation. Il reste encore du travail pour améliorer l'utilisabilité et corriger les bugs restants mais le plus gros est déjà en place et fonctionne.
Une autre grosse avancée se trouve dans le merge 5bffdc6f est permet d'afficher la documentation en HTML enrichi et non plus avec des balises <pre>. le module markdown s'occupe de transformer des nœuds syntaxiques ADoc en du HTML. Grâce à l'utilisation du module highlight, les exemples et bouts de codes Nit sont même coloriés.
Le commit dd2007bd introduit un nouvel outil en ligne de commande, nitx (pour nitindex) qui permet d'interroger le méta-modèle. Il se veut complémentaire à la nitdoc.
L'outil permet pour l'instant d'afficher la documentation associée à un nom (module, classe, propriété) et quelques requêtes plus complexes comme retrouver les méthodes qui utilisent un certain type comme paramètre ou type de retour.
Un nouvel outil, nitunit s'ajoute à la panoplie. Son objectif est d'extraire les tests unitaire des fichiers .nit, de les exécuter et de produire un rapport en XML.
Là où ça devient intéressant, c'est que les tests unitaires de Nit sont rangés dans les blocs de code des documentation : les blocs d'exemples deviennent des tests unitaires.
La sémantique est simple : le code est exécuté ; si un assert est brisé alors le test est marqué échoué.
Ainsi, la méthode String::substring annonce les code suivant
# assert "abcd".substring(1, 2) == "bc"
# assert "abcd".substring(-1, 2) == "a"
# assert "abcd".substring(1, 0) == ""
# assert "abcd".substring(2, 5) == "cd"
Et la classe Map a une documentation plus complète avec des tests unitaires en plusieurs morceaux. Map
Les avantages pour le programmeur sont évidents :
nitunitCerise sur le gâteau, nitunit génère du XML compatible avec ceux générés par JUnit, et est donc interfaçable avec plusieurs outils existants. En particulier une nouvelle tache jenkins nit nitunit s'occupe de vérifier les tests unitaires de la lib et des outils (OK, pour l'instant, il n'y a qu'une soixantaine de tests)
Il reste encore a officialiser le tout, la page formatage d'autodoc sert de guide et d'espace de réflexion.
L'ajout d'exemples/tests unitaires se fera aussi graduellement.
Un axe futur intéressant est l'ajoute de pré-post conditions. Qui sert, bien évidemment, à la documentation, mais nécessite une coopération des moteurs d'exécution.
L'API relative au relations de typage à été légèrement amélioré. f0325f42
La lib réseau à tout faire libcurl possède maintenant un binding vers Nit. Elle permet les requêtes Web (GET et POST) ainsi que l'envoi de courriels depuis Nit. Les détails sont dans la documentation du module curl.
SQLite s'ajoute aussi à la liste des bindings. Cf la doc sqlite.
privileges sert à abandonner proprement des droits unix (pour implémenter des démons).
posix offre plusieurs binding vers des fonctions POSIX standard. Pour l'instant il n'y a que la gestion des utilisateurs et groupes.
L'interpréteur, en mode débogueur peut, depuis le merge 69139d32, se contrôler par TCP/IP. Une étape de plus avant de pouvoir déboguer depuis son IDE favori (du moins, pour ceux qui favorisent Eclipse).
le prototype mnit a été partiellement intégré aux bibliothèques Nit lors du merge d94eceaa.
Cela offre la bibliothèques multi-plateforme abstraire mnit et son implémentation concrète mnit linux qui utilise OpenGL ES et SDL. Plusieurs programmes d'exemples (des jeux) sont étalement dispo dans le répertoire exemples.
Il ne reste qu'a espérer que le reste de mnit (la partie Android du framework) soit intégré prochainement dans le dépôt principal.
Les merges a958994c, 5806976c font partis du travail d'intégration de de FFI au nouveau méta-modèle.
La bibliothèque d'interface matérielle pour le Raspberry Pi, bcm2835, offre maintenant des classes pour représenter certaines composantes matérielles: buzzer, stepper motor, écran LCD simple HD44780 et la simple switch. Le logiciel àcontrib/physical_interface_for_mpd_in_rpi est une application réelle de ces composantes.
RTA à été réécrit, et est 4x plus rapide. youhou! efaf8b8f
L'implémentation des chaines de caractères est en plein chamboulement.
La classe String est en train de devenir une interface; on en est à la phase 1 où les constructeurs de String ne sont plus publics. cf merge
Un travail sur une implémentation alternative, à base de cordes, est également en cours.
Le job bootstrap s'occupe de valgrinder les principaux moteurs d’exécutions et techniques de compilation. Plus besoin de lancer soi-même valgrind sur sa machine pour chopper les derniers callgraphs, ils sont déjà disponibles.
En plus ca trace les variations de performances (l'unité des graphes est le milliard d'instructions exécutés, ou GIr).
L'objectif a moyen terme et de se débarrasser du vieux nitc. Les points bloquants reste la FFI (il reste du travail) et le super polymorphe (ça devrait pas être trop dur).
Le début des cours réduira clairement le rythme de développement, en contrepartie je pense que le système Nit est suffisamment mature pour que des cours de compilation/langageOO puisse l'utiliser comme outil pratique.
Je vais tenter voir à quel point je peux l'utiliser dans le cadre du cours INF5000-compilation.
Donc si vous avez des idées de sujet de TP ou de projets simples qui pourraient faire avancer Nit tout en étant intéressants pour les étudiants, je suis preneur.