Warum JavaScript anstelle einer virtuellen Standard-Browser-Maschine?


167

Wäre es nicht sinnvoll, eine Reihe von Sprachen (Java, Python, Ruby usw.) über eine standardisierte virtuelle Maschine zu unterstützen, die im Browser gehostet wird, anstatt die Verwendung einer speziellen Sprache - wirklich eines speziellen Paradigmas - zu erfordern? Nur für Client-Skripte?

Um den Vorschlag zu verdeutlichen, würde eine Webseite Bytecode anstelle einer höheren Sprache wie JavaScript enthalten.

Ich verstehe die pragmatische Realität, dass JavaScript aus evolutionären Gründen einfach das ist, mit dem wir jetzt arbeiten müssen, aber ich denke langfristig mehr darüber nach. In Bezug auf die Abwärtskompatibilität gibt es keinen Grund, warum Inline-JavaScript für einen bestimmten Zeitraum nicht gleichzeitig unterstützt werden könnte, und natürlich könnte JavaScript eine der Sprachen sein, die von der virtuellen Maschine des Browsers unterstützt werden.


17
Ich weiß nicht, warum dies abgelehnt wird. Ich fand das eine gute Frage!

11
Weil es eher eine Beschwerde als eine Frage ist.
Dustman

6
Es liegt an der Idee, dass Javascript keine echte Sprache ist oder nicht so gut wie andere Sprachen. Beides hat sich seit den Anfängen nicht bewahrheitet, doch die "schmutzige" Wahrnehmung bleibt gegenwärtig bestehen.
Adam Davis

43
Wow, ich habe noch nie gesehen, dass die SO-Community so vollständig gescheitert ist. Die einzigen Antworten, die sich sogar mit der hier vorgeschlagenen Idee befassen, sind ganz unten und werden abgelehnt, während die Antworten, die unnötig "JS verteidigen", die ganze Liebe bekommen. Diese Frage greift JS nicht an, sondern befürwortet lediglich die Wahl. Es heißt einfach: "Was auch immer Sie von JS halten, wäre es nicht schön, wenn Sie auch andere Sprachen verwenden könnten, wenn Sie sie bevorzugen?". Was stimmt nicht mit dir?
Jordi

4
Dies ist ein großes Problem bei StackOverflow, das Änderungen in der Zukunft ermöglicht, nachdem mehrere Antworten gegeben wurden. Die ursprünglich gestellte Frage ist für die Top-Antworten relevanter, während der Rest den "neuen Geist" der Frage nach den Änderungen anspricht.

Antworten:


28

Nun ja. Wenn wir eine Zeitmaschine hätten, wäre es sicherlich ein großer Zeitvertreib, zurück zu gehen und sicherzustellen, dass viele der Javascript-Funktionen anders gestaltet wurden (und sicherzustellen, dass die Leute, die die CSS-Engine des IE entworfen haben, nie in die IT gegangen sind). Aber es wird nicht passieren, und wir bleiben jetzt dabei.

Ich vermute, dass es mit der Zeit zur "Maschinensprache" für das Web wird, in die andere besser gestaltete Sprachen und APIs kompiliert werden (und für verschiedene Laufzeit-Engine-Schwächen sorgen).

Ich denke jedoch nicht, dass eine dieser "besser gestalteten Sprachen" Java, Python oder Ruby sein wird. Javascript ist trotz der Möglichkeit, an anderer Stelle verwendet zu werden, eine Skriptsprache für Webanwendungen. In diesem Anwendungsfall können wir es besser machen als jede dieser Sprachen.


54
-1 für die Bemerkung des IE CSS-Teams. IE6 war nicht schlecht, als es veröffentlicht wurde, sein Hauptkonkurrent war das fehlerhafteste Stück Mist-Software, das jemals geschrieben wurde. Personenangriffe machen die Welt nicht zu einem besseren Ort, obwohl sie manchmal Spaß machen.
Erikkallen

5
Konnte Ihrer Einschätzung von JavaScript als "... eine Skriptsprache für Webanwendungen ..." nicht widersprechen. Es ist eine großartige, flexible Sprache mit viel mehr Anwendbarkeit.
TJ Crowder

2
@TJ Crowder: ITYM "Konnte [...] nicht mehr widersprechen."?
Christoffer Hammarström

2
@ Jaroslaw Szpilewski Schamloser JS-Eiferer? Haben Sie dies falsch kommentiert und es für einen anderen Beitrag gehalten? Für @erikkallen war der Kommentar des IE CSS-Teams das, was allgemein als "Witz" bekannt ist.
Adam Wright

2
Etwas "Hellsehen" in dieser Antwort: Wir haben jetzt CoffeeScript.
andref

19

Ich denke, JavaScript ist eine gute Sprache, aber ich würde gerne eine Wahl haben, wenn ich clientseitige Webanwendungen entwickle. Aus alten Gründen bleiben wir bei JavaScript, aber es gibt Projekte und Ideen, die dieses Szenario ändern möchten:

  1. Google Native Client : Technologie zum Ausführen von nativem Code im Browser.
  2. Emscripten : LLVM-Bytecode-Compiler für Javascript. Ermöglicht die Ausführung von LLVM-Sprachen im Browser.
  3. Idee: .NET CLI im Browser, vom Ersteller von Mono: http://tirania.org/blog/archive/2010/May-03.html

Ich denke, wir werden noch lange JavaScript haben, aber das wird sich früher oder später ändern. Es gibt so viele Entwickler, die bereit sind, andere Sprachen im Browser zu verwenden.


LLVM könnte eine Antwort auf all dies sein. Es gibt bereits eine große Anzahl von Sprachen (Python, Ruby, sogar Java) mit Unterstützung für das Kompilieren in LLVM, und LLVM kann in Javascript kompiliert werden, sodass wir zumindest eine automatische LLVM-Unterstützung in Browsern erhalten könnten, indem wir einfach in JS kompilieren. Natürlich kann LLVM nicht für alle Programmierparadigmen und spezifischen Sprachen optimiert werden, sodass die Leistung nicht mit 100% nativ übereinstimmt, aber die JITs / Interpreters von Javascript waren trotz der jüngsten Fortschritte im Vergleich zu nativ immer langsam .
facuq

18

Beantwortung der Frage - Nein, das würde keinen Sinn ergeben.

Derzeit sind die JVM und die CLR die Dinge, die einer mehrsprachigen VM am nächsten kommen. Dies sind nicht gerade leichte Tiere, und es wäre nicht sinnvoll, etwas von dieser Größe und Komplexität in einen Browser einzubetten.

Lassen Sie uns die Idee untersuchen, dass Sie eine neue mehrsprachige VM schreiben könnten, die besser wäre als die vorhandene Lösung.

  • Sie sind in Sachen Stabilität im Rückstand.
  • Sie sind in Bezug auf Komplexität im Rückstand (Weg, Weg, Rückstand, weil Sie versuchen, über mehrere Sprachen zu verallgemeinern)
  • Sie sind bei der Adoption im Rückstand

Also, nein, es macht keinen Sinn.

Denken Sie daran, um diese Sprachen zu unterstützen, müssen Sie ihre APIs etwas heftiger reduzieren und alle Teile herausschneiden, die im Kontext eines Browserskripts keinen Sinn ergeben. Hier müssen eine Vielzahl von Entwurfsentscheidungen getroffen werden, und es besteht eine große Fehlermöglichkeit.

In Bezug auf die Funktionalität arbeiten wir wahrscheinlich sowieso nur wirklich mit dem DOM, daher ist dies wirklich eine Frage der Syntax und des Sprachidoms. An diesem Punkt ist es sinnvoll zu fragen: "Lohnt sich das wirklich?"

In Anbetracht dessen ist das einzige, worüber wir sprechen, clientseitiges Scripting, da serverseitiges Scripting bereits in einer beliebigen Sprache verfügbar ist. Es ist eine relativ kleine Programmierarena und daher ist der Vorteil, mehrere Sprachen einzuführen, fraglich.

Welche Sprachen wäre sinnvoll? (Warnung, subjektives Material folgt)

Das Einbringen einer Sprache wie C macht keinen Sinn, da sie für die Arbeit mit Metall entwickelt wurde und in einem Browser nicht wirklich viel Metall verfügbar ist.

Das Einbringen einer Sprache wie Java macht keinen Sinn, da das Beste daran die APIs sind.

Das Einbringen einer Sprache wie Ruby oder Lisp macht keinen Sinn, da JavaScript eine leistungsstarke dynamische Sprache ist, die dem Schema sehr nahe kommt.

Welcher Browserhersteller möchte die DOM-Integration für mehrere Sprachen wirklich unterstützen? Jede Implementierung hat ihre eigenen spezifischen Fehler. Wir sind bereits durch Feuer gegangen und haben uns mit Unterschieden zwischen MS Javascript und Mozilla Javascript befasst, und jetzt wollen wir diesen Schmerz fünf- oder sechsfach vervielfachen?

Es macht keinen Sinn.


Eine ziemlich subjektive Antwort, aber ich wollte nicht abstimmen, da Sie einige gute Punkte ansprechen (und die ursprüngliche Antwort ist sowieso eher ein Diskussionsstarter).
Gerbrand

2
Ich denke nicht, dass die VM im Browser zu schwer ist. Natürlich existiert es bereits als Silverlight und Applets. Letztere haben nicht an Popularität gewonnen, ich denke hauptsächlich wegen des schlechten Timings und der technischen Dummheiten, die größtenteils gelöst werden. Das Zulassen einer Sprache zwischen dem Skript-Tag (mit Einschränkungen) wäre ziemlich cool und sicherlich weder unmöglich noch unpraktisch.
Gerbrand

2
Schwere (MB)? Wahrscheinlich okay. Schwere (Komplexität)? Viel zu schwer. Auf jeder mehrsprachigen VM, über die Sie verfügen, befinden sich Sprachimplementierungen (z. B. JRuby / IronRuby, Clojure, Jython / IronPython) usw. Entweder die JVM nimmt die Komplexität auf oder die Sprachimplementierer.
der glückliche Idiot

Die Neuimplementierung mehrerer Sprachen für mehrere brandneue Plattformen (IE / Firefox / Safari ...) würde einen erstaunlichen Arbeitsaufwand erfordern. Und auch die Sprachen ändern sich. "Diese Seite ist nur in einem Ruby 1.9-Browser sichtbar"? Bitte nicht.
der glückliche Idiot

4
Ich glaube nicht, dass Sie die Frage richtig beantworten. Sie geben nur an, warum andere Sprachen Ihrer Meinung nach nicht für das geeignet sind, was Javascript derzeit im Browser tut. Ein universeller Bytecode, der für das Web geeignet ist, wäre etwas, in das andere Sprachen kompiliert werden. Wenn diese Sprache nützlich ist, liegt es an ihrem Schöpfer, nicht am Web-Bytecode. Viele Sprachen tun dies übrigens bereits, indem sie in Javascript (dh Dart) kompilieren.
Timotheus

14

Unter Windows können Sie andere Sprachen beim Scripting Host registrieren und für den IE verfügbar machen. Zum Beispiel wird VBScript sofort unterstützt (obwohl es nie viel an Popularität gewonnen hat, da es für die meisten Zwecke sogar noch schlechter als JavaScript ist).

Mit den Python-Win32-Erweiterungen konnte man Python ganz einfach zum IE hinzufügen, aber es war keine gute Idee, da Python nur schwer zu sandboxen ist: Viele Sprachfunktionen bieten genügend Implementierungs-Hooks, damit eine vermeintlich eingeschränkte Anwendung ausbrechen kann .

Im Allgemeinen ist es ein Problem, dass die Komplexität von Sicherheitsproblemen umso größer ist, je komplexer Sie einer netzbasierten Anwendung wie dem Browser hinzufügen. Eine Reihe neuer Sprachen würde sicherlich zu dieser Beschreibung passen, und dies sind neue Sprachen, die sich ebenfalls noch schnell entwickeln.

JavaScript ist eine hässliche Sprache, aber durch sorgfältige Verwendung einer ausgewählten Teilmenge von Funktionen und Unterstützung durch geeignete Objektbibliotheken kann es im Allgemeinen ziemlich erträglich gemacht werden. Es scheint, dass inkrementelle, praktische Ergänzungen zu JavaScript die einzige Möglichkeit sind, wie Web-Scripting wahrscheinlich fortgesetzt wird.


12

Ich würde definitiv eine sprachunabhängige Standard-VM in Browsern begrüßen (ich würde es vorziehen, in einer statisch typisierten Sprache zu codieren).

(Technisch) Es ist nach und nach ziemlich machbar: Zuerst unterstützt es ein großer Browser, und der Server hat die Möglichkeit, entweder Bytecode zu senden, wenn die aktuelle Anforderung von einem kompatiblen Browser stammt, oder den Code in JavaScript zu übersetzen und JavaScript im Klartext zu senden.

Es gibt bereits einige experimentelle Sprachen, die mit JavaScript kompiliert werden können, aber eine definierte VM würde (möglicherweise) eine bessere Leistung ermöglichen.

Ich gebe zu, dass der "Standard" -Teil allerdings ziemlich knifflig wäre. Es würde auch Konflikte zwischen Sprachmerkmalen (z. B. statische oder dynamische Typisierung) in Bezug auf die Bibliothek geben (vorausgesetzt, das Neue würde dieselbe Bibliothek verwenden). Deshalb glaube ich nicht, dass es (bald) passieren wird.


10

Wenn Sie das Gefühl haben, sich die Hände schmutzig zu machen, wurden Sie entweder einer Gehirnwäsche unterzogen oder spüren immer noch die Nachwirkungen der "DHTML-Jahre". JavaScript ist sehr leistungsfähig und eignet sich gut für den Zweck, die Interaktivität clientseitig zu skripten. Aus diesem Grund hat JavaScript 2.0 einen so schlechten Ruf bekommen. Ich meine, warum Pakete, Schnittstellen, Klassen und dergleichen, wenn dies eindeutig Aspekte serverseitiger Sprachen sind. JavaScript ist als prototypbasierte Sprache in Ordnung, ohne objektorientiert zu sein.

Wenn Ihre Anwendungen nicht nahtlos sind, weil Server- und Client-Seite nicht gut kommunizieren, sollten Sie sich überlegen, wie Sie Ihre Anwendungen erstellen. Ich habe mit extrem robusten Websites und Webanwendungen gearbeitet und noch nie gesagt: "Hmm, ich wünschte wirklich, JavaScript könnte das (xyz)." Wenn es das könnte, wäre es nicht JavaScript - es wäre ActionScript oder AIR oder Silverlight. Ich brauche das nicht und die meisten Entwickler auch nicht. Das sind nette Technologien, aber sie versuchen, ein Problem mit einer Technologie zu lösen, nicht mit einer ... nun, einer Lösung.


13
Wie können Sie sagen, dass JavaScript nicht vollständig objektorientiert ist? Es ist sicherlich eine der objektorientiertesten Sprachen, die ich kenne. Alles in JavaScript ist ein Objekt - sogar Funktionen. Es ist nur so, dass OOP in JavaScript in vielen anderen Sprachen nicht wie OOP aussieht.
Rene Saarsoo

2
OOP ist JavaScript nicht inhärent. Sie haben keine Pakete, Schnittstellen, abstrakten Klassen oder Methodenüberladungen im Kern integriert und können ein Objekt nicht erweitern - nur den Prototyp eines Objekts, wodurch es technisch prototypbasiert und nicht OOP-basiert ist.

3
In diesem Fall absolut falsch. "Protype" ist ein Entwurfsmuster (Gamma et al., S. 117 - 126). Wie Sie sich erinnern werden, drehen sich Entwurfsmuster um gängige Entwürfe in der objektorientierten Programmierung. Und nur weil die Sprache nicht die gleichen Funktionen wie andere OOP-Sprachen hat, heißt das nicht, dass sie nicht OOP ist.
Dustman

13
Sie liegen nicht absolut falsch, ich denke, der beste Weg, es auszudrücken, ist, dass JS kein klassenbasiertes OO ist, sondern ein prototypisches OO.
Juan Mendes

14
1. Javascript ist vollständig OOP. Bei OOP geht es um Objekte, nicht um Klassen. 2. Sie können ein Objekt in JavaScript erweitern. Das ist der springende Punkt bei der prototypischen objektorientierten Programmierung. 3. Sie beantworten die Frage nicht, die Frage greift JS nicht an, sondern fragt nur nach der Wahl. Ich denke, JS ist eine großartige Sprache, aber ich würde gerne andere Möglichkeiten haben, wenn ich im Browser programmiere.
Manuel Ceron

7

Ich denke nicht, dass eine Standard-Web-VM so unvorstellbar ist. Es gibt eine Reihe von Möglichkeiten, wie Sie einen neuen Web-VM-Standard ordnungsgemäß und mit vollständiger Legacy-Unterstützung einführen können, sofern Sie sicherstellen, dass jedes von Ihnen verwendete VM-Bytecode-Format schnell in Javascript dekompiliert werden kann und die resultierende Ausgabe einigermaßen effizient ist ( Ich würde sogar so weit gehen zu vermuten, dass ein intelligenter Dekompiler wahrscheinlich besseres Javascript erzeugen würde als jedes Javascript, das ein Mensch selbst produzieren könnte.

Mit dieser Eigenschaft kann jedes Web-VM-Format einfach entweder auf dem Server (schnell) oder auf dem Client (langsam, aber in Fällen, in denen Sie nur begrenzte Kontrolle über den Server haben) dekompiliert oder von vorgeneriert und dynamisch geladen werden entweder der Client oder der Server (am schnellsten) für Browser, die den neuen Standard nicht nativ unterstützen.

Diejenigen Browser, die den neuen Standard nativ unterstützen, würden von einer höheren Laufzeitgeschwindigkeit für Web-VM-basierte Apps profitieren. Wenn Browser ihre alten Javascript-Engines auf dem Web-VM-Standard basieren (dh Javascript in den Web-VM-Standard analysieren und dann ausführen), müssen sie nicht zwei Laufzeiten verwalten, aber das liegt beim Browser-Anbieter .


6

Während Javascript die einzige gut unterstützte Skriptsprache ist, über die Sie die Seite direkt steuern können, bietet Flash einige sehr schöne Funktionen für größere Programme. In letzter Zeit verfügt es über eine JIT und kann auch im laufenden Betrieb Bytecode generieren (siehe Auswertung der Laufzeitausdrücke für ein Beispiel, in dem mithilfe von Flash vom Benutzer eingegebene mathematische Ausdrücke bis hin zur nativen Binärdatei kompiliert werden). Die Haxe-Sprache bietet Ihnen statische Eingabe mit Inferenz und mit den Fähigkeiten zur Bytecode-Generierung können Sie fast jedes Laufzeitsystem Ihrer Wahl implementieren.


Was fehlt mir bei der Frage? Es scheint, dass Flash genau das tun würde, was er will. Wir reden nicht über eine andere Muttersprache, er will eine VM, oder? Gute Antwort.
Mwilcox

6

Schnelles Update zu dieser alten Frage.

Jeder, der bestätigte, dass eine "Webseite Bytecode anstelle einer höheren Sprache wie JavaScript enthalten würde", wird "nicht passieren".

Juni 2015 das W3C angekündigt Webassembly das ist

Ein neues tragbares, größen- und ladungszeitsparendes Format, das für die Kompilierung im Web geeignet ist.

Dies ist noch experimentell, aber es gibt bereits einige prototypische Implementierungen in Firefox Nightly und Chrome Canary und es gibt bereits einige Demonstrationsarbeiten .

Derzeit ist WebAssembly jedoch hauptsächlich für die Erstellung aus C / C ++ konzipiert

Mit der Weiterentwicklung von WebAssembly werden mehr Sprachen als C / C ++ unterstützt, und wir hoffen, dass andere Compiler dies ebenfalls unterstützen .

Ich lasse Sie die offizielle Seite des Projekts genauer betrachten , es ist wirklich aufregend!


5

Diese Frage taucht regelmäßig auf. Meine Haltung dazu ist:

A) wird nicht passieren und B) ist schon da.

Verzeihung, was? lassen Sie mich erklären:

ad A.

Eine VM ist nicht nur eine Art universelles magisches Gerät. Die meisten VMs sind für eine bestimmte Sprache und bestimmte Sprachfunktionen optimiert. Nehmen Sie die JRE / Java (oder LLVM): optimiert für statische Typisierung, und es gibt definitiv Probleme und Nachteile bei der Implementierung der dynamischen Typisierung oder anderer Dinge, die Java überhaupt nicht unterstützt hat.

Daher wäre die "allgemeine Mehrzweck-VM", die viele Sprachfunktionen unterstützt (Tail-Call-Optimierung, statische und dynamische Typisierung, Foo-Bar-Boo, ...), kolossal, schwer zu implementieren und wahrscheinlich schwerer zu optimieren, um eine gute Leistung zu erzielen es. aber ich bin kein Sprachdesigner oder VM-Guru, vielleicht irre ich mich: Es ist eigentlich ziemlich einfach, nur hatte noch niemand die Idee? hrm, hrm.

ad B.

schon hier: es gibt vielleicht keinen bytecode compiler / vm, aber du brauchst eigentlich keinen. afaik javascript ist vollständig, daher sollte es möglich sein, entweder:

  1. Erstellen Sie einen Übersetzer von Sprache X nach Javascript (z. B. Coffeescript).
  2. Erstellen Sie einen Interpreter in Javascript, der Sprache X interpretiert (z . B. Brainfuck ). Ja, die Leistung wäre miserabel, aber hey, ich kann nicht alles haben.

ad C.

Was? Es gab überhaupt keinen Punkt C!? weil es noch nicht ... gibt. Google NACL. Wenn jemand es kann, ist es Google. Sobald Google es zum Laufen bringt, sind Ihre Probleme gelöst. nur, ähm, es kann nie funktionieren, ich weiß es nicht. Als ich das letzte Mal darüber las, gab es einige ungelöste Sicherheitsprobleme der wirklich kniffligen Art.


abgesehen davon:

  • Javascript gibt es seit ~ 1995 = 15 Jahren. Dennoch unterscheiden sich die Browser-Implementierungen heute (obwohl sie zumindest nicht mehr unerträglich sind). Wenn Sie also noch etwas Neues starten, haben Sie möglicherweise eine browserübergreifende Version um 2035. Zumindest eine funktionierende Teilmenge. das unterscheidet sich nur geringfügig. und benötigt Kompatibilitätsbibliotheken und Ebenen. Es macht keinen Sinn, nicht zu versuchen, die Dinge zu verbessern.

  • Und was ist mit lesbarem Quellcode? Ich weiß, dass viele Unternehmen es vorziehen würden, ihren Code nicht als "Art" Open Source bereitzustellen. Ich persönlich bin ziemlich froh, dass ich die Quelle lesen kann, wenn ich den Verdacht habe, dass etwas faul ist oder ich daraus lernen möchte. Hurra für den Quellcode!


4

Tatsächlich. Silverlight ist genau das - eine clientseitige .Net-basierte VM.


4

Es gibt einige Fehler in Ihrer Argumentation.

  1. Eine virtuelle Standardmaschine in einem Standardbrowser wird niemals Standard sein. Wir haben 4 Browser und IE hat widersprüchliche Interessen in Bezug auf "Standard". Die drei anderen entwickeln sich schnell, aber die Akzeptanz neuer Technologien ist langsam. Was ist mit Browsern auf Handys, kleinen Geräten, ...

  2. Die Integration von JS in die verschiedenen Browser und die Vergangenheit führen dazu, dass Sie die Leistung von JS unterschätzen. Sie versprechen einen Standard, lehnen JS jedoch ab, da der Standard in den ersten Jahren nicht funktioniert hat.

  3. Wie von anderen gesagt, ist JS nicht dasselbe wie AIR / .NET / ... und dergleichen. JS passt in seiner aktuellen Inkarnation perfekt zu seinen Zielen.

Langfristig könnten Perl und Ruby Javascript ersetzen. Die Einführung dieser Sprachen ist jedoch langsam und es ist bekannt, dass sie JS niemals übernehmen werden.


3

Wie definieren Sie am besten? Am besten für den Browser oder am besten für den Entwickler? (Plus ECMAScript unterscheidet sich von Javascript, aber das ist eine technische Besonderheit.)

Ich finde, dass JavaScript gleichzeitig leistungsstark und elegant sein kann. Leider behandeln die meisten Entwickler, die ich getroffen habe, es wie ein notwendiges Übel anstelle einer echten Programmiersprache.

Einige der Funktionen, die mir gefallen, sind:

  • Behandlung von Funktionen als erstklassige Bürger
  • in der Lage sein, Funktionen zu jedem Objekt jederzeit hinzuzufügen und zu entfernen (nicht sehr nützlich, aber umwerfend, wenn es ist)
  • Es ist eine dynamische Sprache.

Es macht Spaß damit umzugehen und es ist etabliert. Genießen Sie es, während es in der Nähe ist, denn obwohl es möglicherweise nicht das "Beste" für Client-Skripte ist, ist es sicherlich angenehm.

Ich bin damit einverstanden, dass es beim Erstellen dynamischer Seiten aufgrund von Browser-Inkompatibilitäten frustrierend ist, aber dies kann durch UI-Bibliotheken gemildert werden. Das sollte nicht mehr gegen JavaScript selbst gehalten werden als Swing gegen Java.


+1 - Verwechseln Sie Sprachprobleme nicht mit der Browserinterpretation des Codes.
JL.

Warum sollten Sie JS verteidigen, wenn er einfach nach einer Bytecode-Auswahl gefragt hat?
Milind R

3

JavaScript ist die virtuelle Standardmaschine des Browsers. Zum Beispiel haben OCaml und Haskell jetzt beide Compiler, die JavaScript ausgeben können. Die Einschränkung ist nicht die Sprache JavaScript, sondern die Browserobjekte, auf die über JavaScript zugegriffen werden kann, und das Zugriffssteuerungsmodell, mit dem sichergestellt wird, dass Sie JavaScript sicher ausführen können, ohne Ihren Computer zu gefährden. Die aktuellen Zugriffskontrollen sind so schlecht, dass JavaScript aus Sicherheitsgründen nur sehr eingeschränkten Zugriff auf Browserobjekte gewährt. Das Harmony-Projekt versucht, das zu beheben.


3

Es ist eine coole Idee. Warum nicht noch einen Schritt weiter gehen?

  • Schreiben Sie den HTML-Parser und die Layout-Engine (eigentlich alle komplizierten Teile im Browser) in derselben VM-Sprache
  • Veröffentlichen Sie die Engine im Web
  • Stellen Sie der Seite eine Erklärung mit der zu verwendenden Layout-Engine und ihrer URL zur Verfügung

Dann können wir Browsern Funktionen hinzufügen, ohne dass jedem Client neue Browser zur Verfügung gestellt werden müssen - die relevanten neuen Bits würden dynamisch aus dem Web geladen. Wir könnten auch neue HTML-Versionen veröffentlichen, ohne die lächerliche Komplexität der Aufrechterhaltung der Abwärtskompatibilität mit allem, was jemals in einem Browser funktioniert hat - die Kompatibilität liegt in der Verantwortung des Seitenautors. Wir können auch mit anderen Markup-Sprachen als HTML experimentieren. Und natürlich können wir ausgefallene JIT-Compiler in die Engines schreiben, sodass Sie Ihre Webseiten in jeder gewünschten Sprache skripten können.


Ich kann nicht sagen, ob du Spaß machst, aber deine Idee ist wirklich cool.
Milind R

3

Ich würde jede Sprache außer Javascript als mögliche Skriptsprache begrüßen.

Was cool wäre, wäre, andere Sprachen als Javascript zu verwenden. Java würde wahrscheinlich nicht gut zu dem Tag passen, aber Sprachen wie Haskell, Clojure, Scala, Ruby, Groovy wären von Vorteil.

Ich bin vor einiger Zeit auf ein Rubyscript gestoßen ... http://almaer.com/blog/running-ruby-in-the-browser-via-script-typetextruby und http://code.google.com/p/ruby- In-Browser /
Noch experimentell und in Bearbeitung, sieht aber vielversprechend aus.
Für .Net habe ich gerade gefunden: http://www.silverlight.net/learn/dynamic-languages/ Habe gerade die Seite gefunden, sieht aber auch interessant aus. Funktioniert sogar von meinem Apple Mac .

Ich weiß nicht, wie gut die oben genannten Funktionen eine Alternative für Javascript darstellen, aber auf den ersten Blick sieht es ziemlich cool aus. Dies würde es möglicherweise ermöglichen, ein beliebiges Java- oder .NET-Framework nativ vom Browser aus zu verwenden - innerhalb der Sandbox des Browsers.

Wenn die Sprache in der JVM (oder in der .Net-Engine) ausgeführt wird, kümmert sich die VM aus Sicherheitsgründen um die Sicherheit, sodass wir uns darüber keine Sorgen machen müssen - zumindest nicht mehr, als wir für alles tun sollten, was ausgeführt wird im Browser.


2

Wahrscheinlich, aber dazu müssten wir die wichtigsten Browser dazu bringen, sie zu unterstützen. IE-Unterstützung wäre am schwierigsten zu bekommen. JavaScript wird verwendet, weil es das einzige ist, auf das Sie zählen können, wenn es verfügbar ist.


2

Die überwiegende Mehrheit der Entwickler, mit denen ich über ECMAScript et. al. Am Ende geben Sie zu, dass das Problem nicht die Skriptsprache ist, sondern das lächerliche HTML-DOM, das es enthüllt. Das Zusammenführen des DOM und der Skriptsprache ist eine häufige Quelle von Schmerz und Frustration in Bezug auf ECMAScript. Vergessen Sie auch nicht, dass IIS JScript für serverseitiges Scripting verwenden kann. Mit Rhino können Sie freistehende Apps in ECMAScript erstellen. Versuchen Sie, eine Weile in einer dieser Umgebungen mit ECMAScript zu arbeiten, und prüfen Sie, ob sich Ihre Meinung ändert.

Diese Art von Verzweiflung gibt es schon seit einiger Zeit. Ich würde vorschlagen, dass Sie dies bearbeiten, um bestimmte Probleme einzuschließen oder erneut zu veröffentlichen. Sie werden vielleicht angenehm überrascht sein von der Erleichterung, die Sie bekommen.

Eine alte Seite, aber immer noch ein guter Ausgangspunkt: Douglas Crockfords Seite .


Ich wäre gespannt, warum das "HTML DOM" der Schmerzpunkt ist
Alex Moore-Niemi

2

Nun, wir haben bereits VBScript, nicht wahr? Warten Sie, nur IE unterstützt es!
Gleiches gilt für Ihre schöne Vorstellung von VM. Was passiert, wenn ich meine Seite mit Lua skripte und Ihr Browser nicht über den Parser verfügt, um sie in Bytecode zu konvertieren? Natürlich könnten wir uns ein Skript-Tag vorstellen, das eine Bytecode-Datei akzeptiert, was sogar sehr effizient wäre.
Die Erfahrung zeigt jedoch, dass es schwierig ist, etwas Neues ins Web zu bringen: Es würde Jahre dauern, bis eine radikale neue Änderung wie diese eingeführt wird. Wie viele Browser unterstützen SVG oder CSS3?

Außerdem sehe ich nicht, was Sie in JS "schmutzig" finden. Es kann hässlich sein, wenn es von Amateuren codiert wird und schlechte Praktiken verbreitet, die an anderer Stelle kopiert wurden, aber Meister haben gezeigt, dass es auch eine elegante Sprache sein kann. Ein bisschen wie Perl: Sieht oft wie eine verschleierte Sprache aus, kann aber perfekt lesbar gemacht werden.


2

Überprüfen Sie dies unter http://www.visitmix.com/Labs/Gestalt/ - Sie können Python oder Ruby verwenden, solange der Benutzer Silverlight installiert hat.


"Solange der Benutzer Silverlight installiert hat." Nun, ich kann einen Fehler in diesem sehen.
Origamiguy

Um ehrlich zu sein, ist es wahrscheinlich einfacher, dies zu tun, als Ruby in ie6 / 7/8/9 / ff / chrome / safari einzubetten. Heck Chrome enthält bereits Flash, warum nicht SL!
mcintyre321

2

Das ist eine sehr gute Frage.

Dies ist nicht nur in JS das Problem, sondern auch im Mangel an guten kostenlosen IDEs für die Entwicklung größerer Programme in JS. Ich kenne nur eine, die frei ist: Eclipse. Das andere gute ist Microsoft Visual Studio, aber nicht kostenlos.

Warum sollte es kostenlos sein? Wenn Webbrowser-Anbieter Desktop-Apps durch Online-Apps ersetzen möchten (und möchten), müssen sie uns, den Programmierern, gute Entwickler-Tools geben. Mit einem einfachen Texteditor, JSLint und dem integrierten Google Chrome-Debugger können Sie keine 50.000 Zeilen JavaScript erstellen. Es sei denn, Sie sind ein Makohist.

Als Borland 1987 eine IDE für Turbo Pascal 4.0 erstellte, war dies eine Revolution in der Programmierung. Seitdem sind 24 Jahre vergangen. Schändlicherweise verwenden viele Programmierer im Jahr 2011 immer noch keine Code-Vervollständigung, Syntaxprüfung und keine richtigen Debugger. Wahrscheinlich, weil es so wenige gute IDEs gibt.

Es liegt im Interesse von Webbrowser-Anbietern, geeignete (KOSTENLOSE) Tools für Programmierer zu erstellen, wenn wir Anwendungen erstellen sollen, mit denen sie Windows, Linux, MacOS, iOS, Symbian usw. bekämpfen können.


Visual Studio ist kostenlos und Sie haben auch vs Code, Atom und andere großartige IDEs. Ich denke, Sie sehen einfach nicht genau genug aus
GideonMax

1

Realistisch gesehen ist Javascript die einzige Sprache, die Browser für eine lange Zeit verwenden werden. Obwohl es sehr schön wäre, andere Sprachen zu verwenden, kann ich nicht sehen, dass dies geschieht.

Diese "standardisierte VM", von der Sie sprechen, wäre sehr groß und müsste von allen gängigen Browsern übernommen werden, und die meisten Websites würden ohnehin nur weiterhin Javascript verwenden, da sie für Websites besser geeignet ist als viele andere Browser.

Sie müssten jede Programmiersprache in dieser VM sandboxen und den Zugriff jeder Sprache auf das System reduzieren, was viele Änderungen in den Sprachen und das Entfernen oder erneute Implementieren vieler Funktionen erforderlich macht. Während Javascript dies bereits im Auge hat und dies schon lange getan hat.



1

In gewissem Sinne bedeutet eine ausdrucksstärkere Sprache wie Javascript im Browser anstelle einer allgemeineren Sprache wie Java-Bytecode ein offeneres Web.


0

Ich denke, das ist kein so einfaches Problem. Wir können sagen, dass wir bei JS hängen bleiben, aber ist es wirklich so schlimm mit jQuery, Prototype, scriptaculous, MooTools und allen fantastischen Bibliotheken?

Denken Sie daran, JS ist leichtgewichtig , vor allem mit V8, TraceMonkey und SquirrelFish - neuen Javascript-Engines, die in modernen Browsern verwendet werden.

Es ist auch bewiesen - ja, wir wissen, dass es Probleme gibt, aber wir haben viele davon gelöst, wie frühe Sicherheitsprobleme. Imaging, mit dem Ihr Browser Ruby-Code oder etwas anderes ausführen kann. Sicherheits-Sandbox müsste für Scratch gemacht werden. Und weisst du was? Python-Leute haben bereits zweimal daran gescheitert .

Ich denke, Javascript wird im Laufe der Zeit überarbeitet und verbessert , genau wie HTML und CSS. Der Prozess mag lang sein, aber auf dieser Welt ist nicht alles möglich.


Meines Wissens kann (und wird) jede Sicherheitsüberprüfung, die für die JS-Sandbox durchgeführt wird, für den Bytecode durchgeführt werden, da es für einen Computer schwierig ist, Berechtigungen und solche Dinge durch Betrachten einer Reihe von Texten zu überprüfen. Das Senden von Bytecode an den Client anstelle von Standard-JS sollte dies nicht ändern
GideonMax

0

Ich glaube nicht, dass Sie "das pragmatische Problem verstehen, dass JavaScript einfach das ist, mit dem wir jetzt arbeiten müssen". Eigentlich ist es eine sehr mächtige Sprache. Sie hatten Ihr Java-Applet jahrelang im Browser und wo ist es jetzt?

Auf jeden Fall müssen Sie sich nicht "schmutzig machen", um am Client zu arbeiten. Versuchen Sie beispielsweise GWT.


0

... was meinen Sie...

Java und Java Applet Flash und Adobe AIR etc ..

Im Allgemeinen kann jedes RIA-Framework Ihre Anforderungen erfüllen. Für jeden Benutzer muss jedoch ein Preis bezahlt werden (z. B. Laufzeit im Browser oder / und proprietär oder / und weniger Optionen als beim reinen Desktop). http://en.wikipedia.org/wiki/List_of_rich_internet_application_frameworks

Für die Entwicklung des Web mit einer beliebigen Nicht-Web-Sprache haben Sie GWT: Java entwickeln, nach Javascript kompilieren


1
Daher der Vorschlag, eine VM so zu standardisieren, dass sie allgegenwärtig ist. Die Verwendung von JavaScript als "Maschinensprache für das Web" scheint unglaublich klobig und ineffizient zu sein.
Newdayrising

Ich denke, Sie verstehen das falsch. Das Originalposter schlägt nicht vor, dass Browser andere Sprachen unterstützen sollten. Er schlägt vor, dass Sie Java in eine VM kompilieren würden, anstatt Java in js zu kompilieren.
GideonMax

0

Weil alle bereits VMs mit Bytecode-Interpretern haben und der Bytecode auch unterschiedlich ist. {Chakra (IE), Firefox (SpiderMonkey), Safari (SquirrelFish), Oper (Carakan).

Entschuldigung, ich denke, Chrome (V8) wird bis zum IA32-Maschinencode kompiliert.


0

Nun, wenn man bedenkt, dass alle Browser bereits eine VM verwenden, denke ich nicht, dass es so schwierig sein wird, eine VM-Sprache für das Web zu erstellen.
Ich denke, es würde aus mehreren Gründen sehr hilfreich sein:
1. Da der Server den Code kompiliert, ist die Menge der gesendeten Daten geringer und der Client hat keine Zeit zum Kompilieren des Codes.
2. Da der Server den Code in Vorbereitung kompilieren und speichern kann, kann er im Gegensatz zu dem Client, der versucht, so wenig Zeit wie möglich für das schnelle Kompilieren des JS zu verwenden, bessere Codeoptimierungen vornehmen.
3. Das Kompilieren einer Sprache in Bytecode ist viel einfacher als das Transpilieren in JS.

Als letzte Anmerkung (wie bereits in einem anderen Kommentar erwähnt) werden HTML und CSS in eine einfachere Sprache kompiliert. Sie sind sich nicht sicher, ob sie als Bytecode gelten, aber Sie können auch kompiliertes HTML und CSS vom Server an den Client senden Reduzieren Sie die Analyse- und Abrufzeiten


-1

IMO, JavaScript, die Sprache, ist nicht das Problem. JavaScript ist eigentlich eine ausdrucksstarke und mächtige Sprache. Ich denke, es wird schlecht, weil es keine klassischen OO-Funktionen hat, aber für mich gefällt es umso mehr, je mehr ich mich für den prototypischen Groove interessiere.

Das Problem, wie ich es sehe, sind die flockigen und inkonsistenten Implementierungen in den vielen Browsern, die wir im Web unterstützen müssen. JavaScript-Bibliotheken wie jQuery tragen wesentlich dazu bei, dieses schmutzige Gefühl zu mildern.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.