var plus = function(left) {
return function(right) {
return left + right;
};
};
var sum = plus(121)(232);
var ternary = function(left) {
return left ?
function(middle) {
return function() {
return middle;
}
} :
function() {
return function(right) {
return right;
}
};
};
var oddity = ternary(sum % 2)('odd')('even');
// теперь как бы сделать чтобы по true запускалась одна ветка а по false другая
суббота, 7 февраля 2009 г.
how do i haskell in javascript
Если бы хэскелл был джаваскриптом а джаваскрипт бы был хэскеллом, то там были бы такие операторы!
пятница, 6 февраля 2009 г.
how do i force windows script to run in console
Если нам надо выводить большие простыни текста, скрипт надо гонять в консоли. Но по умолчанию *.js запускается в wscript, а не в cscript.
Тут можно сделать так:
Факты, которых я не знал:
- out.Write('\x1b[2J') очищает экран терминала, но только если гонять cscript в rxvt или каком-нибудь другом ANSI-enabled терминале;
- консоль Windows 2000/XP не понимает ANSI escape sequences;
Тут можно сделать так:
if(WScript.FullName.match(new RegExp('wscript', 'i'))) {
// мы запускаемся не в консоли
var sh = new ActiveXObject('WScript.Shell');
// скопируем коммандную строку, добавим установку ждать
// нажатия клавиши после работы, чтобы окно не сразу
// закрывалось
var cmdLine = 'cscript /nologo ' + WScript.ScriptFullName + ' /pause';
sh.Run(cmdLine);
return;
}
Факты, которых я не знал:
- out.Write('\x1b[2J') очищает экран терминала, но только если гонять cscript в rxvt или каком-нибудь другом ANSI-enabled терминале;
- консоль Windows 2000/XP не понимает ANSI escape sequences;
среда, 4 февраля 2009 г.
full optimisation
вот полная оптимизация в msvs 2003
это cl /Ox
Она очень умная но не складывать string[pos + len] второй раз не додумалась.
Также, что такое lea ecx, [ecx] o_O
это cl /Ox
{
pos += 1;00680717 add eax,1
0068071A mov dword ptr [esi],eaxlen = 1;0068071C mov dword ptr [edi],1// сосчитаем символы до закрывающей кавычки или конца строки
//while (!strchr("\"",string[pos+len] )&&(string[pos+len]!= '\0'))
// while(!memchr("\"\0", string[pos + len], 2) // интересно, как быстрее?
while(string[pos + len] && (string[pos + len] != '"'))00680722 mov eax,dword ptr [ebx]
00680724 mov ecx,dword ptr [esi]
00680726 cmp byte ptr [ecx+eax+1],0
0068072B je $L92588+36h (68074Dh)
0068072D lea ecx,[ecx]
00680730 mov ecx,dword ptr [edi]
00680732 mov edx,dword ptr [esi]
00680734 add edx,ecx
00680736 cmp byte ptr [edx+eax],22h < --------o
0068073A je $L92588+36h (68074Dh) \len++; \0068073C add ecx,1 \
0068073F mov dword ptr [edi],ecx один и тот же адрес
00680741 mov ecx,dword ptr [esi] /
00680743 add ecx,dword ptr [edi] /
00680745 mov eax,dword ptr [ebx] ; eax не менялся /
00680747 cmp byte ptr [ecx+eax],0 < -------- o
0068074B jne $L92588+19h (680730h)
0068074D pop edi
0068074E pop esireturn TOKEN_WORD;0068074F xor eax,eax
00680751 pop ebx}
};//End case
}00680752 ret 8
Она очень умная но не складывать string[pos + len] второй раз не додумалась.
Также, что такое lea ecx, [ecx] o_O
EDIT Я понял! Это выравнивание.
Подписаться на:
Сообщения (Atom)