Не откажу себе в удовольствии покомментировать.
code text
{
goto next;
:next:;
}
Программа Реконструктора выдает ошибку. Вернее, аварийно закрывается и Виндовс выдает ошибку.
code text
{
print(a[18])
}
Программа Реконструктора не выдает ошибки, но ничего и не делает.
code text
{
print(a[18]);
print(1)
}
Выдает ошибку:
Error 6 : Unknown Identifyer
Line: print(a[18])
code text
{
i=0;
c=0;
b=1;
while(c<5) {
:next:;
b=b*2;
c=c+1;
i=i+1;
if(c>3)
print(1000,c);
};
print(2000,b,c,i);
c=0;
if(i<20)
goto next;
print(3000,b,c,i);
}
- аварийное завершение (Программа Реконструктора вообще не любит goto - приципиально, goto не для крутых)
И правильно - чего реализовывать goto - без него ведь можно быстрее сделать исполнение, и сказать, что это от сиплюсплюсной крутизны.
И обработку ошибок нехрен тоже реализовывать.
code text
{
print(1somethinghere);
}
Ошибка:
Error 6 : Unknown Identifyer
Line: print(1somethinghere)
code text
{
a=5;
b[a]=10;
a=a+1;
b[a]=9;
b[a][0]=0;
b[a][1]=1;
print(b[5],-b[5+1],b[a][0],b[a][1],b[a][2]);
}
Опять ошибка, Реконструктор не балует нас разнообразием:
Error 6 : Unknown Identifyer
Line: print(b[5],-b[5+1],b[a][0],b[a][1],b[a][2])
Теперь попробуем графику. Не слишком сложную программу для начала.
code text
{
plot(1,1,1,1);
}
Результат - аварийное завершение, как водится.
Попробуем ишшо немного попроще.
code text
print(1)
- программа успешно завершается, уже прогресс. Правда, нихрена не выдает, ну да кого это волнует.
Теперь тест посложнее.
code text
{
i=0;
while(i<2) {
print(i+5000);
if(i==0) {
print(1000);
};
print(i+6000);
i=i+1;
}
}
- тут уж программа Реконструктора опять вельми сурова:
Error 6 : Unknown Identifyer
Line: print(i+5000)
В сумме, получается вот что: из 24 моих тестов примерно на 2/3 программа вылетела по аварийному завершению, остальные - работала неправильно (кроме 2 тестов, на которых, как ни странно, сработала).
По "быстродействию" у меня даже и комментариев нет. Если забить на.. хм... да на все. На goto - ужасный оверхед (если его реализовывать
). На макроподстановки - еще хуже оверхед (опять же, если реализовывать
). То тогда у Реконструктора + суровый C++ получается (на моей машине) время выполнения около 1 секунды, моя версия - 3.5 секунды. Если я забью на goto и на макроподстановки, то тогда, думаю, не хуже Реконструкторовой версии будет исполнение. А может, и получше. Ибо поглядите, как наш герой реализует вычисление арифметических операций:
code text
case RPN_type_operator:
if ((theStack.si - nStartSP) < 2) return eval_unbalanced;
op2 = theStack.pop();
op1 = theStack.pop();
switch(m_BinRPN[nPos++])
{
case operator_mul:
r = op1 * op2;
break;
case operator_idiv:
r = (int) (op1 / op2);
break;
case operator_div:
r = op1 / op2;
break;
case operator_mod:
r = (int)op1 % (int)op2;
break;
Во так вот! Во время "исполнения"!
Спасибо, компилятор наверняка умный и умеет switch разбирать в хэш какой-нибудь.
Кстати, я хотел проверить, как реконструкторов продукт поведет себя если придется выполнять длинное выражение, добавил в code_test строку: f=180-3*5(1+2+3+4+6+6+7+8+9+10); Уже готовился злобно хохотать, но меня обломали - выдали вот чего: Runtime Error 1 : Stack Overflow
В общем, теперь слово комиссии.
PS Я лично уже готов наслаждаться следующим актом Марлезонского балета - как Реконструктор будет становиться в позу что быстродействие-то ого-го, а если есть мелкие недостатки, так это все решаемо.