Comments 39
Если
еще можно понять, то как понять
?
p[i], q[i], s[i] = i, i, i
еще можно понять, то как понять
p[2], p[1] = p[1], p[2] sign = -1
?
Свап элементов и sign = -1.
Интересно, а как потом поддерживать такой код, да еще чужой, в котором десять переменных слева и десять справа? Если пара слева, да пара справа, и выражение не очень длинное, его легко охватить взглядом и понять, что к чему. А ведь всегда находятся те, кто использует синтаксический сахар во зло :)
cscript очень неудачный выбор.
лучше на node.js глянуть.
лучше на node.js глянуть.
cscript это wsh что ли? Мать моя женщина…
$ cat /proc/cpuinfo
>> Intel(R) Xeon(R) CPU L5520 @ 2.27GHz
$ node -v
>> v0.8.10
$ node fannkuch.js
73196
Pfannkuchen( 10 ) = 38
time = 0.682682991027832
Без сравнения толку от этих цифр нет.
Без сравнение чего? код то же.
О чём говорят вышеуказанные цифры?
О том что код на js быстрее чем код на os?
О том что node.js быстрее чем cscript?
О том что серверный процессор быстрее десктопного?
Цифры сами по себе не говорят ни о чём.
О том что код на js быстрее чем код на os?
О том что node.js быстрее чем cscript?
О том что серверный процессор быстрее десктопного?
Цифры сами по себе не говорят ни о чём.
Но ведь автор статьи меряется именно цифрами, нет? А тест на ноде ставит его на место.
Различается платформа и окружение, так что говорить об идентичности результатов нельзя.
Если бы сравнили в одной и той же ОСи, на одном и том же компьютере этот OS и node.js, тогда да, можно было бы о чём-то говорить, а так — это пустые цифры, не привязанные к контексту.
Если бы сравнили в одной и той же ОСи, на одном и том же компьютере этот OS и node.js, тогда да, можно было бы о чём-то говорить, а так — это пустые цифры, не привязанные к контексту.
Это замечание справедливо.
Повторяю опыт у себя с использованием следующего кода:
Итог тестирования (скриншот):
![[скриншот]](https://habrastorage.org/r/w1560/storage2/f40/639/45a/f4063945a9403e5ab38907b83d1a0a00.png)
Операционная система Windows XP SP3, процессор Pentium 4(2,2 ГГц).
Цифры говорят о том, что Node.js примерно на два порядка (десятичных!) быстрее, чем WSH.
Повторяю опыт у себя с использованием следующего кода:
// CScript to Node.js:
if (typeof WScript == "undefined") WScript = {};
if (typeof WScript.Echo == "undefined") WScript.Echo = function(){
var i;
var log = '';
for (i=0; i < arguments.length; i++){
log += arguments[i];
}
console.log(log);
}
var fannkuch = function(n)
{
var p = [], q = [], s = [], sign = 1, maxflips = 0, sum = 0;
var i;
for(i=1; i<=n; i++) p[i] = q[i] = s[i] = i;
for(;;){
// Copy and flip.
var q1 = p[1]; // Cache 1st element.
if(q1 != 1){
for(i=2; i<=n; i++) q[i] = p[i]; // Work on a copy.
var flips = 1;
for(;;){
var qq = q[q1];
if(qq == 1){ // ... until 1st element is 1.
sum = sum + sign*flips;
if(flips > maxflips){
maxflips = flips;
} // New maximum?
break;
}
q[q1] = q1;
if(q1 >= 4){
var i = 2, j = q1 - 1
for(;;){ var tmp = q[i]; q[i] = q[j]; q[j] = tmp; if(++i >= --j) break; }
}
q1 = qq; flips++;
}
}
// Permute.
if(sign == 1){
var tmp = p[2]; p[2] = p[1]; p[1] = tmp; sign = -1; // Rotate 1<-2.
}else{
var tmp = p[2]; p[2] = p[3]; p[3] = tmp; sign = 1; // Rotate 1<-2 and 1<-2<-3.
for(i = 3;; i++){
// print "mark 4"
var sx = s[i];
if(sx != 1){ s[i] = sx-1; break; }
if(i == n) return [sum, maxflips]; // Out of permutations.
s[i] = i;
// Rotate 1<-...<-i+1.
var t = p[1]; for(var j = 1; j <= i; j++){ p[j] = p[j+1]; } p[i+1] = t;
}
}
}
}
function getTimeSec(){
var d = new Date();
return (d.getTime() + d.getMilliseconds() / 1000.0) / 1000.0;
}
var n = 10;
var start_time = getTimeSec();
var r = fannkuch(n);
var sum = r[0], flips = r[1];
WScript.Echo(
sum,"\n",
"Pfannkuchen(",n,") = ",flips,"\n",
"time = ",(getTimeSec() - start_time),"\n"
)
Итог тестирования (скриншот):
![[скриншот]](https://habrastorage.org/r/w1560/storage2/f40/639/45a/f4063945a9403e5ab38907b83d1a0a00.png)
Операционная система Windows XP SP3, процессор Pentium 4
Цифры говорят о том, что Node.js примерно на два порядка (десятичных!) быстрее, чем WSH.
Как-то это все мутновато. Как тут может быть один язык быстрее другого? Сравниваться по скорости могут реализации языков, а тут взяли первые попавшиеся реализации языков и сразу победили. Почище надо эксперименты проводить…
На моей системе php выполнялся около 31 секунды, а OS вообще не выполнился.
Заголовок ну очень громкий, хотя говорить о том, что один язык быстрее другого — я считаю, вообще моветон. На деле — один тест, и почему-то, как верно показали, Cscript как движок для JS, хотя естественно, все бы сравнивали с V8.
Правильно, а на ассемблере можно написать код, для решения той же задачи, который будет работать как в несколько раз быстрее, так и в несколько раз медленнее.
Что такого в семантике этого языка, что код на нем работает быстрее? Если в семантике особенностей нет, то остается только особенность реализации. Потом окажется, после нескольких лет жизни, что после фикса всех багов и дыр в безопасности, он и ничуть не быстрее остальных.
Что такого в семантике этого языка, что код на нем работает быстрее? Если в семантике особенностей нет, то остается только особенность реализации. Потом окажется, после нескольких лет жизни, что после фикса всех багов и дыр в безопасности, он и ничуть не быстрее остальных.
Уважаемые авторы, для встраиваемого языка программирования «скорость на 60% в синтетических тестах быстрее чем JavaScript» — если не последний, то один из последних выборов критерия.
Засунул я Ваш код в консоль фаербага (заменив
WScript.Echo
на console.log
):73196
Pfannkuchen( 10 ) = 38
time = 1.5295288562774658
Судя по рейтингу поста, упоминание о «меньшей скорости PHP» было воспринято, как «оскорбление чувств верующих». Советую просто не упоминать в заголовках топиков и все будет ок.
А вообще автору огромный респект! Будем надеятся, что OS займет свою нишу.
А вообще автору огромный респект! Будем надеятся, что OS займет свою нишу.
Я думаю основная часть минусов за не самое адекватное сравнение. Я не уверен, но подозреваю, что PHP правильнее измерять на *nix. А в качестве движка для JS однозначно нужно было взять V8 (ну и Rhino заодно). Ценность этого топика близка к нулю — синтаксис языка не совсем ясен, а производительность в попугаях.
Почитайте первый пост про синтаксис. Ценность этого топика в том, что OS как минимум не медленнее вышеприведенных языков, или хотя бы на уровне с ними.
И кстати, про «на уровне». Судя по этим синтетическим тестам — PHP не ровня JS в плане производительности. Правда, я так и не понял, какая там версия PHP.
С рейтингом было все предсказуемо, цель поста была в другом, она достигнута. С node сравнивать бессмысленно, т.к. это JIT.
«Я придумал велосипед! О чудо, он едет!»
Node.js намного быстрее php. Это выяснялось уже во множестве тестов. То что вы используете Cscript это очень странно. Но глядя на разрыв между php и node.js, не думаю что ObjectScript такой быстрый.
php ./test.php 10
n: 10
73196
Pfannkuchen(10) = 38
time = 68.549677848816
node test.js
73196
Pfannkuchen(10) = 38
time = 0.6416420936584473
faiwer@faiwer-desktop:~/temp/test$ time php test.php 10
n: 10
73196
Pfannkuchen(10) = 38
time = 107.46600389481
real 1m47.501s
user 1m47.283s
sys 0m0.060s
faiwer@faiwer-desktop:~/temp/test$ time node test.js 10
73196
Pfannkuchen(10) = 38
time = 0.7647650241851807
real 0m0.856s
user 0m0.844s
sys 0m0.012s
Как то уж слишком быстро, может быть они не идентичны?
Разумеется, node не имеет VM и не исполняет байткод, это JIT на движке V8 — одной из лучших разработок от google. Да и вообще компания google — одна из самых уважаемых компаний в моем личном рейтинге. Но на практике JS мало используют как встраиваемый язык, особенно на мобильных платформах. В основном все через PhoneGap и т.п., а там с производительностью JS все очень плохо. А вот OS на мобильнике показал себе очень хорошо.
PHP один из прародителей языка OS, к тому же они имеют VM и исполняют байткод, могут быть нацелены на одни и те же задачи. Наивно было бы полагать, что за 2 месяца работы над OS (в промежутке между основной работой, семьей, пивом и т.п.) я один переплюну Lua с его 19 летней историей разработки и огромным комьюнити и 18 летней историй PHP. Тем не менее тест проведен.
Когда сие чудо заработает на linux? Очень хочется «потрогать».
На линуксе народ пробует. Некто aperezdc (из иностранного лагеря) закомитил обновление Unix-related fixes and basic interactive interpreter, т.е. в репозитории сейчас есть makefile и main.cpp с командным интерпретатором.
Автору вопрос: как вы думаете, за счёт чего происходит ускорение по сравнению с PHP и JS?
Тот уровень оптимизации, на котором сейчас находится OS — это наносекунды, а это значит, что существенное влияние на производительность оказывает все: лишнее присваивание, лишний вызов функции и т.п. Сейчас уже даже код, которые делает компилятор для инлайновой (inline) функции не достаточен, именно по этой причине Lua сплошь и рядом напичкам дефайнами, а PHP реализует основной код VM в хидере (.h), а не в cpp. Основной код VM в OS исполняется в функции execute. Для достижения максимальной производительности нужно вывернуть все функции, вызываемые из execute, внутрь самой execute, вручную. Обычно при этом удается сделать дополнительные оптимизации. Как следствие этого — большое дублирование кода, либо заворачивание особо частого функционала в дефайны, как поступили в Lua.
Sign up to leave a comment.
ObjectScript — новый язык программирования, быстрее чем PHP и JS