Ne serait-il pas logique de prendre en charge un ensemble de langages (Java, Python, Ruby, etc.) au moyen d'une machine virtuelle standardisée hébergée dans le navigateur plutôt que d'exiger l'utilisation d'un langage spécialisé - vraiment, un paradigme spécialisé - pour les scripts client uniquement?
Pour clarifier la suggestion, une page Web contiendrait du code octet au lieu de tout langage de niveau supérieur comme JavaScript.
Je comprends la réalité pragmatique que JavaScript est simplement ce avec quoi nous devons travailler maintenant pour des raisons évolutives, mais je pense plus au long terme. En ce qui concerne la compatibilité descendante, il n'y a aucune raison pour que le JavaScript en ligne ne puisse pas être pris en charge simultanément pendant une certaine période et bien sûr, JavaScript pourrait être l'un des langages pris en charge par la machine virtuelle du navigateur.
Hé bien oui. Certes, si nous avions une machine à remonter le temps, revenir en arrière et veiller à ce que de nombreuses fonctionnalités Javascript soient conçues différemment serait un passe-temps majeur (cela, et garantir que les personnes qui ont conçu le moteur CSS d'IE ne se sont jamais tournées vers l'informatique). Mais ça ne va pas arriver, et nous sommes coincés avec ça maintenant.
Je soupçonne qu'avec le temps, il deviendra le "langage machine" pour le Web, avec d'autres langages et API mieux conçus qui seront compilés (et répondront aux différentes faiblesses du moteur d'exécution).
Cependant, je ne pense pas que l'un de ces "langages mieux conçus" sera Java, Python ou Ruby. Javascript est, malgré la possibilité d'être utilisé ailleurs, un langage de script d'application Web. Étant donné ce cas d'utilisation, nous pouvons faire mieux que n'importe laquelle de ces langues.
Je pense que JavaScript est un bon langage, mais j'aimerais avoir le choix lors du développement d'applications Web côté client. Pour des raisons héritées, nous sommes coincés avec JavaScript, mais il existe des projets et des idées qui cherchent à changer ce scénario:
Je pense que nous aurons longtemps JavaScript, mais cela changera tôt ou tard. Il y a tellement de développeurs prêts à utiliser d'autres langues dans le navigateur.
Répondre à la question - Non, cela n'aurait aucun sens.
Actuellement, les choses les plus proches d'un multilingue VM sont la JVM et le CLR. Ce ne sont pas exactement des bêtes légères, et cela n'aurait aucun sens d'essayer d'intégrer quelque chose de cette taille et la complexité dans un navigateur.
Examinons l'idée que vous pourriez écrire un nouveau, multilingue VM qui serait mieux que la solution existante.
Donc, non, cela n'a pas de sens.
N'oubliez pas que pour prendre en charge ces langages, vous devrez réduire leurs API de manière féroce, en supprimant toutes les parties qui n'ont aucun sens dans le contexte d'un script de navigateur. Il y a un grand nombre de décisions de conception à prendre ici et une énorme possibilité d'erreur.
En termes de fonctionnalité, nous ne sommes probablement que vraiment travaillant avec le DOM de toute façon, donc c'est vraiment un problème de syntaxe et d'idiome de langage, à quel point il est logique de demander: "Est-ce vraiment ça vaut le coup?"
Gardant à l'esprit, la chose seulement dont nous parlons est le script côté client, car le script côté serveur est déjà disponible dans la langue que vous aimez. C'est une arène de programmation relativement petite et donc l'avantage d'apporter plusieurs langues est discutable.
Quelles langues serait-il sensé d'apporter? (Attention, le matériel subjectif suit)
Apporter un langage comme C n'a pas de sens car il est fait pour travailler avec du métal, et dans un navigateur il n'y a pas vraiment de métal disponible.
Apporter un langage comme Java n'a pas de sens car la meilleure chose à ce sujet est les API de toute façon.
Faire entrer un langage comme Ruby ou LISP n'a pas de sens car JavaScript est un langage dynamique puissant très proche de Scheme.
Enfin, quel fabricant de navigateur souhaite vraiment prendre en charge l'intégration DOM pour plusieurs langues? Chaque implémentation aura ses propres bogues spécifiques. Nous avons déjà traversé le feu face aux différences entre MS Javascript et Mozilla Javascript et maintenant nous voulons multiplier cette douleur par cinq ou six?
Ça n'a pas de sens.
Sous Windows, vous pouvez enregistrer d'autres langues auprès de l'hôte de script et les mettre à la disposition d'IE. Par exemple, VBScript est pris en charge prêt à l'emploi (bien qu'il n'ait jamais gagné en popularité car il est dans la plupart des cas encore pire que JavaScript).
Les extensions Python win32 permettaient d’ajouter Python à IE comme ça assez facilement, mais ce n’était pas vraiment un bonne idée car Python est assez difficile à mettre en sandbox: de nombreuses fonctionnalités de langage exposent suffisamment de crochets d'implémentation pour permettre à une application supposée restreinte de se déclencher.
C'est un problème en général que plus vous ajoutez de complexité à une application en ligne comme le navigateur, plus il y a de risques de problèmes de sécurité. Un tas de nouvelles langues correspondrait certainement à cette description, et ce sont de nouvelles langues qui se développent également encore rapidement.
JavaScript est un langage laid, mais grâce à l'utilisation prudente d'un sous-ensemble sélectif de fonctionnalités et à la prise en charge de bibliothèques d'objets appropriées, il peut généralement être rendu assez tolérable. Il semble que les ajouts progressifs et pratiques à JavaScript soient le seul moyen de faire évoluer les scripts Web.
Je souhaiterais certainement une langue standard indépendante de la VM dans les navigateurs (je préférerais coder dans une langue tapée de façon statique).
(Techniquement) C'est tout à fait faisable progressivement: d'abord un navigateur majeur le prend en charge et le serveur a la possibilité d'envoyer du bytecode si la demande actuelle provient d'un navigateur compatible ou de traduire le code en JavaScript et d'envoyer du JavaScript en texte brut.
Il existe déjà quelques langages expérimentaux qui se compilent en JavaScript, mais avoir un VM défini permettrait (peut-être) de meilleures performances.
J'avoue cependant que la partie "standard" serait assez délicate. Il y aurait également des conflits entre les fonctionnalités du langage (par exemple, le typage statique ou dynamique) concernant la bibliothèque (en supposant que la nouvelle chose utiliserait la même bibliothèque). Par conséquent, je ne pense pas que ça va arriver (bientôt).
Si vous avez l'impression de vous salir les mains, vous avez soit subi un lavage de cerveau, soit vous ressentez toujours les séquelles des "années DHTML". JavaScript est très puissant et convient bien à son objectif, qui est de scripter le côté client de l'interactivité. C'est pourquoi JavaScript 2.0 a eu un si mauvais rap. Je veux dire, pourquoi les packages, les interfaces, les classes, etc., alors que ce sont clairement des aspects des langages côté serveur. JavaScript est très bien comme langage basé sur un prototype, sans être orienté objet à part entière.
S'il y a un manque de transparence dans vos applications parce que le côté serveur et le côté client ne communiquent pas bien, alors vous voudrez peut-être reconsidérer la façon dont vous architecturez vos applications. J'ai travaillé avec des sites Web et des applications Web extrêmement robustes, et je n'ai jamais dit: "Hmm, je souhaite vraiment que JavaScript puisse faire (xyz)." S'il pouvait le faire, ce ne serait pas JavaScript - ce serait ActionScript ou AIR ou Silverlight. Je n'en ai pas besoin, et la plupart des développeurs non plus. Ce sont de belles technologies, mais elles essaient de résoudre un problème avec une technologie, pas une ... enfin, une solution.
Je ne pense pas qu'un site Web standard VM est-ce inconcevable. Il existe plusieurs façons d'introduire un nouveau site Web VM standard gracieusement et avec prise en charge héritée, tant que vous vous assurez que tout format VM bytecode que vous utilisez peut être rapidement décompilé en javascript, et que la sortie résultante sera raisonnablement efficace (j'irais même jusqu'à deviner qu'un décompilateur intelligent générerait probablement un meilleur javascript que n'importe quel javascript qu'un humain pourrait produire lui-même).
Avec cette propriété, tout Web VM pourrait être facilement décompilé soit sur le serveur (rapide), sur le client (lent, mais possible dans les cas où vous avez un contrôle limité du serveur), ou pourrait être pré-généré et chargé dynamiquement par le client ou le serveur (le plus rapide) pour les navigateurs qui ne prennent pas en charge nativement la nouvelle norme.
Les navigateurs qui prennent en charge nativement la nouvelle norme bénéficieraient d'une vitesse accrue d'exécution pour les applications Web vm. En plus de cela, si les navigateurs basent leurs moteurs javascript hérités sur la norme web vm (c'est-à-dire en analysant javascript dans la norme web vm puis en l'exécutant), ils n'ont pas à gérer deux temps d'exécution, mais cela dépend du fournisseur du navigateur .
Bien que Javascript soit le seul langage de script bien pris en charge à partir duquel vous pouvez contrôler la page directement, Flash a quelques fonctionnalités très agréables pour les programmes plus gros. Dernièrement, il a un JIT et peut également générer du bytecode à la volée (consultez évaluation des expressions d'exécution pour un exemple où ils utilisent flash pour compiler des expressions mathématiques entrées par l'utilisateur jusqu'au binaire natif). Le langage Haxe vous donne un typage statique avec inférence et avec les capacités de génération de bytecode que vous pourriez implémenter presque n'importe quel système d'exécution de votre choix.
cette question refait régulièrement surface. ma position à ce sujet est:
A) ne se produira pas et B) est déjà là.
pardon, quoi? laissez-moi expliquer:
a VM n'est pas seulement une sorte de périphérique magique universel. la plupart des machines virtuelles sont optimisées pour un certain langage et certaines fonctionnalités de langage. prenez le JRE/Java (ou LLVM): optimisé pour le typage statique, et il y a certainement des problèmes et des inconvénients lors de l'implémentation de la frappe dynamique ou d'autres choses Java ne supportait pas en premier lieu.
ainsi, la "machine virtuelle polyvalente générale" qui prend en charge de nombreuses fonctionnalités linguistiques (optimisation des appels de queue, typage statique et dynamique, foo bar boo, ...) serait colossale, difficile à mettre en œuvre et probablement plus difficile à optimiser pour obtenir de bonnes performances il. mais je ne suis pas un concepteur de langage ou un gourou de la vm, peut-être que je me trompe: c'est en fait assez facile, personne n'avait encore l'idée? hrm, hrm.
déjà là: il n'y a peut-être pas de compilateur de bytecode/vm, mais vous n'en avez pas besoin. afaik javascript est terminé, il devrait donc être possible de:
quelle? il n'y avait pas de point C en premier lieu!? parce qu'il n'y en a pas ... encore. google NACL. si quelqu'un peut le faire, c'est google. dès que google le fait fonctionner, vos problèmes sont résolus. seulement, euh, ça ne marchera peut-être jamais, je ne sais pas. la dernière fois que j'ai lu à ce sujet, il y avait des problèmes de sécurité non résolus du type délicat vraiment.
à part ça:
javascript existe depuis ~ 1995 = 15 ans. Pourtant, les implémentations de navigateur diffèrent aujourd'hui (bien qu'au moins ce ne soit plus insupportable). donc, si vous commencez quelque chose de nouveau, vous pourriez avoir une version fonctionnant avec plusieurs navigateurs vers 2035. au moins un sous-ensemble fonctionnel. cela ne diffère que subtilement. et a besoin de bibliothèques et de couches de compatibilité. inutile de ne pas essayer d’améliorer les choses.
qu'en est-il du code source lisible? Je sais que beaucoup d'entreprises préfèrent ne pas utiliser leur code comme "open source". personnellement, je suis assez content de pouvoir lire la source si je soupçonne quelque chose de louche ou si je veux en apprendre. hourra pour le code source!
Mise à jour rapide sur cette ancienne question.
Tous ceux qui ont affirmé qu'une "page Web contiendrait du code octet au lieu de tout langage de niveau supérieur comme JavaScript" "ne se produiront pas".
Juin 2015, le W3C a annoncé WebAssembly qui est
un nouveau format portable, efficace en termes de taille et de temps de chargement, adapté à la compilation sur le Web.
C'est encore expérimental, mais il y a déjà une implémentation prototypique dans Firefox tous les soirs et Chrome Canary et il y a déjà ne démonstration fonctionne .
Actuellement, WebAssembly est principalement conçu pour être produit à partir de C/C++, cependant
Je vous laisse regarder de plus près la page officielle du projet, c'est vraiment excitant!
Il y a quelques erreurs dans votre raisonnement.
Une machine virtuelle standard dans un navigateur standard ne sera jamais standard. Nous avons 4 navigateurs et IE a des intérêts contradictoires en ce qui concerne le "standard". Les trois autres évoluent rapidement mais le taux d'adoption des nouvelles technologies est lent. Qu'en est-il des navigateurs sur téléphones, petits appareils, ...
L'intégration de JS dans les différents navigateurs et son histoire passée vous conduisent à sous-estimer la puissance de JS. Vous promettez une norme, mais désapprouvez JS parce que la norme n'a pas fonctionné dans les premières années.
Comme d'autres l'ont dit, JS n'est pas identique à AIR/.NET/... et autres. JS dans son incarnation actuelle correspond parfaitement à ses objectifs.
À long terme, Perl et Ruby pourraient bien remplacer javascript. Pourtant, l'adoption de ces langages est lente et on sait qu'ils ne prendront jamais le contrôle de JS.
En effet. Silverlight n'est précisément que cela - une machine virtuelle basée sur le client .Net.
Comment définissez-vous le mieux? Meilleur pour le navigateur ou meilleur pour le développeur? (De plus, ECMAScript est différent de Javascript, mais c'est une technicité.)
Je trouve que JavaScript peut être à la fois puissant et élégant. Malheureusement, la plupart des développeurs que j'ai rencontrés le traitent comme un mal nécessaire au lieu d'un véritable langage de programmation.
Certaines des fonctionnalités que j'apprécie sont:
C'est amusant à gérer et c'est établi. Appréciez-le pendant qu'il est autour car bien qu'il ne soit pas le "meilleur" pour le script client, il est certainement agréable.
Je suis d'accord qu'il est frustrant de créer des pages dynamiques en raison d'incompatibilités de navigateur, mais cela peut être atténué par les bibliothèques d'interface utilisateur. Cela ne devrait pas être retenu contre JavaScript lui-même plus que Swing ne devrait l'être contre Java.
JavaScript est la machine virtuelle standard du navigateur. Par exemple, OCaml et Haskell ont maintenant tous deux des compilateurs qui peuvent produire du JavaScript. La limitation n'est pas le langage JavaScript, la limitation est les objets du navigateur accessibles via JavaScript et le modèle de contrôle d'accès utilisé pour vous assurer que vous pouvez exécuter JavaScript en toute sécurité sans compromettre votre machine. Les contrôles d'accès actuels sont si médiocres, que JavaScript n'est autorisé qu'à un accès très limité aux objets du navigateur pour des raisons de sécurité. Le projet Harmony cherche à résoudre ce problème.
C'est une bonne idée. Pourquoi ne pas aller plus loin?
Ensuite, nous pouvons ajouter des fonctionnalités aux navigateurs sans avoir à pousser de nouveaux navigateurs vers chaque client - les nouveaux bits pertinents seraient chargés dynamiquement à partir du Web. Nous pourrions également publier de nouvelles versions de HTML sans toute la complexité ridicule du maintien de la compatibilité descendante avec tout ce qui a déjà fonctionné dans un navigateur - la compatibilité est la responsabilité de l'auteur de la page. Nous pouvons également expérimenter avec des langages de balisage autres que HTML. Et, bien sûr, nous pouvons écrire des compilateurs JIT sophistiqués dans les moteurs, afin que vous puissiez écrire vos pages Web dans la langue de votre choix.
J'accueillerais n'importe quelle langue en plus de javascript comme langage de script possible.
Ce qui serait cool, c'est d'utiliser d'autres langues que Javascript. Java ne serait probablement pas un bon ajustement entre les balises mais des langages comme Haskell, Clojure, Scala, Ruby, Groovy seraient bénéfiques.
Je suis venu une croix Rubyscript il y a quelque temps ... http://almaer.com/blog/running-Ruby-in-the-browser-via-script-typetextruby et http://code.google.com/p/Ruby-in-browser/
Toujours expérimental et en cours, mais semble prometteur.
Pour .Net, je viens de trouver: http://www.silverlight.net/learn/dynamic-languages/ Je viens de découvrir le site, mais ça a aussi l'air intéressant. Fonctionne même depuis mon Apple Mac .
Je ne sais pas à quel point ce qui précède fonctionne pour fournir une alternative à Javascript, mais il semble assez cool à première vue. Potentiellement, cela permettrait d'utiliser n'importe quel Java ou framework .Net nativement à partir du navigateur - dans le sandbox du navigateur.
En ce qui concerne la sécurité, si le langage s'exécute à l'intérieur de la JVM (ou du moteur .Net d'ailleurs), le VM veillera à la sécurité, donc nous n'avons pas à nous en soucier - du moins pas plus que ce que nous devrions pour tout ce qui s'exécute à l'intérieur du navigateur.
Eh bien, nous avons déjà VBScript, n'est-ce pas? Attendez, seulement IE le supporte!
Idem pour votre belle idée de VM. Que faire si je crée un script pour ma page à l'aide de Lua et que votre navigateur ne dispose pas de l'analyseur pour la convertir en bytecode? Bien sûr, nous pourrions imaginer une balise de script acceptant un fichier de bytecode, qui serait même assez efficace.
Mais l'expérience montre qu'il est difficile d'apporter quelque chose de nouveau sur le Web: il faudrait des années pour adopter un nouveau changement radical comme celui-ci. Combien de navigateurs prennent en charge SVG ou CSS3?
A côté, je ne vois pas ce que vous trouvez "sale" dans JS. Il peut être moche s'il est codé par des amateurs, propageant les mauvaises pratiques copiées ailleurs, mais les maîtres ont montré qu'il peut aussi être un langage élégant. Un peu comme Perl: ressemble souvent à un langage obscurci, mais peut être rendu parfaitement lisible.
C'est une très bonne question.
Ce n'est pas le problème uniquement dans JS, car c'est le manque de bons IDE gratuits pour développer de plus gros programmes en JS. Je n'en connais qu'un qui soit gratuit: Eclipse. L'autre bon est Visual Studio de Microsoft, mais pas gratuit.
Pourquoi serait-ce gratuit? Si les fournisseurs de navigateurs Web veulent remplacer les applications de bureau par des applications en ligne (et ils le veulent), ils doivent nous donner, aux programmeurs, de bons outils de développement. Vous ne pouvez pas créer 50 000 lignes de JavaScript à l'aide d'un simple éditeur de texte, JSLint et du débogueur Google Chrome. Sauf si vous êtes un macohist.
Lorsque Borland a fait un IDE pour Turbo Pascal 4.0 en 1987, ce fut une révolution dans la programmation. 24 ans se sont écoulés depuis. Malheureusement, en 2011, de nombreux programmeurs n'utilisent toujours pas la complétion de code, vérification de la syntaxe et débogueurs appropriés. Probablement parce qu'il y a si peu de bons IDE.
Il est dans l'intérêt des fournisseurs de navigateurs Web de créer des outils appropriés (GRATUITS) pour les programmeurs s'ils veulent que nous construisions des applications avec lesquelles ils peuvent combattre Windows, Linux, MacOS, iOS, Symbian, etc.
Vérifiez cela http://www.visitmix.com/Labs/Gestalt/ - vous permet d'utiliser python ou Ruby, tant que l'utilisateur a installé silverlight.
Probablement, mais pour ce faire, nous aurions besoin que les principaux navigateurs les prennent en charge. IE le support serait le plus difficile à obtenir. JavaScript est utilisé car c'est la seule chose sur laquelle vous pouvez compter pour être disponible.
La grande majorité des développeurs à qui j'ai parlé d'ECMAScript et. Al. finissent par admettre que le problème n'est pas le langage de script, c'est le DOM HTML ridicule qu'il expose. Confliter le DOM et le langage de script est une source courante de douleur et de frustration concernant ECMAScript. N'oubliez pas non plus que IIS peut utiliser JScript pour les scripts côté serveur, et des choses comme Rhino vous permettent de créer des applications autonomes dans ECMAScript. Essayez de travailler dans l'un de ces environnements avec ECMAScript pendant un moment, et voyez si votre opinion change.
Ce genre de désespoir existe depuis un certain temps. Je vous suggère de modifier cela pour inclure ou republier des problèmes spécifiques. Vous pourriez être agréablement surpris par le soulagement que vous obtenez.
Un ancien site, mais toujours un excellent point de départ: site de Douglas Crockford .
De manière réaliste, Javascript est la seule langue que les navigateurs utiliseront pendant longtemps, donc même s'il serait très agréable d'utiliser d'autres langues, je ne vois pas cela se produire.
Cette "machine virtuelle standardisée" dont vous parlez serait très grande et devrait être adoptée par tous les principaux navigateurs, et la plupart des sites continueraient à utiliser Javascript de toute façon, car il est plus adapté aux sites Web que de nombreux autres navigateurs.
Vous devrez mettre en sandbox chaque langage de programmation dans ce VM et réduire le nombre d'accès de chaque langue au système, nécessitant beaucoup de changements dans les langues et la suppression ou la réimplémentation de nombreuses fonctionnalités. Alors que Javascript a déjà cela en tête et le fait depuis longtemps.
Vous recherchez peut-être le client natif de Google.
Dans un sens, avoir un langage plus expressif comme Javascript dans le navigateur au lieu de quelque chose de plus général comme Java bytecode a signifié un web plus ouvert.
Parce qu'ils ont tous déjà des machines virtuelles avec des interprètes de bytecode, et le bytecode est également différent. {Chakra (IE), Firefox (SpiderMonkey), Safari (SquirrelFish), Opera (Carakan).
Désolé, je pense que Chrome (V8) se compile en code machine IA32.
Je ne pense pas que vous "compreniez le problème pragmatique que JavaScript est simplement ce avec quoi nous devons travailler maintenant". En fait, c'est un langage très puissant. Vous aviez votre applet Java dans le navigateur depuis des années, et où est-elle maintenant?
De toute façon, vous n'avez pas besoin de "vous salir" pour travailler sur le client. Par exemple, essayez GWT.
... vous voulez dire...
Java et Java applet Flash et Adobe AIR etc.).
En général, tout cadre RIA peut répondre à vos besoins; mais pour chacun, il y a un prix à payer pour l'utiliser (par ex. runtime disponible sur le navigateur ou/et les options propriétaires et/et moins que le bureau pur) http://en.wikipedia.org/wiki/List_of_rich_internet_application_frameworks
Pour développer le Web avec n'importe quelle langue non Web, vous avez GWT: développer Java, compiler en Javascript
Je pense que c'est pas si facile problème. Nous pouvons dire que nous sommes coincés avec JS, mais est-ce vraiment si mauvais avec jQuery, Prototype, scriptaculous, MooTools et toutes les bibliothèques fantastiques?
Rappelez-vous, JS est léger, encore plus avec V8, TraceMonkey, SquirrelFish - nouveaux moteurs Javascript utilisés dans les navigateurs modernes.
C'est aussi prouvé - oui, nous savons qu'il a des problèmes, mais nous en avons beaucoup résolu, comme les premiers problèmes de sécurité. Imagerie permettant à votre navigateur d'exécuter Ruby code, ou autre chose. Le sandbox de sécurité devrait être fait pour rien. Et vous savez quoi? Python les gens déjà - échoué deux fois.
Je pense que Javascript va être révisé et amélioré au fil du temps, tout comme HTML et CSS. Le processus peut être long, mais tout n'est pas possible dans ce monde.