Nous avons le plaisir de vous présenter le premier numéro de l'année de « Nitération », la lettre d’information du projet Nit.
Les statistiques combinées pour le mois de janvier 2015 donnent:
$ git diff --shortstat v0.7..v0.7.1
258 files changed, 10293 insertions(+), 3346 deletions(-)
$ git log --first-parent v0.7.1..v0.7.1 | grep 'Pull-Request: #' | wc -l
53
Ont contribué (ou ont eu des patchs intégrés): Alexis Laferrière, Jean Privat, Alexandre Terrasa, Jean-Christophe Beaupré, Romain Chanoir, Lucas Bajolet, Julien Pagès et Arthur Delamare
Les rentrées académiques sont souvent des périodes creuses pour le projet à cause du sur-travail éducatif et administratif.
À cause d'un bête issue levée dans le mauvais projet github, une partie du monde extérieur a eu vent du projet Nit.
Deux sites communautaires spécialisés, Hacker News et Reddit ont relayé l'information. Une mention du projet a même été faite dans une des lettres d'information de O'Reilly.
En conséquence, un pic d'affluence record a été constaté sur le projet github de Nit et sur le site web : 11093 visites le 8 janvier, alors que l'on tournait à quelques dizaines par semaine. Des gens ont même posé des questions sur le forum.
Ce mini coup de projecteur n'était pas vraiment planifié, en particulier le site web n'était pas à la hauteur : pas sexy, mauvaise présentation du langage, page d'accueil quasi-obsolète.
Toutefois, les commentaires semblaient relativement positifs (ou neutres). Cela nous a permis d'avoir également un aperçu de ce que les gens cherchent à savoir en premier quand on leur présente un nouveau langage de programmation.
En conclusion, un effort doit être mis pour améliorer au moins la page d'accueil et présenter plus intelligemment le projet aux visiteurs occasionnels.
Le développement de la compatibilité Android avance bien avec de nombreuses améliorations internes et externes.
Amélioration de la gestion des événements et des modes d'affichage. f36d0bd, ef8c975
Google Cardboard head tracking. De la réalité virtuelle en Nit! On l'a vu en vrai. b3948b6
Amélioration de la compilation: le mode --relase signe l'APK, l'option -m est gérée, et autre fixes. 4377c80 at a486869
Activation de GC Boehm pour Android. 266c10e
Amélioration de l'API pour l'audio Android et proposition d'abstraction de la gestion du son dans app.nit. 710aa54
Renommage des annotations de compilation en cflags et ldflag. Et gestion de variabilité par plateforme (cflags spécifiques android par exemple). c6e41c2 et 1772b94
Amélioration des bibliothèques graphiques et d'application (sdl, opengl, gtk, etc.) eed03cf, 036be01 et fab9251
Gestion améliorée des tableaux Java. b3948b6
Amélioration et nettoyage de jwrapper. fd3d79e, 2eadb88 et b701d42
Amélioration de la FFI objective-C et du support OS X. d5356f7
lib/github, la bibliothèque d'accès à l'API Github gagne une réification des services avec des classes dédiées à la manipulation d'objets Github (commits, commentaires, issues, etc.) 95790dc, c11db51, 7f7350d, d0bc63d et e6c5ce1
Des événements github (hooks) peuvent même être reçus grâce à nitcorn. 6631762 et 85c536d
Quelque chose est peut-être en train de se préparer...
Malgré la spécification décidée il y a plus d'un an, le compilateur ne vérifiait (ou n'utilisait) pas les règles d'espace de noms. C'est maintenant chose à moitié faite! 54c538b
Pour rappel, les règles sont les suivantes:
A introduite dans un module m d'un projet p a comme nom canonique p::A si elle est publique et p::m::A si elle est privéex introduite dans une classe nommée A dans un module m d'un projet p a comme nom canonique p::A::x si elle est publique et p::m::A::x si elle est privée.L'idée est que le projet serve d'espace de noms des entités publiques et que l'absence de conflit de noms au sein d'un même projet est de la responsabilité du projet. L'avantage est que cela simplifie la vie des utilisateurs avec un nommage simple des choses. Par exemple, le nom canonique de la classe Array est standard::Array et non passtandard::collection::array::Array comme elle serait appelée avec une approche à la Java.
Avec une certaine (bonne) surprise, l'activation des contraintes de nommage a signalé moins d'erreurs que prévues : 0 conflit de module, 2 cas de conflits de classes et 11 cas de conflits de propriétés. Les 2 cas de classes et 2 de propriétés ont simplement été résolus de la bonne façon : par renommage.
Les 9 cas restants pour les propriétés sont causés par le même patron : deux attributs distincts homonymes, par exempleopt_dir, introduits par raffinement dans la classe ToolContext, mais par des modules (outils) différents. Ici, le problème est un usage abusif du raffinement, la bonne solution serait sans doute d'utiliser des sous-classes de ToolContext (une par outil). À suivre...
On en a également profité pour implémenter, selon cette spécification, le nommage canonique des entités du modèle (méthodesfull_name et de cname). D'ailleurs, la FFI utilise désormais le cname des entités plutôt qu'une implémentation ad hoc. 1619f97 et1698b75
La méthode interne is_same_instance possède une implémentation pour null (donc ne crashe plus à l'exécution). En outre,null accepte statiquement les services ==, != et is_same_instance. be8c902
Une idée serait de permettre de généraliser les méthodes sur null (cf. 1129).
En passant, le compilateur rejette maintenant les tableaux liteaux de Null. 0250239
La plupart des outils savent maintenant travailler avec les groupes, ce qui signifie travailler avec tous les modules qu'ils contiennent. 20d9b73
Ainsi, nitunit lib/standard lance les tests unitaires sur tous les modules de standard, ce qui est plus pratique et moins inattendu que le comportement précédent de seulement lancer les tests du module par défaut, c'est-à-dire le fichierlib/standard/standard.nit (qui ne contient aucun test d'ailleurs).
Bien évidemment, le compilateur et l'interpréteur conservent leur comportement où indiquer un groupe signifie toujours compiler/exécuter le module par défaut du groupe.
Des petites améliorations en vrac pour nitdoc
span. 86d402aL'outil ajoute de nouvelles options pour contrôler mieux les règles de formatage (ce qui le rend plus sympathique). c15b6f7
Ce serait peut-être une bonne idée de commencer à promouvoir son utilisation. Peut-être via un binding pour vim ou autre chose du genre?
La VM continue doucement son bonhomme de chemin.
Une option --sloppy rend les analyses statiques intra-procedurales paresseuses. Elle permet d'attendre la première utilisation d'une méthode avant de l'analyser. Ceci accélère l'exécution (les méthodes jamais exécutées ne sont pas analysées) et le démarrage (on commence à exécuter plus tôt le code). 59d1076
L'objectif est de permettre d’accélérer un peu l'interpréteur et la VM et de simuler mieux le chargement dynamique. L'inconvénient (et c'est pour ça que l'option a ce nom-là et n'est pas activée par défaut) est que des erreurs statiques (erreur de type, identifiant inconnu, etc.) peuvent rester ignorées, pire, être signalées en plein milieu de l'exécution. Tant qu'une solution propre à ce problème ne sera pas trouvée l'option devra rester malheureusement explicite.
Indépendamment, des optimisations commencent à être intégrées à la VM et permettent l'implémentation de services de façon spécifique. Le gain est pour l'instant faible, mais le système se met en place tranquillement. fac640c
Une des astuces utilisées dans la thèse de Jean Privat a été tentée avec nitc. L'idée est de simplement abuser les symboles de l'éditeur de liens pour coder les indices (couleurs) utilisées dans l’implémentation des services objet. Le gain est de 4% mais le C généré n'est plus portable et nécessite gcc pour fonctionner. Donc l'activation doit se faire manuellement avec l'option --colors-are-symbols. aaaff8e
Autrement, un peu de refactorisation pour simplifier le point d'entrée des différents moteurs et simplification des RuntimeFunction du compilateur séparé. 5dd4647 et 47c9c20
L'analyse statique détecte les return manquants dans les blocs d'initialisation des attributs. 3633c5a
Comme d'habitude, amélioration et correction de bogues:
execvp. b2e11fdMap et les classes associées. 98d1d9c100 doors. c4094d7Réduire le nombre de warnings, de fixme et de todo est toujours une bonne chose. 2843f6a, fcda131, ec435de et d1659cf
D'ailleurs, désormais, un module qui n'a pas de clause module ne causera plus de warning missing-doc. La présence d'une clause module est une bonne heuristique pour déterminer que le module est suffisamment mature pour mériter des clients donc une documentation. acca223