Nous avons le plaisir de vous présenter le troisième numéro de « Nitération », la lettre d’information du projet Nit.
Pour officialiser un peu plus la lettre d'information, nous avons un nom « Nitération » (notez l'humour glacé et sophistiqué) et nous taguons le dépôt en fonction.
Pas de lettre le mois dernier à cause de la rentrée universitaire. On était bien occupé. Heureusement on s'est rattrapé en octobre ce qui fait que les statistiques combinés, pour les mois de septembre et d'octobre donnent:
$ git diff --shortstat v0.6.1..v0.6.2
574 files changed, 13644 insertions(+), 2591 deletions(-)
Ont contribué (ou ont eu des patches intégrés): Jean Privat, Alexandre Terrasa, Lucas Bajolet et Alexis Laferrière.
A été oublié dans les contributeurs du mois d’août : Guillaume Auger, pour le module sqlite3.
Afin de faire participer les (nombreux) lecteurs (internationaux) de la lettre, nous proposons d'effectuer chaque mois une revue d'un morceau de la spécification du langage.
Pour commencer, une des parties les plus courtes http://nitlanguage.org/manual/syntax/. La page est un wiki, les modifications mineures sont les bienvenues. Les suggestions plus complexes peuvent être envoyées par courriel, à la liste.
La spécification des package est en route. Elle a commencé il y a un moment quand à force de développement, on s'est rendu-compte que le module était pas une bonne unité de distribution/versionnement/espace-de-noms.
En effet, les modules sont nombreux, peu stables (réorganisation fréquente) et constitués en groupes fortement couplés. L'idée est de proposer le concept de package qui permettrait de grouper formellement les modules entre eux.
Un package serait associé à un produit (bibliothèque (gtk), programme (nitc)) ; posséderait un vendeur unique et une API publique. Au niveau du modèle, un package est considéré comme un groupe de modules, tout module appartenant à un package.
Le travail avance assez lentement, en particulier à cause des espaces de noms qui obligent à modifier la syntaxe ce qui cause plusieurs embêtements liés à la cohabitation de deux méta-modèles et à un conflit lié à la FFI.
Pour l'état actuel de la spécification, consultez la page package.
Les compilateurs nitg-s et nitg-e ont enfin un super polymorphe (linéarisé). Voir commit 1659b0fd. Le jour où on jettera le vieux nitc à la poubelle approche.
Indépendamment, un bogue très important et très ancien sur l'implémentation du super dans nitc à été corrigé. Voir commitccd5a7ac. C'est le genre de bogues dont on en vient à se demander comment ça pouvait bien fonctionner avant.
nitg et niti gagnent l'option -m qui permet de mixer des modules (par raffinement) à la compilation. Commit bc7ae69.
$ nitg some_program.nit -m some_mixin.nit
Ce fut assez trivial mais plus besoin de créer des modules principaux vides, à part une liste d'import, pour chaque configuration/ligne-de-produit.
Dans le cadre du cours INF5000 (compilation) quelques algorithmes d'automates ont été développés afin de ne pas avoir à dessiner automates et arbres syntaxiques à la main.
Ajouter la génération de code Nit en plus de graphes n'a pas été trop compliqué ce qui fait qu'un mini outil de générateur de lexeur/parseur a été développé. Commit a929ee9.
Il ne faut pas s'attendre à des miracles (et encore moins à des fonctionnalités avancées à la SableCC4, voire SableCC3). Mais l'outil devrait pouvoir servir pour de petits langages simples (JSON, PEP/8, s-expressions, XML, etc.) et plus utilisable que le hack actuel de SableCC3beta2-altgen.
Par contre, pas assez de puissance pour une grammaire comme Java ou Nit.
Le tout est disponible dans le dépôt principal dans le sous-répertoire contrib/nitcc. Lisez le contrib/nitcc/README.md pour plus de détails.
Quelques nettoyages et déboguage des collections.
En particulier sur les Set et Sequence, qui possèdent maintenant un == et un hash qui ont du bon sens. Ça permet, entre autres, de mettre ces classes dans des HashTrucs. Commit 783d0406.
La sémantique (floue) des itérateurs a été revue: un for est utilisable sur n'importe quelle classe qui possède une méthodeiterator qui retourne un Iterator ou un MapIterator. Cela permet maintenant d'itérer sur les HeaderMap de curl sans avoir à en faire de vraies Map. Commit d17c0cfa.
La réécriture de la nitdoc est presque à même remplacer officiellement l'ancienne doc. Bientôt un clou de plus dans le cercueil du vieux nitc !
La comparaison entre l'ancienne et la nouvelle peut être suivi au jour le jour :
A cause la pression populaire, le bug-tracker de git a été activé pour le projet nit: issues. En fonction de ce que ça donne, on verra si on le garde ou pas.
Une procédure standardisée a été montée pour faciliter l'utilisation de jenkins par les contributeurs.
Plusieurs travaux de sessions pour le cours INF5000 sont liés à Nit. Les résultats actuels sont encourageants.