frank_eee: Interpretieren oder Compilieren?

Hallo Forum,

ich beschaeftige mich seit gestern mit der Frage (siehe Ueberschrift) und bin noch zu keinem schluessigen Ergebnis gekommen. Wird JavaScript bzw. JScript nun interpretiert oder compiliert?

Das Problem ist naemlich, dass ich zum einen gelesen habe, dass compiliert wird und zum anderen auch gelesen habe, das interpretiert wird. Auch sind die Technologien in sich etwas wiederspruechlich. Ein Beispiel:
In JScript gibt es die Moeglichkeit Compiler-Direktiven zu setzten, mit denen man den COMPILER beeinflussen kann. Z.B.:

/*@cc_on @*/

/*@if (@_win16) @*/
alert('Sie benutzen kein Windows 95, NT oder höher!');
/*@end @*/

/*@if (@_win32)
  alert('Sie benutzen Windows 95, NT oder höher!');
  @end
@*/

Wenn allerdings compiliert werden wuerde, dann waeren Dinge wie

x = 'myv';
y = 'ar';
z = ' = 1234;';
eval(x+y+z);
eval('alert('+x+y+');');

nur sehr schwer (oder garnicht) moeglich. Usw.

Alles sehr verwirrend.

Was meint Ihr?

Gruss,
frank_eee.

  1. Tach,
    JavaScript wird interpretiert.
    Compilieren bedeutet das der Quellcode in
    die Maschinensprache übersetzt wird.
    Interpretieren bedeutet das der Code einglesen
    wird und ausgeführt.

    Wie kommst du darauf das JS compiliert wird ???

    M.f.G. Micha

    1. re:Hi,

      "Wie kommst du darauf das JS compiliert wird ???"

      Das ist ja das wiederspruechliche. Ich hab eben beides gelesen (bei Netscape und Microsoft). Und JS muss zwangsweise irgendwie compiliert werden, weil es da gibt:

      Microsoft:

      [Zitat: http://msdn.microsoft.com/scripting/jscript/doc/jsconditionalcompilation.htm]

      "Conditional Compilation
      Conditional compilation allows the use of new JScript language features without sacrificing compatibility with older versions that do not support the features."

      aber gleichzeitig:

      [Zitat: http://msdn.microsoft.com/scripting/jscript/doc/about.htm]

      "JScript is an interpreted, object-based scripting language. Although it has fewer capabilities than full-fledged object-oriented languages like C++, JScript is more than sufficiently powerful for its intended purposes."

      und Netscape:

      [Zitat: Netscape CSJS Guide 1.5]
      "Client-side JavaScript is embedded directly in HTML pages and is interpreted by the browser completely at runtime. Because production applications frequently have greater performance demands upon them, JavaScript applications that take advantage of its server-side capabilities are compiled before they are deployed. The next two sections introduce you to how JavaScript works on the client and on the server."

      aber:

      [Zitat: Netscape CSJS Reference 1.5]

      "Function

      Specifies a string of JavaScript code to be compiled as a function."

      Je mehr Dokus ich von Netscape oder Microsoft ich mir ansehe um so mehr Argumente finde ich dafuer und dagegen ...

      gruss,
      frank_eee.

  2. Hallo frank_eee,

    ich beschaeftige mich seit gestern mit der Frage (siehe Ueberschrift) und bin noch zu keinem schluessigen Ergebnis gekommen. Wird JavaScript bzw. JScript nun interpretiert oder compiliert?

    Ich hatte deine Frage Gestern Abend schon gelesen, aber wusste im Moment. Keine Antwort drauf. Ist mir gerade beim Fruehstueck eingefallen, du meinst Java, nicht JavaScript.
    Java wird sowohl Compiliert als auch Interpretiert. Da ich selber nicht viel über das Programmieren mit Java weiss, zitiere ich mal die Stelle aus Sun's Tutorial.

    About the Java Technology
      With most programming languages, you either compile or interpret
      a program so that you can run it on your computer. The Java
      programming language is unusual in that a program is both
      compiled and interpreted. With the compiler, first you translate
      a program into an intermediate language called Java bytecodes
      -the platform-independent codes interpreted by the interpreter on
      the Java platform. The interpreter parses and runs each Java
      bytecode instruction on the computer. Compilation happens just
      once; interpretation occurs each time the program is executed.
    http://java.sun.com/docs/books/tutorial/getStarted/intro/definition.html

    HTH und schoenen Sonntag noch
      jens mueller

    1. re:Hi,

      "Ist mir gerade beim Fruehstueck eingefallen, du meinst Java, nicht JavaScript."
      Nein, ich weiss was ich meine und ich meine JavaSCRIPT!

      Gruss,
      frank_eee.

      1. Moin

        Nein, ich weiss was ich meine und ich meine JavaSCRIPT!

        Gut, dann ist die Sache nämlich einfach: JavaScript wird interpretiert.
        Was Microsoft da mit JScript anstellt weiss ich zwar nicht, aber das wird mit ziemlicher Sicherheit auch interpretiert werden.

        --
        Henryk Plötz
        Grüße von der Ostsee

        1. re:Hi

          Was Microsoft da mit JScript anstellt weiss ich zwar nicht, aber das wird mit ziemlicher Sicherheit auch interpretiert werden.

          Das ist es aber, ich moechte ja rausfinden, was MS da anstellt - oder zumindest erahnen.

          gruss,
          frank_eee.

  3. Moin!

    JavaScript wird interpretiert, da beisst die Maus keinen Faden ab. Nur ist es so, dass vor der Ausfuehrung der Source-Code *geparst* wird, d.h. der Klartext wird gelesen und analysiert und in interpreter-interne Datenstrukturen uebersetzt, welche dann fuer den Interpreter viel einfacher (und daher schneller) lesbar sind. Das wird dann halt auch mal etwas nachlaessig als compilieren bezeichnet, obwohl es das streng genommen nicht ist.

    Verwendet man eval(), dann werden waehrend der Laufzeit des Programms weitere Code-Teile geparst, was recht zeitaufwendig ist. Deshalb soll man eval() vor allem in Schleifen meiden: Da bei jedem Schleifendurchlauf erneut geparst wird, koennen hier erhebliche Geschwindigkeitseinbussen auftreten. (Eine Schleife innerhalb eines eval() ist dagegen nicht so problematisch.)

    Und dann gilt noch, dass es natuerlich moeglich waere, JS zu compilieren, also ein richtiges ausfuehrbares Programm draus zu machen. Ob das sinnvoll waere, steht auf einem anderen Blatt.

    In JScript gibt es die Moeglichkeit Compiler-Direktiven zu setzten, mit denen man den COMPILER beeinflussen kann. Z.B.:

    Nur weil es Compiler-Direktive heisst, muss es ja keine sein. Dann Beispiel zeigt das auch deutlich:

    /*@cc_on @*/
    /*@if (@_win16) @*/
    alert('Sie benutzen kein Windows 95, NT oder höher!');
    /*@end @*/
    /*@if (@_win32)
      alert('Sie benutzen Windows 95, NT oder höher!');
      @end
    @*/

    Waeren das wirklich Compiler-Direktiven, die also ausgewertet werden, wenn Du das Programm auf Deiner Entwicklungsmaschine in ein ausfuehrbares Programm uebersetzt, dann koenntest Du keine Aussage darueber machen, auf welcher Maschine das letztlich laeuft, sondern nur ueber die, auf der das uebersetzt wird. Code wie oben ist nur dadurch moeglich, dass das ganze Zeug eben erst bei der Ausfuehrung auf der Zielmaschine interpretiert wird.

    Wenn allerdings compiliert werden wuerde, dann waeren Dinge wie
    x = 'myv';
    y = 'ar';
    z = ' = 1234;';
    eval(x+y+z);
    eval('alert('+x+y+');');
    nur sehr schwer (oder garnicht) moeglich. Usw.

    Stimmt, wollte man einen richtigen JS-Compiler bauen, muesste man diesen Compiler selbst mit in das zu erzeugende ausfuehrbare Programm einbauen, damit Dinge wie eval() moeglich werden.

    So long

    1. re:Hi,

      Waeren das wirklich Compiler-Direktiven, die also ausgewertet werden, wenn Du das Programm auf Deiner Entwicklungsmaschine in ein ausfuehrbares Programm uebersetzt, dann koenntest Du keine Aussage darueber machen, auf welcher Maschine das letztlich laeuft, sondern nur ueber die, auf der das uebersetzt wird. Code wie oben ist nur dadurch moeglich, dass das ganze Zeug eben erst bei der Ausfuehrung auf der Zielmaschine interpretiert wird.

      Aber es koennte doch genauso gut auch auf der Client-Seite compiliert werden. Dagegen spricht ja das herausfinden des System nicht. Der Compiler kann dies ja abfragen.

      gruss,
      frank_eee.

      1. MoiN!

        Aber es koennte doch genauso gut auch auf der Client-Seite compiliert werden. Dagegen spricht ja das herausfinden des System nicht. Der Compiler kann dies ja abfragen.

        Ach so, das stimmt natuerlich.

        So long