воскресенье, 29 января 2012 г.

Что такое яваскрипт? Итория яваскрипта

Был изобретен в Natscape под названием Mocha(кофе мокко). В это время ява оказывала огромное влияние на мир програмной разработки, не обошло это влияние и Mocha. Впервые реализация появилась в браузере Netscape Navigator 2.0 под названием LiveScript в 1995, а через два месяца, совместно с Sun,  Нетскейп обьявило, что теперь технология будет называться JavaScript, под этим названием технология появляется в барузере Netscape Navigator 2.0B3.


Время переименования языка совпадает с временем встраивания плагина для выполнения Java Applets в Netscape Navigator, вся эта игра имен была явно маркетинговым ходом двух компаний.

Через год после этого события(1996) Нетскейп подали спецификацию в Европейскую Ассоциацию производителей ЕВМ(ECMA International), как претенедента на индустриальный стандарт. Так была рождения спецификация ECMAScript.

В это время Microsoft, чтобы избежать судовой тягомотины, отказываются от своего VBScript, и создают в сответсвии со стандартом JScript.

Сначала язык был закидан шапками, а с рожденим AJAX технологии, был признан в мире разработки.

Движки JavaScript
Rhino
Еще интересный факт в том, что Netscape планировали реализовать версию браузера написанную на Java, есть предположение, что этот факт тоже внес не малую лепту в переименование LiveScript.
По причине "браузера на яве" нужно было еще и реализовать движок для выполнения JavaScript в JVM, для этого нужно было научиться компилировать скрипты в байткод, а если проще написать реализацию движка на Java, так родился в 1997 проект Rhino.
Сразу решили скрипты именно компилировать в байт-код, это дало прекрасный факт, что скрипты байткодом были намного быстрее си-шной реализации яваскрипта, но одновременно с этим был тот факт, что время еще существовало время на компиляцию этих скриптов, а с этим фактом в сумме компиляция+выполнения JavaScript в JVM, значительно уступала по времени си-шной реализации. Кроме того, все реализации JVM не чистят память от загруженных *.class-файлов, только от созданных инстанций классами из этих файлов. Что в случае работы браузера, который работает с многими страницами, на которых есть сприпты, которые компилируются, загружаются *.class-файлами и потом выполняются, и при этом процесс может продолжаться часами в виде навигации по паутине(с тем фактом, что все подгруженные класс-файлы с памяти не чистяться), означает колосальные утечки памяти.

По этой причине JavaScript, решили интерпритировать, это дало прирост производительности и убрало факт утечек, но всетаки не дало возможность обойти сишную реализацю(SpiderMonkey).

1998  Netscape становится Mozilla, меняет свою политику и поэтому сорскод Rhino открывают. Сейчас эту библиотеку используют для среды выполнения явасприпта в яваприложениях. Яваскрипт комплилируется в классы ява, при этом нет реализации ДОМ, которая есть в браузере, Rhino стал чисто десктопной средой явасприпта.
Пример применения яваскриптового кода в ява коде:
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
 
public class RhinoEngine {
    public static void main(String[] args) {
        ScriptEngineManager mgr = new ScriptEngineManager();
        // Now we can go and get a script engine we want. 
        // This can be done either by finding a factory that supports 
        // our required scripting language 
        // (engine = factory.getScriptEngine();)
        // or by requesting a script engine that supports a 
        // given language by name from the script engine manager.
        ScriptEngine engine = mgr.getEngineByName("JavaScript");
 
        // Now we have a script engine instance that 
        // can execute some JavaScript
        try {
            engine.put("name", args[0]);
            engine.eval("print('Hello ' + name + '!')");
        } catch (ScriptException ex) {
            ex.printStackTrace();
        }    
    }
}

А вот пример приложения на яваскрипте, которое может выполниться в Rhino Shell:
// Equivalent in effect to the Java declaration import java.io.*;
importPackage(java.io);
importPackage(java.lang);
 
// "in" is a keyword in JavaScript. 
// In JavaScript you could query for an attribute using [] syntax: 
var reader = new BufferedReader( new InputStreamReader(System['in']) );
 
// We use JavaScript's dynamic typing here to let s be a boolean first, and later on a string...
var s = true;
 
while (s) {
    s = reader.readLine();
 
    if (s) {
        System.out.println(s.toUpperCase());
    }
}

А вот так можно запустить Rhino Shell и интерпритировать в ней прямым вводом яваскрипт-код. Второй способ лучше тем, что не нужно определять classpath, чтобы запустить оболочку:
$ java org.mozilla.javascript.tools.shell.Main
$ java -jar js.jar

SpiderMonkey
Это, как и было сказано, более старый движок яваскрипта, а если быть точным - первый, но именно он продолжил свое существование, как движок для среды яваскрипта в браузере Mozilla Foundatioin (FireFox). Он написан на Си. Для него характерны внесения следующих оптимизаций: TraceMonkey (Firefox 3.5), JägerMonkey (Firefox 4) и IonMonkey. Последняя оптимизация это реализация JIT компиляции для яваскприта.
Этот движок находится на стадии соответсвия стандарту ECMA-262 Edition 5.
При этом движок Rhino остается соответсвовать ECMA-262 Edition 3, и используется только в приложениях Java, где исть необходимость выполнить JavaScript код.

Движки в других браузерах:
  • Google's V8 - используется Google Chrome, реализация JIT компиляции.
  • JavaScriptCore(SquirrelFish/Nitro) испольсуется в некоторых WebKit-основанных браузерах, например Apple Safari( Google Chrome имеет в ядре тоже WebKit, но движок JS у него свой).
  • Carakan - движок в Opera.
  • Chakra движок, который используется в Internet Explorer, но технически это JScript движок, а не JavaScript.

 

Комментариев нет:

Отправить комментарий