11
votes

Supprimage de type optionnel JavaScript

Lorsqu'un langage de programmation est saisi de manière statique, le compilateur peut être plus précis sur la répartition de la mémoire et donc être généralement plus performant (avec toutes les autres choses égales).

Je crois que ES4 a introduit une allusion optionnelle de type optionnelle (à partir de ce que je comprends, Adobe avait un rôle énorme pour contribuer à ses spécifications en raison de ActionScript). JavaScript apporte-t-il officiellement le type de support officiellement en conséquence? Est-ce que ES6 prendra la suppression optionnelle de type optionnel pour les variables natales?

Si JavaScript prend en charge le type d'indication de type, existe-t-il des points de repère qui montrent comment il est payé en termes de performance? Je n'ai pas vu de projet open source l'utiliser encore.


3 commentaires

"Je crois que ES4 a introduit le type optionnel d'allusion" => Avez-vous une citation pour cela?


Je ne sais pas si cela compte, mais voici la spécification: ECMAScript.org/es4/ Spécification / aperçu.pdf Vous trouverez les informations sous Types en recherchant le PDF pour "Facultatif"


Oh ... ES4 - AKA "La norme qui n'était pas". Sans entrer dans la politique de celui-ci, envisagez ES4 "Vœuvre de réflexion".


5 Réponses :


14
votes

Ma compréhension, d'écouter de nombreux discussions JavaScript sur les différents sites, est que l'indication de type ne fera pas autant pour aider que les gens le pensent.

En bref, la plupart des objets JavaScript ont tendance à avoir la même chose "Forme", si vous voulez. C'est-à-dire qu'ils auront les mêmes propriétés créées dans le même ordre. Cette "forme" peut être considérée comme le "type" de l'objet. Un exemple: xxx

Tous les objets fabriqués à partir de "Point" auront la même "forme" et les moteurs JavaScript internes nouveaux peuvent faire des jeux de fantaisie pour obtenir une recherche plus rapide.

en chrome (peut-être d'autres), ils utilisent un drapeau haut de bits pour indiquer si le reste du nombre est un entier ou un pointeur.

avec toutes ces choses fantaisistes en cours, Cela vient de taper des codeurs humains. Pour moi, pour un, vraiment comme ne pas avoir à vous inquiéter de type et n'utiliserais pas cette fonctionnalité.

Vous êtes semi-correct, cependant. Type Influence fait partie de ActionScript 3 qui est une dérivée de ECMAScript - mais l'allusion à l'allusion ne l'a jamais fait dans la norme. Afaik, en dehors de la réflexion vocale, cela n'a pas été discuté.

Cette vidéo décrit les choses beaucoup plus en détail: http://www.youtube.com/watch?v=frufjfbsoqy


8 commentaires

Est-ce que vous parlez de tracemonkey, V8 et c'est ILK?


Intéressant: dynamique incrémentale Génération de code avec Trace Arbres


@Jaredfarrish - J'ai regardé comme cinq heures de vidéos connectées JS dans une rangée, certains des détails ont été floues. Je connais les exemples spécifiques que j'ai donnés venus de v8 , mais il y avait des commentaires dans la ligne de "et l'équipe Firefox fait quelque chose de similaire."


Lié dans une vidéo documentaire à ma réponse.


Eh bien, il semble que TRACémonkey n'est plus , et Jägermonkey est maintenant suprême. Article intéressant. En outre, tout ce qui est arrivé à exécuter C ++ ou quoi que ce soit dans Chrome? Est-ce encore possible?


Eh bien, répondit ma propre question. Ça s'appelle Client native ( NaCl ) et il est toujours apparemment actif. .


Cette réponse n'était pas la plus directe, mais la mise à emporter était que cette fonctionnalité ES4 n'est pas / ne sera pas prise en charge.


Correct. ES4 est mort. ES5 a pris des idées et construit à partir de là.



0
votes

JavaScript est basé sur des prototypes, de sorte que le "type" d'un objet est entièrement dynamique et capable de changer toute sa durée de vie.

Regardez les résultats de Ben Firhman sur la performance JavaScript en ce qui concerne les types d'objets - http: // jsconf.eu/2010/speaker/lessons_learnt_pushing_browser.html


1 commentaires

Le lien est mort maintenant



5
votes

Les compilateurs JavaScript JIT doivent faire de jolies substances pour déterminer les types d'expressions et de variables, car les types sont cruciaux pour de nombreuses optimisations. Mais les écrivains de compilation JavaScript ont passé les cinq dernières années à faire tout ce travail. Les compilateurs sont vraiment intelligents maintenant. Les types statiques facultatifs n'amélioreraient donc pas la vitesse d'un programme typique.

Étonnamment, tapez les annotations de type dans ActionScript rendent parfois le code compilé plus lent en exigeant une vérification de type (ou une conversion implicite) lorsqu'une valeur est transmise d'un code non typé sur le code dactylographié.

Il existe d'autres raisons pourraient souhaiter des types statiques dans un langage de programmation, mais le Comité des normes ECMAScript n'a aucun intérêt à les ajouter à JS.


1 commentaires

Il existe des projets tels que ASM.JS qui parviennent à obtenir des performances quasi natives avec JavaScript (ou ils disent donc de toute façon) en faisant des astuces étranges avec la coercition de type. Les notes de type peuvent grandement aider avec cela, du moins en théorie.



7
votes

Je suis en retard, mais puisque personne ne vous a vraiment répondu aux questions concernant les normes, je vais sauter.

Oui, le type d'allusion a été discuté dans le cadre de ECMAScript 4, et cela semblait être l'avenir de JavaScript ... jusqu'à l'ES4 Bit la poussière. Ecmascript 4 a été abandonné et n'a jamais finalisé. ECMAScript 5 (la norme actuelle) ne contenait pas de nombreuses choses prévues pour ECMAScript 4 (y compris l'allusion de type), et n'était vraiment qu'une version rapidement renforcée du projet ECMAScript 3.1 - pour obtenir des caractéristiques utiles sur la porte À la suite de la disparition prématurée de ES4.

Comme vous l'avez mentionné, ils travaillent désormais sur la barattage de ECMAScript 6 (qui possède des caractéristiques totalement géniales!), mais ne vous attendez pas à voir type d'allusion. Les gars d'Adobe ont, à un degré, se sont séparés par la commission Ecmascript et le comité ES ne semble pas intéressé à le ramener (je pense pour une bonne raison).

Si c'est quelque chose que vous voulez, vous voudrez peut-être consulter TypeScript . C'est un nouveau projet Microsoft qui est essentiellement une tentative d'ES6 + Types. C'est un superset de JavaScript (presque identique à l'exception de l'inclusion de types), et il compile le javascript annoncable.


2 commentaires

Microsoft joue-t-il un rôle majeur dans le but de ne pas apporter d'allusion de type pour rendre Thypothingscript Live Long?


@Duke pourriez-vous clarifier votre question un peu?



4
votes

ES7 (ne pas venir bientôt) a une nouvelle fonctionnalité appelée Garde pourrait être celui que vous demandez. La syntaxe est maintenant un peu similaire à ES4 et à Thypscript. Toutes utilisent : et appendez le type à la variable. Mais sa syntaxe ne confirme pas.