(
./434 > ) Mettre tout le monde d'accord, c'est même pas ça le vrai problème, à mon sens…
Mais à commencer par les exemples que tu donnes :
• asm.js c'est un gros hack vraiment pas très beau, qui n'aurait jamais du voir le jour. Il y a peu de chances que ça devienne populaire un jour vu la tronche du code que le navigateur doit exécuter.
• NaCl est hors compétition à mon sens, ne visant clairement pas à remplacer le Web "classique". Google est plus là pour pousser Dart à priori

• Dart est un projet intéressant au premier abord, je n'ai pas creusé outre mesure donc j'aurais du mal à critiquer. Du peu que j'en ait vu, le langage semble avoir peu de défauts, mais au niveau de l'environnement, cela semble devenir déjà bien trop compliqué… (Ex: Contrainte d'avoir une fonction main… Est-ce vraiment utile/indispensable en développement web ?)
• TypeScript c'est JavaScript++… Si c'est pas assez clair, je le reformule autrement: c'est du JavaScript avec plus de fonctionnalités (notamment certaines de ES6), et du typage "statique", mais ça reste du JavaScript. En dehors de ça, ça me semble être un des plus prometteurs, c'est celui qui s'éloigne le moins de la réalité.
(PS: à l'heure actuelle, la réalité, c'est JavaScript)• La soi disant approche de Apple… "lol". Sérieusement, c'est hors contexte. Oui, Apple préfèrera que tu développes une app native (et je pense qu'ils ont raison), mais c'est pas dans le contexte du web, juste le contexte de iOS

(De fait, la position de Apple c'est plutôt que JavaScript, ça leur va pour le moment…)
J'en ajoute un dans la liste, pas soutenu par un "gros" du milieu, comme ça en plus je pense qu'on aura fait le tour:
• CoffeeScript. À chaque fois que je regarde ce langage, j'ai l'impression que c'est une vaste plaisanterie. La syntaxe est abominable et on dirait l'enfant batard de Visual Basic et JavaScript. Oui je commence direct sur le méchant, mais le fond de ma pensée, c'est que c'est pas la peine de s'emmerder à remplacer JavaScript si c'est pour mettre ça à la place. (Celui-là, avec une syntaxe meilleure, ça aurait peut-être pu être un bon truc)
(
./431 > )
Après, ce que j'aimerais réussir à faire comprendre, c'est qu'il faut regarder le grand schéma ("the big picture") et arrêter de se focaliser sur les détails de "ça c'est bien", "ça c'est pas bien". Je remarque ça quotidiennement, mais peu se posent réellement la question de savoir "ce qui va se passer ailleurs si on change à un truc ici".
En fait, aujourd'hui, les technologies employées s’emboîtent très bien les unes avec les autres, mais l'équilibre est en réalité très fragile…

Par exemple, la nature informe du JavaScript fait qu'il est facile de caser un petit bout de script au milieu d'une page pour ajouter une fonctionnalité. Et oui, document.write(), c'est le mal, et on fait bien mieux aujourd'hui, mais c'est pas pour autant qu'insérer du JavaScript n'importe où dans une page perd son utilité.
=> Que se passe-t-il si on met à la place un langage qui nécessite une vraie structure, comme Dart ? On interdit certainement rien, mais on perd beaucoup en flexibilité: L'intérêt principal de pouvoir caser des petits bouts de script partout, aujourd'hui, est que le navigateur est obligé d'exécuter des scripts dans l'ordre, et si on fait ça correctement, ça permet d'afficher la page avant qu'elle soit entièrement chargée.
Typiquement, on gagnerait sans doute bien plus à autoriser une vraie gestion de dépendances entre scripts, implémentée dans le navigateur, ce qui permettrait un bon chargement asynchrone. (En pratique, le chargement asynchrone qui existe actuellement, est rarement utilisable)

Par exemple, le fait que JavaScript fonctionne par prototype, permet de modifier facilement la structure de ses objets, et d'étendre n'importe quel "type" d'objet, y compris ceux du navigateur. L'extension des objets du navigateur est un sujet discutable, mais grâce à cela, on peut implémenter des "polyfill", et autres patches pour navigateurs incompatibles.
=> Quelle serait la façon équivalente de faire avec un langage typé par classes d'objet ?
Le C# a une solution pour "rajouter" des méthodes à un type d'objet: les méthodes d'extension. C'est assez proprement exécuté, et personnellement j'adore cette fonctionnalité. Maintenant, ça marche très bien en C#, mais mis dans le contexte du Web, c'est une démarche vraiment
lourde.
Un langage objet tel que C++/C#/Java va proposer des classes fortement typées. Un mécanisme pour étendre une classe pré-existante serait de procéder par héritage, et de fournir par un moyen x ou y une fonction de construction au code qui aurait besoin d'instancier ses objets. (Genre avec un conteneur IoC… Ça devient sacrément lourd là !) Et quid des objets qui auraient déjà été créés avant ? Ils vont garder le même type, c'est pas cool.

Dernier exemple, pour la route. JavaScript est un langage à typage dynamique, du coup on sait jamais sur quoi on travaille.
=> Oui, c'est vrai, mais comme JavaScript est un langage à prototypes, il est difficile (et on peut approximer cela à "impossible") de pouvoir garantir une quelconque notion de type: En dehors des types primitifs, les "types" n'existent pas. Du coup pour avoir un vrai typage, il faudrait se séparer de certaines notions de prototypage d'objets. Mais si on se retrouve avec un langage objet à typage statique, on tombe dans la lourdeur du code. (Toujours passer par des classes) Et de surcroît, ça se minifiera vraiment beaucoup moins bien que du JS…
Y'a honnêtement qu'un seul truc que je pense qu'on aurait pu se débarasser (genre dans une version "pure" de JavaScript) de façon honnête, c'est les conversions automatiques sur l'opérateur == qui le rendent non transitif (ben voyons).
Mais en toute honnêteté, il faudrait aussi revoir les conversions automatiques sur les autres opérateurs… Du coup que considérerait-on comme vrai ou faux dans le langage, sachant qu'on ne peut garantir le typage ? Là je pense que ça coincerait

Au final, je pense que si on voulait un vrai truc sérieux, il faudrait revoir la copie globale et faire fi du trio HTML+CSS+JS en intégralité dès lors que l'on parlerait d'
applications. Et là, même si j'ai quelques idées sur le sujet, tel que je le vois, ça devient franchement compliqué.
(Après bien sûr, on peut rajouter à tout ça le problème des intérêts divergents des différents navigateurs Web… Mais il faudrait d'abord traverser tous les obstacles techniques et conceptuels…

)