Microsoft a récemment dévoilé Dactylographe, un nouveau langage de programmation de type JavaScript. Il y a quelque temps, j'ai entendu parler de Dart, un nouveau langage de programmation créé par Google pour résoudre des problèmes liés à Javascript tels que les performances, l'évolutivité, etc.
Le but des deux nouvelles langues me semble identique. Qu'en pensez-vous?
Les objectifs des langues sont-ils les mêmes?
Quelles sont les vraies différences à leur sujet?
dart
typescript
margabit
la source
la source
Réponses:
Citant Bob Nystrom :
En outre, il écrit dans http://www.reddit.com/r/programming/comments/10rkd9/welcome_to_typescript/c6g37xd :
la source
Alors que la question était "Les objectifs des langages sont-ils les mêmes?", La vraie question est: "Comment pouvons-nous améliorer la programmation Web à partir de là où nous sommes?" .
Les deux projets tentent de le faire compte tenu
langage de programmation (TypeScript fait une étape petite mais très propre, Dart fait le mouvement plus révolutionnaire qui bouge toujours)
interopérabilité avec le code js existant (0 transition dans TypeScript qui compile en js, compliquée dans Dart, puisque deux ordinateurs virtuels se parlent)
pratiques d'ingénierie logicielle (Dart uniquement, composants Web et shadow shadow)
Au cours des 3 derniers jours, j'ai plongé profondément dans Dart, puis dans TypeScript. Ma base de code CoffeeScript est passée à 2000 lignes de code, trop pour être manipulée avec une belle mais trop moelleuse CoffeeScript. Les problèmes que j’ai rencontrés sont les suivants: manque de fonctionnalités de CoffeeScript dans les langages conçus pour la programmation à moyenne et grande échelle: interfaces, modules, type safety. Mais il y avait un même beaucoup question plus grave avec le café et js: Les js « ce pointeur » bizarreries affecté ma santé mentale et CoffeeScript ne contribue pas à quoi que ce soit ici.
Alors voici mes résultats après 3 jours d’évaluation et d’utilisation:
Dard
Je suis allé à fond dans le tutoriel, en lisant un livre, en parcourant le deuxième livre et en essayant les démos. Je pensais, Dart c'est l'avenir . Ensuite, j'ai essayé de migrer mon application vers Dart. C’est là que mon enthousiasme est passé de 100 à 10. Voici pourquoi:
L' éditeur de fléchettes est le seul moyen de programmer Dart. Bien que les plugins pour Sublime Text existent, ils ne fournissent pas de fonctionnalités telles que intellisense, la complétion de code (corrigez-moi si je me trompe). L'éditeur de fléchettes est toutefois en qualité pré-alpha. Bien qu'il prenne en charge des tâches magiques comme SuperCool, telles que la mise à jour de la page Web lorsque vous modifiez le fichier CSS (! Vraiment cool), il se bloque ou se plante plusieurs fois par minute. Donc, vous tapez 5 lettres et 2 fois vous devez attendre 2 secondes ou 15 secondes entre les saisies. Et j'avais un projet avec quelques lignes de code, donc je ne voulais pas attendre ce qui se passe lorsque des lignes de 1 000 sont dedans. Déplacé un fichier d'un dossier à l'autre dans Dart Editor, crash. Débogageavec l'éditeur de fléchettes, à première vue, c'est mieux que tous les outils de débogage js que je connais (chrome est mon choix), mais il manque encore trop de choses: pas de fenêtre immédiate (cela rend le débogage js bien meilleur pour le moment), pas de surveillance.
Politique et possibilités d'évasion : Certains disent qu'Apple, MS et Firefox ne fourniront jamais de machines virtuelles Dart. Eh bien, je n'en suis pas si sûr, mais au moins pour Apple, cela semble pour le moment très certain. Pour les autres, c'est plus probable que l'inverse. Donc pas de problème, nous pouvons convertir Dart en JavaScript. La façon dont cette intégration fonctionne est vraiment géniale, Dart maintient un stub js qui garde le code js connecté à l'éditeur de fléchettes, de sorte qu'une
print()
instruction apparaît toujours dans l'éditeur de fléchettes, c'est cool. Mais voici le mais: l'empreinte de ce code converti est grande. 150 Ko ou plus (avant la minification). Je n’ai pas trop creusé dans la taille exacte, alors ne me claque pas là-dessus.Maturité linguistique . Outre les problèmes trop graves liés à Dart Editor, trois fois par minute, je trouvais inacceptable que toutes les sources de code de Dart que vous trouvez utilisent un autre Dart. La langue change tous les jours. Vous trouvez un post d'il y a 5 semaines? C'est obsolète. Vous essayez les exemples du tutoriel de Google? Au moins 1 exemple ne se compile pas car une API a été modifiée. Même des choses banales, comme attacher un événement à un élément DOM sont en bonne voie .
L'intégration avec les bibliothèques js existantes est un peu compliquée. Deux ordinateurs virtuels doivent communiquer ici, ce qui est délicat.
En conclusion, vous ne pouvez pas utiliser Dart sérieusement à partir d’aujourd’hui, et plonger dedans n’est pas très amusant en raison des points 1 et 3. Les deux points disparaîtront avec le temps. À propos des 2 points, Google a publié il y a quelques jours des tests de performances démontrant que leurs js compilés sont meilleurs que ceux écrits à la main. Mes compliments, excellent travail. Le temps de chargement est peut-être encore en retard à cause du problème d'empreinte, comme dit. Cependant, si le code d'empreinte est utilisé par de nombreux sites, il peut être disponible en cache et le tour est joué, disparaît également.
Donc: je considère Dart comme un projet génial, son utilisation présente pour le moment une bonne part de risque imprévisible et il faudra cette année pour que celui-ci atteigne un bon niveau de stabilité.
Manuscrit
L'évaluation de TypeScript est très facile, prend 1 à 2 heures et vous savez tout. En lisant le document de spécifications linguistiques et un livre court (TypeScript révélé), je savais tout et j'ai commencé à programmer. J'ai ensuite été surpris de constater que les ajouts de JavaScript à TypeScript ne couvrent que tous les besoins sérieux liés à l'amélioration de la programmation de mon client . Voici les faits saillants:
Interfaces . L'encapsulation et les interfaces me permettent de structurer mon code facilement. Parfait!
Etat de classe. . TypeScript permet d’exprimer l’état que les instances d’une classe portent explicitement, ou mieux il l’applique. C'est un grand pas mieux comparé à js ou au café.
this
appelez la folie atténuée . Dans les fonctions de flèche, TypeScript rend lethis
pointeur semblable à tout citoyen à comportement normal.Éditeur, Intellisense . TypeScript est livré avec un système intellisense 100% parfait, qui réagit dans la plage des millisecondes ou celle utilisée par Visual Studio lors de la programmation en C #. Les en-têtes TypeScript de toutes les bibliothèques js importantes existent également . Génial super génial
Expérience et risque . Utiliser TypeScript ne comporte aucun risque, le langage est clairement défini, parfaitement stable, c’est juste du JS avec du sucre, rien d’imprévisible.
En fait, ces améliorations me donnent tout ce dont j'avais besoin. La seule chose que j'aimerais voir à l'avenir, ce sont les collections génériques. Mais ce sont des cacahuètes.
Alors qu'en est-il de la performance? Bien que je me considère comme un maniaque de la performance, je ne pense pas qu’il existe un projet qui ferait le choix de la technologie en fonction de la performance. Les deux sont dans la ligue js.
Si vous êtes intéressés par l'avenir de la programmation Web, les deux sont de grands efforts, TypeScript est beaucoup plus pragmatique et utilisable maintenant, Dart est un projet de laboratoire très intéressant qui sera utilisable une fois que des éditeurs matures et des débogueurs seront disponibles et que la portée des projets sera réalisable avec. cela dépendra de la politique.
Dans tous les cas, les 3 jours d'évaluation étaient pour la plupart amusants et j'ai beaucoup appris. Si vous trouvez le temps, il vous faudra 1 jour pour Dart et 2 heures pour que TypeScript vous donne votre propre opinion. Essayez-le
Mise à jour d'octobre 2014
Cela fait longtemps et ex post, il semble que l'hypothèse voulant que Typescript soit la voie la plus sûre et la plus stable était tout à fait juste. Je viens de trouver une déclaration (très) importante sur Typescript, Dart et Closure:
Le défi de la programmation Web dans les grandes entreprises m'intéresse depuis un certain temps. Je pense que Google Closure est toujours la meilleure option pour le développement JavaScript / Web à grande échelle, mais qu'il sera finalement remplacé par quelque chose de moins explicite. Bien que Dart soit très prometteur, je suis toujours consterné par la taille du code JavaScript généré. Par comparaison, si TypeScript peut être traduit directement en JavaScript et compilable à l'aide du mode avancé du compilateur Closure, nous pouvons bénéficier de tous les avantages d'un code JavaScript optimisé à partir de Closure, sans la verbosité. De plus, étant donné que TypeScript est un sur-ensemble de JavaScript, je suis convaincu que ses extensions de syntaxe ont la possibilité de devenir un jour un standard ECMAScript.
http://blog.bolinfest.com/2013/01/generating-google-closure-javascript.html
Michael Bolin est un héro de front-office de google (ex) de longue date (ex), également impliqué dans la fermeture de Google (téléchargez son livre sur la fermeture).
Google Traceur
L'approche de Google pour vivre ECMA Script 6 aujourd'hui est son projet Traceur: https://github.com/google/traceur-compiler
Comparé à Typescript, le support d’outillage est vraisemblablement loin derrière. En revanche, il est beaucoup plus rapide d’adopter des modifications de langage js trop futures, telles que des itérateurs ou des compréhensions.
Flux Facebook, Google AtScript
fournir des fonctionnalités similaires à TypeScript.
"On peut se demander ce qui se passe avec ces différentes solutions de vérification de type JavaScript et ce qu'il faut faire. Une bonne nouvelle est que Microsoft, Facebook et Google collaborent sur ces solutions, selon Jonathan Turner, de Microsoft:
L’équipe TypeScript collabore avec les équipes Flow et AtScript afin de s’assurer que les ressources déjà créées par la communauté de typage JavaScript peuvent être utilisées avec ces outils. Beaucoup de projets peuvent apprendre les uns des autres, et nous sommes impatients de travailler ensemble pour créer les meilleurs outils possibles pour la communauté JavaScript. À long terme, nous travaillerons également à incorporer les meilleures fonctionnalités de ces outils dans ECMAScript, la norme derrière JavaScript. "
article infoq sur le flux fb
la source
this
contexte, car il vous reste à lier les fonctions de rappel déclarées à l'intérieur des méthodes authis
contexte de la méthode afin d'accéder aux attributs de classe. Comment est-ce que "réparer" quelque chose?Citant Scott Hanselman:
De Pourquoi TypeScript a-t-il été la réponse à quelque chose?
la source
var x = {}; x.foo = 5; //Doesn't work in typescript
etvar e = window.event ? window.event : e; //Doesn't work in typescript
L'exemple ci-dessus va échouer le compilateur TypeScript. Est-ce que je manque quelque chose? Je ne peux pas simplement "déposer" mon code JavaScript et utiliser des types lorsque j'en ai envie. Je dois apprendre une nouvelle syntaxe et tout structurer avec des types.var x = {}; x['foo'] = 5;
et ça marche aussivar y:any = {}; y.foo = 5;
, mais j'ai été un peu surpris de constater que vous avez raison à ce sujet - le type de perçu{}
est{}
plutôt queany
. Peut-être un problème d'inférence de type. J'ai posté le problème ici - nous verrons comment ils réagiront.J'ai dû participer à cette discussion avec mes propres conclusions ces derniers temps.
1er: TypeScript
MS a adopté une approche intéressante dans le fait que vous pouvez facilement entrer et sortir de TS et JS. Nous utilisons principalement AngularJS pour notre développement et avons trouvé peu de documentation pour convertir Angular en TypeScript. L’intégration de TypeScript dans notre flux de développement a été un ajout précieux.
2ème: fléchette
Dart est une étape ironique pour Google. Peut-être ne se souviennent-ils pas d’activeX et de tous les cauchemars qui ont été tentés pour faire en sorte qu’une application fonctionne dans quoi que ce soit autre que le redoutable IE 5 ou IE 6 du jour. Il a fallu plusieurs années à la SP pour se remettre de ces jours.
Dart en tant que langage "conceptuellement" semble essayer de combiner certaines fonctionnalités intéressantes de la programmation orientée objet. Les annotations, etc. sont une bonne idée pour Javascript.
Le problème, il est difficile d’imaginer assez de bande passante pour créer un nouvel éditeur, un nouveau langage, de nouveaux serveurs virtuels sur plusieurs navigateurs, des plugins pour d’autres IDE, un compilateur pour convertir en javascript (sans avoir plusieurs Mo), pour convertir ou créer de nouvelles bibliothèques de dart en remplacer les milliers de bibliothèques js actuelles, demander à quelqu'un de choisir des polymères ou des directives, convertir le site dartlang pour utiliser dart, voilà ce que je peux penser par cœur.
Le concept d'essayer d'utiliser Dart dans n'importe quoi mais une application triviale en ce moment est effrayant.
En plus de tout cela, l'ES6 n'est pas loin. ES6 apporte de nombreuses fonctionnalités que Dart tente de corriger et qui existent dans ES5. Quelle sera la proposition de valeur une fois que l'ES6 sera dans les rues? Au moins pour le moment, le seul changement à faire dans TypeScript une fois que ES6 sera disponible est peut-être de choisir une compilation différente à cibler.
Juste pour éclaircir quoi que ce soit que je sois un pro de la SP. MS fabrique des produits décents et a fait de grands progrès pour corriger les erreurs du passé avec la communauté des logiciels libres. Je varie toujours utiliser rarement autre chose que TypeScript de MS.
la source