[ANN] Jeene -
От: Mamut Швеция http://dmitriid.com
Дата: 03.01.09 13:17
Оценка: 67 (3)
Что такое Jeene? Это — эффективный частичный вычислитель (partial evaluator) для Яваскрипта, работающий в любой имплементации, поддерживающий спецификацию ECMA-262 (ECMAScript Language Specification 3rd edition, то есть во всех основных браузерах, Rhino, Tracemonkey, V8 и т.п.


Введение в Jeene можно поитать здесь: http://blog.higher-order.net/2008/09/14/jeene/
Сам (саму?) Jeene можно скачать здесь: http://code.google.com/p/jeene/

Что такое partial evaluator? Это программа, получающая на вход другую программу и некое окружение, которое связывает определенные переменные. Evaluator генерирут другую программу, которая более эффективна, чем превая, для данного окружения.

Например, у нас есть такой код:
var mk_tag = function(tag_name,clazz,contents) {
   return '<'+tag_name+' class="'+clazz+'">'+contents+'</'+tag_name+'>';
};


Если на данном этапе нас интересует только как создать элементы div с классом green, то понятно, что лучше переписать этуфункцию следующим образом:
var mk_div_green = function(contents) {
   return '<div class="green">'+contents+'</div>';
};


Так мы избавимся от лишних конкатенаций строк.

Partial evaluator сособен автоматически создать функцию mk_div_green на основе mk_tag:

// Это рабочий код  
Function.prototype.specialize = net.higherorder.jeene.Jeene.make();

var mk_tag = function(tag,clz,cont) {
   return "<"+tag+" class='"+clz+"'>"+cont+"</"+tag+">";
};

var mk_div_green = mk_tag.specialize({tag:'div', clz: 'green'});

mk_div_green("Pratt rocks!");
//результат: <div class='green'>Pratt rocks!</div>

mk_div_green.toSource ? mk_div_green.toSource() : mk_div_green.toString();
//результат:
//(function (cont) {return ("<div class='green'>" + cont) + "</div>";})



Автор Jeene провел некоторые тесты, результты которых доступны тут: http://blog.higher-order.net/2008/09/21/jeene-update-performance-features-and-backlog/ Тест веьма синтетический, ткак как он проверяет ту же конкатенацию строк, но результаты интересны. Прирост производительности от 40 до 60 процентов.

На данный момент Jeene способна обрабатывать так называемый «упрощенный Javascript»:
— переменные, которые являются формальными параметрами функции
— литералы и константы (”abc”, 42, true, null)
— простое присвоение, ‘=’
— логические операторы ‘&&’, ‘||’, ‘!’
— бинарные операторы ’+’ и ‘-’; по умолчанию считает, что ‘+’ — ассоциативная операция
— return

А в svn уде лежит код, способный делать вот такое:
Function.prototype.specialize = net.higherorder.jeene.Jeene.make();
source_fun = function(a,b,c) {
    c = a;
    return b+c;
};
var env = {a:3, b:2};
res = source_fun.specialize(env);

// результат: 

(function (c) {var a, b;return 5;})


dmitriid.comGitHubLinkedIn
jeene javascript partial evaluator web
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.