Developpez.com

Le Club des Développeurs et IT Pro

L'assemblée générale Ecma International a annoncé l'approbation d'ECMAScript 6

Qui devient donc officiellement un standard

Le 2015-06-18 10:28:17, par Stéphane le calme, Chroniqueur Actualités
L'Assemblée générale Ecma International a annoncé l'approbation d'ECMA-262 6e édition, la nouvelle version du standard sur lequel est basé JavaScript.

Pour rappel, JavaScript a été créé par Brendan Eich en 1995, mais il lui aura fallu 20 ans pour connaître une évolution de certaines des caractéristiques parmi les plus populaires dans d'autres langages modernes. Même si, au départ, JavaScript n'a pas un langage des plus impressionnant, Brendan Eich a apporté une excellente idée : un langage pour le navigateur. JavaScript a tout de suite su capter l’attention, a été soumis à la standardisation l'année suivante, avec la version 1.0 standardisée par l'Ecma en 1997, suivie par la version 2.0 en 1998 qui embarquait quelques changements mineurs, puis la version 3.0 en 1999 qui embarquait quelques nouvelles fonctionnalités.

Le langage a été par la suite quelque peu négligé pendant plusieurs années jusqu'à ce que l'Ajax ait été considéré comme une solution raisonnable pour construire des applications client dans le navigateur. C’est alors qu’un travail plus intense sur l'amélioration de JavaScript a été amorcé, mais les parties concernées n'ont pas été d’accord de prime abord sur la voie à suivre jusqu'en 2008 lorsque le TC39, le comité chargé de surveiller ECMAScript, a proposé un accord et a décidé qu’il y aurait des itérations plus petites d’abord, matérialisées par l’ECMAScript 5 (ES5) en 2009, puis des itérations plus importantes matérialisées par l’ES6 qui vient d’être approuvé.

Le nom officiel de cette dernière version est ECMAScript 2015. Notons que l’Ecma a l'intention de publier plus souvent de nouvelles versions par plus petits incréments, le prochain étant prévu pour l'année prochaine et qui sera appelé ECMAScript 2016. Désormais, le nom des nouvelles versions incluront ECMAScript suivi de l'année de leur publication.

ES6 est une amélioration majeure par rapport ES5, la spécification du langage ayant près de 600 pages, comparativement à 245 pour les ES 5.1. ES6 ajoute beaucoup de fonctionnalités basiques telles que les modules et les classes, et certaines plus utiles comme Maps, Sets ou Generators. En plus d’être une amélioration majeure, ES6 est totalement rétro compatible avec les versions précédentes, le comité de normalisation ayant décidé d'éviter de « briser le web » dans le cas où des versions seraient non compatibles avec le langage. Par conséquent, tout le code précédent s’exécute et la transition est plus douce, même si cela pourrait aussi signifier que certaines plaintes formulées par des développeurs puissent rester d’actualité.

A l’heure actuelle, aucun des agents JavaScript ne soutient pleinement ES6, alors les développeurs désireux d'utiliser les dernières fonctionnalités du langage devront transpiler le code dans ES5. Et il faudra un certain temps pour voir les principaux navigateurs appliquer pleinement les fonctionnalités ES6, peut-être même plus d'un an.

Les travaux ont commencé sur ECMAScript 2016, un certain nombre de propositions ont été déjà présentées, y compris, entre autres : les fonctions asynchrones, les objets typés ou même les class decorators. Bien que ces caractéristiques soient activement étudiées par le comité, nous ne pouvons pas statuer quant à leur avenir. Certaines seront inclues dans la prochaine spécification, certaines dans celles à venir, et certaines pourraient même ne jamais être adopté. Pour plus d’information, le TC39 Process explique les différentes étapes traversées par une caractéristique désirée jusqu'à ce qu'elle soit adoptée et inclus dans le langage.

Si l’évolution de JavaScript a été lente au début, elle a repris du rythme récemment. Probablement un signe qui montrerait que JavaScript est là pour rester.

Source : Ecma International, TC39 Process (Google Docs)
  Discussion forum
24 commentaires
  • SpaceFrog
    Rédacteur/Modérateur
  • Watilin
    Expert éminent
    Envoyé par crodilus
    HALLEJUHA Nous allons pouvoir enfin utiliser Class et Extends ! Que le Grand Divin Gourou de l'informatique nous bénisse !
    Ce qui est amusant c'est que cette nouvelle spec n'apporte quasiment rien de nouveau du côté de l'héritage par prototypes. Est-ce une preuve que cet aspect était déjà rôdé dans ES5 ? C'est peut-être le moment de s'y mettre… Ou pas, car après tout, le langage nous donne le choix, respectons ceux qui choisissent l'une ou l'autre solution

    Je partage un super site que j'ai découvert pas plus tard qu'hier : http://es6-features.org/
  • crodilus
    Membre régulier
    HALLEJUHA Nous allons pouvoir enfin utiliser Class et Extends ! Que le Grand Divin Gourou de l'informatique nous bénisse !
  • SylvainPV
    Rédacteur/Modérateur
    Envoyé par Watilin
    Ce qui est amusant c'est que cette nouvelle spec n'apporte quasiment rien de nouveau du côté de l'héritage par prototypes. Est-ce une preuve que cet aspect était déjà rôdé dans ES5 ? C'est peut-être le moment de s'y mettre… Ou pas, car après tout, le langage nous donne le choix, respectons ceux qui choisissent l'une ou l'autre solution
    Oui enfin on est tous d'accords sur le fait que les "classes" en JavaScript ne sont qu'une syntaxe travestie de la POO par prototype pour faire plaisir aux développeurs accoutumés à la POO par classe. Techniquement, ce sont toujours les prototypes qui sont utilisés.

    In ECMAScript 6, we'll see the introduction of "classes". Many, many people argue that they are unnecessary, and technically they are. ES6 classes aren't even classes; they are syntactic sugar that eases our development. That's all. Classes aren't an entirely new construct in JavaScript, they are just a new way of saying the exact same thing, except it makes more sense and is simpler to use.
    http://www.joezimjs.com/javascript/j...-say-about-it/

    Même Brendan Eich en plaisante:


    Sinon il y a quand même des choses intéressantes en ES6 pour les prototypes : Object.setPrototypeOf même s'il était déjà supporté par certains navigateurs depuis quelques temps ; et Object.assign pratique pour faire de l'héritage multiple par composition ;
  • Gugelhupf
    Modérateur
    Envoyé par SylvainPV
    Oui enfin on est tous d'accords sur le fait que les "classes" en JavaScript ne sont qu'une syntaxe travestie de la POO par prototype pour faire plaisir aux développeurs accoutumés à la POO par classe. Techniquement, ce sont toujours les prototypes qui sont utilisés.
    Oui mais le fait qu'il y ait l'héritage change la donne.

    ES6 :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Rectangle extends Shape { 
        constructor (id, x, y, width, height) { 
            super(id, x, y); this.width = width; 
            this.height = height; 
        } 
    } 
    
    class Circle extends Shape { 
        constructor (id, x, y, radius) { 
            super(id, x, y); 
            this.radius = radius; 
        } 
    }

    ES5 :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var Rectangle = function (id, x, y, width, height) { 
        Shape.call(this, id, x, y); 
        this.width = width; this.height = height; 
    }; 
    Rectangle.prototype = Object.create(Shape.prototype); 
    Rectangle.prototype.constructor = Rectangle; 
    
    var Circle = function (id, x, y, radius) { 
        Shape.call(this, id, x, y); 
        this.radius = radius; 
    }; 
    Circle.prototype = Object.create(Shape.prototype); 
    Circle.prototype.constructor = Circle;
    Tu préfères quelle syntaxe ?
  • sekaijin
    Expert éminent
    Je pense que se trompe lourdement entre poo par classe ou par prototype dans le navigateur

    il fut un temps où tout cela était très simple
    nous avions dans les navigateurs plusieurs langages vb js tcl etc.

    Mais rien n'était normalisé.
    Il se trouve qu'en reversant js dans la coupe ecma la base de js c'est normalisé et que le w2c l'a pris en compte.

    devenant normalisé on a peu à peu abandonner les autres langages embarqué dans le navigateur.

    je comprends tout à fait que certain préfèrent la poo à base de classe tout comme d'autre préfèrent les langages fonctionnels.
    Je pense qu'il y a de la place pour tous.

    Ce que je trouve dommageable c'est de vouloirs à tout prix intégrer des notions de langage à base de classe dans javascript.
    je pense que c'est contre nature contre productif et que cela ne fait qu'ajouter de la confusion.

    en y regardant de plus près. voici où nous en sommes
    nous avons d'un coté un langage avec une syntaxe
    une analyser syntaxique
    un compilateur à la volée
    et une machine virtuelle

    il n'y a dans tout ça rien qui techniquement empêche de compiler un autre langage sur cette machine virtuelle.
    c'est une technique aujourd'hui grandement éprouvée. on trouve ça dans la JVM avec Java, Scala, Ecmascript et bien d'autres

    Je pense qu'il aurait été plus judicieux de partir dans cette voie.
    porter un langage à base de classes sur l'EVM (EcmaVirtualMachine) Définir le binding du DOM pour ce langage
    et implémenter le tout sur le navigateur.

    on aurait ainsi un langage à prototype un langage à classe les deux gardant leur avantage et restant très clair dans leur modèle.
    avec une telle approche il suffirait d'ajouter à cela une normalisation de l'amorce pour pouvoir compiler à l'avance le code pour
    qu'i s'exécute sur le navigateur du client sans que le code ne soit accessible.

    Mais voilà pour aller dans cette direction il faudrait que tous les acteurs se mettent d'accord et c'est loin d'être le cas.
    Alors chacun ajoute au forceps des petit bout en essayant de mettre les autorité de normalisation devant le fait accompli.

    et on se retrouve avec un langage à base de prototype qui contient des bout de syntaxe à base de classes mais qui n'implémente pas les modèles sous-jacent à cette théorie
    qui laisse croire à ceux qui l'emploi qu'il en on les garantie. te tout en troublant l'apprentissage des tenant du prototype.

    bref on se retrouve dans la pire des solution. personne n'est satisfait personne n'a de garantie solide.

    enfin je constate que plus on avance plus les langages poo à base de classe intègrent des notions visant à assouplir le modèle jugé trop rigide et contraignant
    et dans le même temps on a un langage très souple avec des défaut de clarté (surtout pour les débutant)
    et au lieu d’améliorer ce dernier sur ces point faible on le rends encore plus confus en tentant d'y ajouter les verrous que l'on cherche à faire sauter partout ailleurs.

    A+JYT
  • sekaijin
    Expert éminent
    Je me réponds

    je ne suis pas le seul à penser qu'il serait intéressant d'avoir une approche multilangage
    et une séparation du langage et de la machine virtuelle

    Brendan Eich parle sur son blog d'une approche assembleur pour le web
    https://brendaneich.com/2015/06/from...o-webassembly/

    Le W3C a créer un groupe à ce sujet
    https://www.w3.org/community/webassembly/

    A+JYT
  • SylvainPV
    Rédacteur/Modérateur
  • Aurelien Plazzotta
    Membre extrêmement actif
    La syntaxe EcmaScript 6 se rapproche indubitablement du Java et du Dart. Pour le meilleur et pour le pire, pour l'instant suis-jé sans opinion.
  • Markand
    Membre éclairé
    _o\ \o\ \o| |o| |o/ /o/ /o_