Nouvelles d'aout

14 views
Skip to first unread message

Jean Privat

unread,
Sep 1, 2013, 7:28:13 AM9/1/13
to nit...@googlegroups.com

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

Parsing et AST

API de l'AST

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?)

Coloration syntaxique

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

Extension de la grammaire

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.

Documentation plus stylée

Plusieurs vieux commentaires de documentation de la lib standard on été revus. Voir commits 61676da6817169f9 et 82215852

Le style est maintenant plus unifié et risque de servir de base pour une spec officielle du formatage de la doc.

  • le style est du markdown simplifié pour le moment;
  • les paragraphes sont séparés par des lignes vides (ou plutôt par un commentaire vide);
  • la première ligne est le synopsis;
  • les extrait de code sont entre back-quotes;
  • les blocks de code sont indentés d'au moins 4 espaces;

Nouvelle nitdoc

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:

  • Nouvelle mise en page des modules, on y retrouve les classes introduites et raffinées avec leurs commentaires plutôt que les deux listes de recherche originales;
  • Les classes génériques sont maintenant affichées avec leurs paramètres de types, de même pour les types génériques dans les signatures;
  • Nouvelle présentation des raffinements de classes et de propriétés, plus concis et surtout plus lisibles, de même pour les liens vers le code sources des redéfinitions;
  • L'affichage général a été repensé pour mettre en relief les informations importantes et faciliter le survol de la page plutôt qu'une lecture minutieuse;
  • Option de copie rapide des signatures vers le presse papier, pratique pour coller la signature d'une méthode dans son IDE préféré;
  • Amélioration du champs de recherche rapide pour mieux gérer l'affichage des doublons, accéder aux résultats complets lorsqu'il y a plus de 10 résultats, ajouter les modules à la liste;

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.

Outil de documentation en ligne de commande: nitx

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.

Tests unitaires

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 :

  • Il peut vérifier que les exemples de la documentation sont valides en utilisant l'outil nitunit
  • Il écrit la doc et les tests unitaires en même temps et tout est dans le même fichier.

Cerise 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)

Futur

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.

Métamodèle

L'API relative au relations de typage à été légèrement amélioré. f0325f42

Bibliothèques

Nouvelles bibliothèques

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.

Utilisation des sockets dans l'interpréteur

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).

MNit et multi-plateformes

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.

Intégration de la FFI aux nouveaux moteurs

Les merges a958994c5806976c font partis du travail d'intégration de de FFI au nouveau méta-modèle.

Nit sur Raspberry Pi

La bibliothèque d'interface matérielle pour le Raspberry Pi, bcm2835, offre maintenant des classes pour représenter certaines composantes matérielles: buzzerstepper 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.

Performances

RTA vraiment R

RTA à été réécrit, et est 4x plus rapide. youhou! efaf8b8f

Chaînes

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.

Valgrind

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).

Et le reste ?

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.

Reply all
Reply to author
Forward
0 new messages