IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Chroniqueur Actualités

    Homme Profil pro
    Rédacteur technique
    Inscrit en
    juin 2016
    Messages
    1 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : juin 2016
    Messages : 1 801
    Points : 40 508
    Points
    40 508
    Par défaut La spécification des nouvelles fonctionnalités de la norme ECMAScript 2021 est désormais terminée
    La spécification des nouvelles fonctionnalités de la norme ECMAScript 2021 est terminée
    tour d'horizon des nouveautés introduites dans cette nouvelle version

    Après ES20 ou ECMAScript 2020, correspondant à la version annuelle d'ECMAScript de 2020 ou à la 11e version du standard ECMAScript, l'ECMA International, l'organisation qui s'occupe de la normalisation du langage de script ECMAScript qui forme la base de JavaScript, a annoncé l'arrivée d'ECMAScript 2021. Lundi, elle a présenté une liste complète des nouveautés qui devraient être ajoutées au langage pour établir la norme ECMAScript 2021. Voici ci-dessous un aperçu des propositions de nouvelles fonctionnalités qui ont été retenues par l'ECMA International.

    Bref rappel sur le standard ECMAScript de l'ECMA International

    ECMAScript est un langage de script qui forme la base de plusieurs langages de script. Les langages tels que JavaScript, ActionScript et JavaScript sont tous basés sur la spécification ECMAScript. De même, JScript et TypeScript de Microsoft l'utilisent comme noyau. ECMAScript est standardisé par l'organisation ECMA International grâce aux spécifications ECMA-262 et ECMA-402. Le développement de la spécification du langage ECMAScript a commencé en novembre 1996. La première édition de cette norme Ecma a été adoptée par l'assemblée générale de l'ECMA en juin 1997.

    Nom : r3acgtmqz7e7k8y5bcyk.png
Affichages : 55820
Taille : 28,4 Ko

    Depuis la publication de la première édition de la spécification en 1997, ECMAScript est devenu l'un des langages de programmation à usage général les plus utilisés au monde. Il est surtout connu comme le langage intégré aux navigateurs Web, mais il a aussi été largement adopté pour les serveurs et les applications intégrées. Un nouveau standard ECMAScript, l'ECMAScript 2021 ou ES21, vient d'être approuvé et sera livré un peu plus tard dans l'année.

    String.prototype.replaceAll()

    Pour remplacer toutes les occurrences de chaînes, vous devez utiliser une combinaison de String.prototype.replace et de regexp globale. String.prototype.replaceAll() est une nouvelle méthode introduite par l'ECMA International dans la spécification qui simplifie cette opération. Selon les critiques, la popularité de la question "How to replace all occurrences of a string in JavaScript ?" sur StackOverflow prouve la nécessité de cette fonctionnalité dans le langage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    const string = "it-is-just-a-test";
     
    // instead of doing this
    string.replace(/-/g, "_")
    // "it_is_just_a_test"
     
    // in ES2021 we can do
    string.replaceAll("-", "_")
    // "it_is_just_a_test"
    Promise.any()

    Les Promise ne sont pas un concept nouveau dans la communauté JavaScript. Elles existent dans l'écosystème depuis longtemps. Les Promise JavaScript existaient avant même qu'elles ne fassent officiellement partie de la spécification ECMAScript dans ES6. Ce sont des objets qui représentent l'achèvement ou l'échec éventuel d'une opération asynchrone, et la valeur qui en résulte. Il existe trois états possibles pour les Promise : en attente (état initial - toujours en attente), remplie (promesse réussie) et rejetée (Promise non tenue).

    Si la Promise est soit remplie, soit rejetée, mais pas en attente, on dit qu'elle est réglée. Les combinateurs de Promise quant à eux sont utilisés pour faciliter le traitement des Promise. Le standard ECMAScript dispose actuellement de trois combinateurs de Promise, notamment Promise.all(), Promise.race(), Promise.allSettled(). ES21 en apporte une nouvelle. Promise.any() rejoint la liste des combinateurs de Promise dans le cahier des charges de cette année. Promise.any() est le dernier combinateur de promesses qui est maintenant à l'étape 3 du processus TC39.

    Il prend un objet itérable et dès que l'une des Promise est remplie, il renvoie cette Promise. La différence entre cette méthode et Promise.all() est que Promise.all() renvoie un tableau de valeurs de réalisation alors que Promise.any() ne renvoie que la première valeur de réalisation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    const API = "https://api.github.com/users"
     
    Promise.any([
      fetch(`${API}/pawelgrzybek`),
      fetch(`${API}/gabriel403`)
    ])
      .then(response => response.json())
      .then(({name}) => console.log(`Cool dude is: ${name}`))
      .catch(error => console.error(error));
    La différence entre Promise.race() et Promise.any() est que Promise.race() renvoie la première valeur réglée (soit remplie, soit rejetée) alors que Promise.any() ignore les promesses rejetées jusqu'à la première promesse remplie. Si un itérable vide est passé, la méthode renvoie une Promise déjà résolue. Si toutes les Promise données sont rejetées, la méthode rejette de manière asynchrone avec une Erreur agrégée, une nouvelle sous-classe d'erreur qui regroupe les erreurs individuelles. Promise.any() est encore en phase expérimentale et n'est pas encore totalement prise en charge par les navigateurs.



    WeakRefs et Finalizers

    La proposition WeakRefs des contributeurs Dean Tribble et Sathya Gunasekaran a apporté deux nouveaux constructeurs, WeakRef et FinalizationRegistry. Ces nouvelles fonctionnalités sont des concepts linguistiques de niveau inférieur beaucoup plus compliqués.

    • WeakRefs

    WeakRef est l'abréviation de Weak References (références faibles). L'utilisation principale des références faibles est d'implémenter des caches ou des mappages vers de grands objets. Dans de tels scénarios, nous ne voulons pas garder beaucoup de mémoire pendant longtemps, en conservant ce cache ou ces mappages rarement utilisés. Vous pouvez permettre à la mémoire d'être collectée tôt ou tard et si vous en avez besoin à nouveau, vous pouvez générer un nouveau cache. Autrement dit, lorsque vous assignez un objet à une variable, il pointe vers le morceau de mémoire où la valeur de cet objet est stockée (référence forte).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    const obj = { spec: "ES2021" };
    const objWeakRef = new WeakRef(obj);
     
    // do something cool
     
    objWeakRef.deref();
    // returns obj in case it is still in memory
    // returns undefined in case it has been garbage collected
    Si le programme ne fait plus référence à cet objet, l'éboueur le détruit et récupère la mémoire. Une instance de WeakRef crée une référence à un objet donné qui le renvoie s'il est encore en mémoire ou indéfini dans le cas où l'objet cible aurait été récupéré.

    • FinalizationRegistry

    FinalizationRegistry est une fonction complémentaire de WeakRef. Il permet aux programmeurs d'enregistrer des rappels à invoquer après qu'un objet a été ramassé. Une instance de FinalizationRegistry déclenche une fonction de rappel après qu'un objet cible enregistré a été collecté. Mais attention, il faut éviter de les utiliser selon la recommandation de l'auteur de la proposition. Ces deux fonctionnalités reposent sur l'implémentation d'un collecteur d'ordures qui varie en fonction du moteur et de sa version.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    const obj = { spec: "ES2021" };
    const registry = new FinalizationRegistry(value => {
        console.log(`The ${value} object has been garbage collected.`)
    });
    registry.register(obj, "ECMAScript 2021");
     
    // perform some action that triggers garbage collector on obj
    // The ECMAScript 2021 object has been garbage collected.
    Logical Assignment Operators (opérateurs d'affection logique)

    Comme son nom l'indique, la proposition d'affectation logique est la combinaison des opérateurs logiques (&&, || et ? ?) et de l'opérateur d'affectation (=). Un complément pratique au langage ! Jetez un coup d'œil.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var x = 1;
    var y = 2;
    x &&= y;
    console.log(x); // 2
    Le fonctionnement de la ligne 3 peut être étendu à :

    Ou dans un autre sens, c'est comme :

    Comme x est une valeur de vérité, on lui attribue la valeur de y, c'est-à-dire 2. Tout comme c'est fait avec &&, vous pouvez le faire avec les opérateurs || et ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x &&= y;
    x ||= y;
    x ??= y;
    Séparateurs numériques

    Les grands nombres sont difficiles à lire. Grâce à Rick Waldron de l'équipe de contributeurs, vous pouvez maintenant séparer un groupe de chiffres en utilisant des traits de soulignement (_, U+005F). Cette fonctionnalité est bien connue d'autres langages de programmation comme Java, Python, Perl, Ruby, Rust, Julia, Ada, C#.

    La version ECMAScript 2021 devrait être publiée au mois de juin 2021. Toutes les fonctionnalités énumérées ci-dessus sont déjà prises en charge dans la version Google Chrome Canary.

    Source : ECMAScript 2021

    Et vous ?

    Que pensez-vous des nouvelles fonctionnalités introduites par ES21 ?
    Quelles fonctionnalités vous attirent le plus dans cette nouvelle version d'ECMAScript ?
    Quelles fonctionnalités aimeriez-vous voir apparaître dans la prochaine version du standard ECMAScript ?

    Voir aussi

    La version candidate d'ECMAScript 2020 est disponible avec l'ensemble des fonctionnalités finales, dont l'opérateur de coalescence nulle (??) et de chaînage optionnel (?.)

    ECMAScript 2017 : Ecma International annonce les nouvelles mises à jour de ses spécifications pour les langages de script

    ECMAScript 2016 : des mises à jour plus petites et plus fréquentes pour l'ensemble de normes des langages de script

    Tutoriel présentant les nouveautés ECMAScript 6
    Contribuez au club : corrections, suggestions, critiques, ... Contactez le service news et Rédigez des actualités

  2. #2
    Rédacteur/Modérateur

    Avatar de yahiko
    Homme Profil pro
    Développeur
    Inscrit en
    juillet 2013
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : juillet 2013
    Messages : 1 301
    Points : 8 192
    Points
    8 192
    Billets dans le blog
    43
    Par défaut
    Le langage JavaScript continue d'évoluer et plutôt dans le bon sens.
    Parmi les fonctionnalités vraiment intéressantes je note Promise.any() qui va faciliter la combinaison des promises.
    Quant à WeakRef et FinalizationRegistry, ça devrait aider à limiter significativement les problèmes de "fuite de mémoire" en permettant de faire référence à un objet dans le cas où justement on souhaite gérer sa disparition sans créer de référence "forte".
    Le reste des évolutions étant assez accessoire je trouve, mais pragmatique.
    Tutoriels et FAQ TypeScript

  3. #3
    Membre éprouvé
    Homme Profil pro
    chomeur
    Inscrit en
    avril 2015
    Messages
    603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : chomeur
    Secteur : Distribution

    Informations forums :
    Inscription : avril 2015
    Messages : 603
    Points : 1 246
    Points
    1 246
    Par défaut
    on peut aussi dire que Le langage JavaScript continue de se complexifier.

    le choix est simple soit on simplifie un langage et on fait appel au raisonnement pour tous résoudre, soit on complexifie le langage en ajoutant de multiples méthode afin de gérer toutes situation aussi infime soient elles mais dans ce cas on fait plus appel a la mémoire afin justement de mémoriser toutes les méthode et leurs syntaxe et a un moment ca devient trop avec comme résultat l'augmentation de la courbe d'apprentissage

    tous ça pour dire qu'il y a un juste milieux qui celons moi a été dépassé

    quand a l'histoire des promesse en abuser devient imbuvable
    Plus vite encore plus vite toujours plus vite.

  4. #4
    Membre expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    juin 2006
    Messages
    2 069
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : juin 2006
    Messages : 2 069
    Points : 3 667
    Points
    3 667
    Par défaut
    j'ai du mal a comprendre dans quelle situation concrete, on aurait besoin du weakref...
    Une instance de WeakRef crée une référence à un objet donné qui le renvoie s'il est encore en mémoire ou indéfini dans le cas où l'objet cible aurait été récupéré.
    si on a besoin de tester la "suppression" de notre variable, c'est qu'on en a besoin non ?

    1) creation de la variable weak
    2) variable supprimee
    3) on constate que notre variable est supprime
    4) on la regenre car on en a besoin

    ? j'ai rate un concept ?
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  5. #5
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    décembre 2011
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : décembre 2011
    Messages : 1 295
    Points : 3 556
    Points
    3 556
    Billets dans le blog
    12
    Par défaut
    @Doksuri ,

    Aujourd'hui de plus en plus d'opérations sont réalisés en JS, comme récupérer les données sur le navigateurs et réaliser ces opérations coté navigateur. Imagine que tu as une page avec un tableau contenant plusieurs milliers de lignes, puis tu as un carroussel qui te permet de passer d'un tableau à un autre, plus tu vas charger un nouveau tableau plus tu vas consommer de la mémoire, mais plus tu vas manquer de mémoire et plus les refs weaks seront supprimées. Donc oui, c'est de l'optimisation, si la ref weak est supprimée tu recharges... mais seulement si elle est supprimée

    A+
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  6. #6
    Membre expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    juin 2006
    Messages
    2 069
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : juin 2006
    Messages : 2 069
    Points : 3 667
    Points
    3 667
    Par défaut
    Citation Envoyé par Gugelhupf Voir le message
    Imagine que tu as une page avec un tableau contenant plusieurs milliers de lignes, puis tu as un carroussel qui te permet de passer d'un tableau à un autre, plus tu vas charger un nouveau tableau plus tu vas consommer de la mémoire
    soit tu creees, tous tes tableaux dans le DOM, et ta grosse variable sera supprimee d'elle-meme (et le carroussel fait juste un display:block/none sur le tableau conserne)
    soit tu fais un appel ajax pour charger une nouveau tableau (et dans ce cas, chaque tableau est "ephemere")

    (il y a vraiment quelque chose que je rate la
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    novembre 2009
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : novembre 2009
    Messages : 465
    Points : 1 113
    Points
    1 113
    Par défaut
    Tu mets tes données en weak cache. Du coup ça laisse le JavaScript engine décider si il les enlève ou pas en fonction des besoins.
    Quand toi tu as de nouveau besoin des données tu les lis de la weak cache. Si elles y sont encore tant mieux, sinon tu les reconstruis par exemple en devant les relire du serveur

Discussions similaires

  1. Aperçu des nouvelles fonctionnalités de Unreal Engine 4.5
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 09/10/2014, 10h30
  2. Présentation des nouvelles fonctionnalités de Unigine
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 5
    Dernier message: 08/08/2012, 23h00
  3. Réponses: 3
    Dernier message: 29/02/2012, 16h35
  4. Exploitation des nouvelles fonctionnalités VS 2010
    Par sviolette dans le forum ADO.NET
    Réponses: 2
    Dernier message: 23/09/2011, 16h02
  5. Ajouter des nouvelles "fonctionnalités" à VisualStudio
    Par samalkah dans le forum Visual Studio
    Réponses: 0
    Dernier message: 03/12/2008, 22h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo