JavaScript, this static language (part 1)

October 20, 2011 § 7 Comments


JavaScript is a dynamic language. However, by borrowing a few pages from static languages – and a few existing tools – we can considerable improve reliability and maintainability.

« Writing one million lines of code of JavaScript is simply impossible »

(source: speaker in a recent open-source conference)

JavaScript is a dynamic language – a very dynamic one, in which programs can rewrite themselves, objects may lose or gain methods through side-effects on themselves on on their prototypes, and, more generally, nothing is fixed.

And dynamic languages are fun. They make writing code simple and fast. They are vastly more suited to prototyping than static languages. Dynamism also makes it possible to write extremely powerful tools that can perform JIT translation from other syntaxes, add missing features to existing classes and functions and more generally fully customize the experience of the developer.

Unfortunately, such dynamism comes with severe drawbacks. Safety-minded developers will tell you that, because of this dynamism, they simply cannot trust any snippet, as this snippet may behave in a manner that does not match its source code. They will conclude that you cannot write safe, or even modular, applications in JavaScript.

Many engineering-minded developers will also tell you that they simply cannot work in JavaScript, and they will not have much difficulty finding examples of situations in which the use of a dynamic language in a complex project can, effectively, kill the project. If you do not believe them, consider a large codebase, and the (rather common) case of a large transversal refactoring, for instance to replace an obsolete API by a newer one. Do this in Java (or, even better, in a more modern mostly-static language such as OCaml, Haskell, F# or Scala), and you can use the compiler to automatically and immediately spot any place where the API has not been updated, and will spot a number of errors that you may have made with the refactoring. Even better, if the API was designed to be safe-by-design, the compiler will automatically spot even complex errors that you may have done during refactoring, including calling functions/methods in the wrong order, or ownership errors. Do the same in JavaScript and, while your code will be written faster, you should expect to be hunting bugs weeks or even months later.

I know that the Python community has considerably suffered from such problems during version transitions. I am less familiar with the world of PHP, but I believe this is no accident that Facebook is progressively arming itself with PHP static analysis tools. I also believe that this is no accident that Google is now introducing a typed language as a candidate replacement for JavaScript.

That is because today is the turn of JavaScript, or if not today, surely tomorrow. I have seen applications consisting in hundreds of thousands of lines of JavaScript. And if just maintaining these applications is not difficult enough, the rapid release cycles of both  Mozilla and Chrome, mean that external and internal APIs are now changing every six weeks. This means breakage. And, more precisely, this means that we need new tools to help us predict breakages and help developers (both add-on developers and browser contributors) react before these breakages hit their users.

So let’s do something about it. Let’s make our JavaScript a strongly, statically typed language!

Or let’s do something a little smarter.

JavaScript, with discipline

At this point, I would like to ask readers to please kindly stop preparing tar and feathers for me. I realize fully that JavaScript is a dynamic language and that turning it into a static language will certainly result in something quite disagreeable to use. Something that is verbose, has lost most of the power of JavaScript, and gained no safety guarantees.

Trust me on this, there is a way to obtain the best of both worlds, without sacrificing anything. Before discussing the manner in which we can attain this, let us first set objectives that we can hope to achieve with a type-disciplined JavaScript.

Finding errors

The main benefit of strong, static typing, is that it helps find errors.

  • Even the simplest analyses can find all syntax errors, all unbound variables, all variables bound several times and consequently almost all scoping errors, which can already save considerable time for developers. Such an analysis requires no human intervention from the developer besides, of course, fixing any error that has been thus detected. As a bonus, in most cases, the analysis can suggest fixes.
  • Similarly trivial forms of analysis can also detect suspicious calls to break or continue, weird uses of switch(), suspicious calls to private fields of objects, as well as suspicious occurrences of eval – in my book, eval is always suspicious.
  • Slightly more sophisticated analyses can find most occurrences of functions or methods invoked with the wrong number of arguments. Again, this is without human intervention. With type annotations/documentation, we can move from most occurrences to all occurrences.
  • This same analysis, when applied to public APIs, can provide developers with more informations regarding how their code can be (mis)used.
  • At the same level of complexity, analysis can find most erroneous access to fields/methods, suspicious array traversals, suspicious calls to iterators/generators, etc. Again, with type annotations/documentation, we can move from most to all.
  • Going a little further in complexity, analysis can find fragile uses of this, uncaught exceptions, etc.

Types as documentation

Public APIs must be documented. This is true in any language, no matter where it stands on the static/dynamic scale. In static languages, one may observe how documentation generation tools insert type information, either from annotations provided by the user (as in Java/JavaDoc) or from type information inferred by the compiler (as in OCaml/OCamlDoc). But look at the documentation of Python, Erlang or JavaScript libraries and you will find the exact same information, either clearly labelled or hidden somewhere in the prose: every single value/function/method comes with a form of type signature, whether formal or informal.

In other words, type information is a critical piece of documentation. If JavaScript developers provide explicit type annotations along with their public APIs, they have simply advanced the documentation, not wasted time. Even better, if such type can be automatically inferred from the source code, this piece of documentation can be automatically written by the type-checker.

Types as QA metric

While disciples of type-checking tend to consider typing as something boolean, the truth is more subtle: it quite possible that one piece of code does not pass type-checking while the rest of the code does. Indeed, with advanced type systems that do not support decidable type inference, this is only to be expected.

The direct consequence is that type-checking can be seen as a spectrum of quality. A code can be seen as failing if the static checking phrase can detect evident errors, typically unbound values or out-of-scope break, continue, etc. Otherwise, every attempt to type a value that results in a type error is a hint of poor QA practice that can be reported to the developer. This yields a percentage of values that can be typed – obtain 100% and get a QA stamp of approval for this specific metric.

Typed JavaScript, in practice

Most of the previous paragraphs are already possible in practice, with existing tools. Indeed, I have personally experienced using JavaScript static type checking as a bug-finding tool and a QA metric. On the first day, this technique has helped me find both plenty of dead code and 750+ errors, with only a dozen false positives.

For this purpose, I have used Google’s Closure Compiler. This tool detects errors, supports a simple vocabulary for documentation/annotations, fails only if very clear errors are detected (typically syntax errors) and provides as metric a percentage of well-typed code. It does not accept JavaScript 1.7 yet, unfortunately, but this can certainly be added.

I also know of existing academic work to provide static type-checking for JavaScript, although I am unsure as to the maturity of such works.

Finally, Mozilla is currently working on a different type inference mechanism for JavaScript. While this mechanism is not primarily aimed at finding errors, my personal intuition is that it may be possible to repurpose it.

What’s next?

I hope that I have convinced you of the interest of investigating manners of introducing static, strong type-checking to JavaScript. In a second part, I will detail how and where I believe that this can be done in Mozilla.


Vos enfants n’iront pas à l’université

February 2, 2010 § 1 Comment

Voici un an que la communauté universitaire a tiré la sonnette d’alarme, dans l’indifférence générale. Et bien, maintenant, ça commence, et ça confirme vous ne pourrez pas payer les études de vos enfants.

Vous voulez des détails ? À compter de l’année prochaine, certains Master de l’Université Paris Dauphine vont coûter la bagatelle de 1500 à 4000 euros.

À suivre.

Cent mille voix pour la formation des enseignants

January 23, 2010 § Leave a comment

Comme beaucoup d’entre vous le savent, l’année 2009-2010 a été rude dans les écoles, les collèges, les lycées les universités et les instituts de recherche de France. Du côté des enseignants, des chercheurs, des personnels administratifs et techniques et des parents d’élèves, il s’agissait de défendre le système contre sa casse systématique et organisée au profit du secteur privé. Du côté ministériel, il s’agissait de prononcer quelques bonnes paroles, de diviser pour régner, de salir tous ceux qui consacrent leur vie à former les enfants des autres ou à concevoir les savoirs de demain, de supprimer progressivement la formation des enseignants, de couper le plus possible de postes dans les établissements, de cesser de régler les factures, et plus généralement d’organiser la transition vers un système du tout-privé.

Comme beaucoup d’entre vous le savent, une année de lutte entière — dont la grève universitaire la plus importante depuis le XIIIeme siècle, pardonnez du peu — n’a servi à rien. Quelques belles paroles et le rouleau compresseur a repris, sans négociations, sans compromis et sans respecter la moindre promesse.

Il est encore temps, peut-être, de sauver quelques meubles. C’est en tout cas ce que pense la Coordination Nationale pour la Formation des Enseignants, qui vient de lancer une pétition. Cette pétition rassemblent les signatures de tous ceux qui estiment que la France doit continuer à former la formation des enseignants — rappelons que cette formation est presque abolie à partir de cette année. Si vous avez des enfants, si vous comptez en avoir ou si vous pensez que les enfants des autres doivent avoir des professeurs formés, je vous suggère de la signer. Je viens de le faire moi-même.

On achève bien les professeurs

January 23, 2010 § 1 Comment

Ca y est, c’est officiel on ne peut (presque) plus devenir professeur en France. Le décret a été publié dans le Journal Officiel du 20 janvier 10, texte 12.

Selon ce décret, pour se présenter aux concours d’enseignement et espérer ainsi devenir professeur certifié (CAPES), agrégé (interne ou externe), un candidat doit d’abord détenir le Master 2.

C’est tout ? C’est tout. Mais résumons quelques conséquences directes :

  • Un étudiant souhaitant devenir professeur doit commencer par étudier jusqu’à l’âge théorique minimal de 23 ans (selon mon estimation, ce sera plutôt 24 ou 25 ans en pratique) avant de se présenter pour la première fois à un concours qui pourra lui donner la possibilité d’obtenir un poste de professeur. Comme ces concours sont très concurrentiels, il n’est pas rare de devoir s’y présenter trois fois. Comptons donc 26 ou 27 ans avant de décrocher un premier travail, pour ceux qui s’accrochent jusque-là. Comptons donc aussi 26 ou 27 ans avant une première expérience professionnelle d’enseignement, puisque le gouvernement a en pratique supprimé les stages d’enseignement depuis cette année.
  • En plus de beaucoup de patience, ce même étudiant aura besoin d’une sérieuse source de revenus pour arriver à ce niveau. Rappelons que le gouvernement a supprimé les stages rémunérés d’enseignement, tout en diminuant le nombre de bourses. À supposer qu’il reste des professeurs, leur mixité sociale risque d’en pâtir.
  • Rappelons que, depuis les réformes récentes, un Master enseignement ne peut mener qu’à l’enseignement. En particulier, toutes les compétences liées à la Recherche ont été supprimées. Rappelons d’ailleurs que les susdites réformes ont aussi supprimé une bonne partie des compétences pédagogiques (un professeur d’anglais n’a effectivement plus besoin de savoir parler anglais). Un étudiant qui échoue à ses concours à l’âge de 28 ans n’aura aucune expérience professionnelle, aucune compétence valorisable, aucun diplôme porteur, et aucune perspective.
  • Les étudiants souhaitant ouvrir un peu leurs horizons et leurs débouchés professionnels commencer par obtenir un master autre, avant de préparer un master d’enseignement. Ils ont maintenant 30 ans avant de se présenter aux concours.
  • Les professeurs certifiés actuellement en exercice, qui sont généralement à un équivalent Maîtrise/Master 1, n’ont tout bonnement plus le droit de passer l’agrégation interne.
  • Les étudiants embauchés par les rectorats pour remplacer les professeurs, et qui enseignent depuis l’année dernière à plein temps, qui sont généralement au niveau Licence 2, ne pourront donc plus passer les concours d’enseignement non plus.

En toute simplicité, nous venons d’assister, d’un trait de plume supplémentaire, à l’enterrement du métier de professeur. Pour remplacer les professeurs, le gouvernement a commencé dès l’année dernière à employer des étudiants sans formation, système qui est appelé à se généraliser.

Vous savez qui remercier.

Quelques nouvelles du front

April 25, 2009 § Leave a comment

Note : Ce billet est écrit au 83ème jour de la grève des universités. Le gouvernement refuse toujours de négocier et préfère faire passer les réformes en catimini, sous la forme de décrets d’application qui ne correspondent pas aux textes prépubliés, et en les accompagnant de mensonges, d’intimidations administratives et de coups bien réels de matraques. La privatisation à l’italienne du système éducatif est en cours. Pour tous ceux qui ne sont pas d’accord, rendez-vous à Louvain, du 26 au 29 avril et dans les rues de Paris, le 28 avril. De nouvelles pétitions viennent d’être mises en ligne pour dénoncer les réformes et les mensonges du gouvernement.

Il y a quelques jours, François Fillon s’est exprimé sur France Inter, l’évènement est suffisamment rare pour être noté. C’est que Monsieur le Premier Ministre avait bien des choses à dire, en particulier sur la réforme des universités, du primaire et du secondaire publics. Malheureusement, là où l’on aurait pu espérer un brin de sérieux de la part d’un homme politique qui a la réputation de ne jamais parler pour ne rien dire, nous n’avons eu droit qu’à une nouvelle répétition des platitudes de Valérie Pécresse. Mais il faut tout de même saluer le courage de François Fillon, qui n’a pas hésité un seul instant avant de décrire la “concertation” et les mesures qui viennent de passer en décret d’application, “parfaitement conforme[s] aux aspirations des universitaires”. En guise de concertation, rappelons que le gouvernement a de nombreuses fois refusé de rencontrer les représentants syndicaux, les représentants des associations de chercheurs, d’enseignants-chercheurs, de précaires de l’université, etc. Rappelons aussi que seuls deux des 35 représentants syndicaux — ceux de deux syndicats parmi les plus petits — se sont exprimées en faveur des propositions du gouvernement. Rappelons de même que 76 des 83 universités françaises bloquent la réforme du primaire et du secondaire à force de désobéissance civile. Rappelons toujours les 100.000 manifestants, il y a quelques semaines, et la grève des universités, qui entre dans sa 12ème semaine.

Le gouvernement a décidément une définition particulière de “concertation” et d'”aspirations”, et ce d’autant plus que les décrets qui viennent de passer ne sont pas les mêmes que ceux qui avaient été donnés à lire aux universitaires.  Rien de surprenant de la part d’un gouvernement qui appelle “autonomie” une bureaucratie aussi rigide que complexe et qui donne la part belle aux pleins pouvoirs, “faire confiance aux universités” le déluge impressionnant de directives ministérielles qui ne cesse de tomber depuis des mois, “organisme indépendant” une agence dont tous les membres sont nommés par le ministre, etc.

Pour ceux qui ne sont pas encore au courant, quatre décrets d’application et trois arrêtés ont été publiés cette semaine  sans affichage préalable des textes. Parmi les décrets, citons-en deux qui sont au cœur du mouvement de contestation universitaire :

  • le nouveau statut des enseignants-chercheurs, dans un texte qui ne reprend aucune des trois versions préalables présentées par le gouvernement, et qui réintroduit notamment la possibilité d’infliger à tout enseignant-chercheur jusqu’à 1607 heures supplémentaires non-payées, que ce soit pour faire des économies ou pour lui faire payer un engagement politique ou des recherches qui fâchent ;
  • la réforme du statut des doctorants, qui semble notamment supprimer le monitorat et les allocations couplées (il faut que je vérifie plus en détails) et permettre de confier absolument n’importe quelle tâche supplémentaire aux doctorants, en plus de la Recherche.

Au passage, l’État Français vient d’accorder aux établissements appartenant au Vatican la possibilité de délivrer des diplômes, y compris, semble-t-il, les futurs master enseignement qui remplaceront le CAPES, l’Agrégation et le concours de Professeur des Écoles, le tout financé par les deniers publics.

Voici des mois, voire des années, que la communauté universitaire s’élève contre ces réformes mais aussi contre la méthode du gouvernement, qui vote les lois pendant les vacances et sans les annoncer, prépare leur application à coups de statistiques fausses et de contre-vérités, et tente de faire taire la contestation à coups de propagande, d’intimidations administratives et d’interventions policières. À présent, le gouvernement prétend que les universitaires sont pour la plupart d’accord avec ces mesures, depuis la suppression de l’indépendance de la recherche jusqu’à la liquidation du primaire et du secondaire public. Si vous êtes un universitaire et si vous souhaitez prendre la parole pour contester cette soi-disant unanimité, un groupe de cinq pétitions a été ouvert, chacune sur un des points contestés — à toutes signer, donc. En moins de 24h, la première de ces pétitions a récolté près de 700 signatures, à comparer aux 327 signatures récoltées en plus d’un an par la pétition opposée.

Et qui que vous soyez, rendez-vous est pris le 28 avril, dans les rues de France, pour manifester le mécontentement de la société française face à la liquidation de l’enseignement public, de la recherche et de l’hôpital.

Fin des cours

April 23, 2009 § 2 Comments

Note : Ce billet est écrit au 80ème jour de grève des universités. Malgré l’opposition de la quasi-totalité de la communauté universitaire, le gouvernement vient de faire passer les décrets d’application qui permettent de transformer arbitrairement et sans justifications un enseignant-chercheur en enseignant pur. Manifestement, le gouvernement n’arrive pas à comprendre le danger pour le monde de la Recherche en France. Simultanément, le gouvernement vient d’annoncer que, puisqu’il était impossible de procéder à la réforme de l’enseignement primaire et secondaire sans violer ses propres décrets, il allait les ignorer totalement. Une fois que le choc sera passé, attendez-vous à des réactions. Attendez-vous à une grève de la Recherche, des publications, des brevets, des contrats, des évaluations. Attendez-vous à des difficultés lors des examens et du baccalauréat.

Là où les chasseurs de tête avaient échoué, le gouvernement vient de réussir : j’ai donné hier mon dernier cours.

Puisque le gouvernement préfère manifestement économiser sur le dos de la Recherche, j’ai fini par accepter un poste dans le secteur privé, poste dans lequel je devrais être en mesure de poursuivre mes travaux sur les liens entre sémantique informatique, sûreté, sécurité, langages fonctionnels et parallélisme.

Si ce nouveau poste devrait m’apporter plus de liberté, ainsi que des étudiants et des ingénieurs pour participer à mes recherches, j’ai le cœur lourd d’avoir été contraint à quitter le système universitaire, auquel je suis profondément attaché, pour pouvoir faire mon travail.

Sauf accident, à partir du premier septembre 2009, vous pourrez me trouver chez MLState.

Last lecture

April 22, 2009 § 4 Comments

Note: This post is written on the 79th day of strike of Universities. Despite the overwhelming consensus against these bills, the government has just passed the application decrees implementing the possibility of arbitrarily increasing the teaching charge of researchers, without need for any justification. The government obviously fails to see how much this will hurt Research. Simultaneously, the government has announced that, since the reform of primary and secondary schools cannot proceed in compliance with the government’s own decrees, it will simply proceed illegally. Once the shock is gone, expect increased strike actions. Expect Resarch strikes on publications, on patents, on contracts with the government or French companies. Expect difficulties with baccalauréat, exams and degrees.

Where headhunters had failed, the government has finally succeeded. Today was my last lecture.

As the government obviously doesn’t want Researchers to have the means and time to undertake Research, I have accepted a position in the private sector, where I should be able to pursue my work on semantics, security and functional concurrent/distributed programming languages.

While I’m glad to start in a position where I will have both more leeway and both students and engineers to work with me, I am saddened that the situation had to reach the point where I felt I had no choice.

Barring any accident, starting September 1st, you will be able to find me at MLState.

Where Am I?

You are currently browsing the Société category at Il y a du thé renversé au bord de la table.