Баг в компиляторе!!!

 
Вот какого я эксперта написал!
//+------------------------------------------------------------------+
//|                                                  CompilerBug.mq4 |
//|                                 Copyright © 2005, Irtron Himself |
//+------------------------------------------------------------------+
bool CompilerBug()
{
    Print("Compiler bug!");
    return (true);
}

bool YetAnotherCompilerBug()
{
    Print("Another compiler bug!");
    return (false);
}

int start()
{
    if (false && CompilerBug())
        return (0);

    if (true || YetAnotherCompilerBug())
        Print("Äîæèëè...");

    return(0);
}



Вот его лог

2005.09.06 20:33:29	CompilerBug USDJPY,M1: removed
2005.09.06 20:33:27	CompilerBug USDJPY,M1: Äîæèëè...
2005.09.06 20:33:27	CompilerBug USDJPY,M1: Another compiler bug!
2005.09.06 20:33:27	CompilerBug USDJPY,M1: Compiler bug!
2005.09.06 20:33:23	CompilerBug USDJPY,M1: Äîæèëè...
2005.09.06 20:33:23	CompilerBug USDJPY,M1: Another compiler bug!
2005.09.06 20:33:23	CompilerBug USDJPY,M1: Compiler bug!
2005.09.06 20:33:20	CompilerBug USDJPY,M1: Äîæèëè...
2005.09.06 20:33:20	CompilerBug USDJPY,M1: Another compiler bug!
2005.09.06 20:33:20	CompilerBug USDJPY,M1: Compiler bug!
2005.09.06 20:33:10	CompilerBug USDJPY,M1: Äîæèëè...
2005.09.06 20:33:10	CompilerBug USDJPY,M1: Another compiler bug!
2005.09.06 20:33:10	CompilerBug USDJPY,M1: Compiler bug!
2005.09.06 20:33:02	CompilerBug USDJPY,M1: loaded successfully
2005.09.06 20:32:51	Compiling 'CompilerBug'



А вот документация

The logical operation OR (||) of values k and 1. The value k is checked first, the value 1 is checked only if k value is false. The value of this expression is true if the value of k or 1 is true.
Example:

if(x<k || x>l)
Print("out of range");

The logical operation AND (&&) of values x and y. The value x is checked first; the value y is checked only if k value is true. The value of this expression is true if the values of both x and y are true.
Example:

if(p!=x && p>y)
Print("true");
n++;



Комментарии, как говорится, излишни. Да и правила не позволяют. Хотя баг этот стоил мне пары часов недоумения.

Кстати в документации фигурируют некие "значения" k, x, y (буквы) и, почему-то, 1 (цифра), которые к выражениям в примере имеют весьма неконкретное отношение.

 
в русском описании "Операции и выражения" написано

Логические выражения вычисляются полностью, то есть к ним не применяется схема так называемой короткой оценки.

спасибо, что заметили неточность в английском варианте описания
 

спасибо, что заметили неточность в английском варианте описания

И это Вы называете "неточность"?!

Сначала скармливаете пользователям язык, который от C отличается как ишак от осла.
Потом меняете базовые принципы языка, вводя в него ничего так "неточности". Остается только ждать, когда посыплятся жалобы, чтобы давать на них ответы типа "вот же в документации написано, что ж вы не смотрели?".
Если уж разрабатываете компилятор на основе C, то будьте, пожалуйста, последовательными.
Править нужно русскую версию словаря. А уж профиксить такой тривиальный баг в компиляторе вообще труда не составит. Всего-то дополнительное условие с выходом из алгоритма после вычисления каждого выражения.
 
Renat 20.12.04 21:13

Rosh, Вы можете воспользоваться любым учебником языка С.
Если беретесь за программирование - будьте терпеливы и ищите.


Rosh, Вы можете больше не пользоваться учебником С. Просто будьте еще терпеливее и продолжайте искать.
 
Irtron
Во-первых, переходить на личности - это дурной тон, а ты делаешь это уже второй раз за сегодня в мой адрес.
Во-вторых, это твои проблемы - излишнее знание С (или незнание азов строительства языков программирования).

У меня нет догм в отношении любого языка - я подстраиваюсь под нужные правила или не пользуюсь ими вообще.

PS Есть люди, которые все пытаются доказать маркету, что он идет "неправильным" путем, но это длится обычно не долго - либо они принимают "неправильность", либо рынок принимает их деньги.
 
Irtron
Во-первых, переходить на личности - это дурной тон, а ты делаешь это уже второй раз за сегодня в мой адрес.

Во втором случае я лишь использовал цитату, и то, что там появилось Ваше имя, было не моей инициативой.
В первом случае ремарки типа "влом" тоже не очень-то приятно получать в свой адрес. Можно было, ведь, просто заметить, что тема здесь широко обсуждалась.
В любом случае, не хотел никого обидеть и приношу свои извенения. Rosh'у персонально, в том числе.
Причина обращения: