вторник, 20 января 2015 г.

Как побег лямбды из цикла удивляет компилятор

Это такая шутка - заставить компилятор выдать [dcc32 Fatal Error] InternalError.dpr(15): F2084 Internal Error: C22972.

Попробуйте написать в цикле лямбда-выражение, в котором есть оператор управления циклом - break или continue. Причём не важно, какой цикл - for, while, repeat. Компилятор от этого не умрёт, но и сказать ничего умного не сможет.

program InternalError;
{$APPTYPE CONSOLE}
begin
  while True
  (procedure begin
    break
  end)();
end.
 
Так ему! Пусть не думает, что умнее паровоза! Пусть выучит и повторяет: BREAK or CONTINUE outside of loop!

..........................

Не, ну что это я так на него в самом деле? Всё-таки он не совсем крэшанулся, не сбил Дэлфу, не открыл синий экран - тоже своего рода утешение. Ну, в конце-то концов он же понял, что тут что-то не так! И отреагировал, как уж смог.

Ну, ладно. Иди сюда мой хороший, давай я тебя обниму. Ну, что ты, что ты? Расстроился? Ну, ничего, не плачь, всё будет хорошо... А вот мы сейчас с тобой ещё одну программку покомпилим, хорошую программку... А та програмяка - бяка! Фу, брось её! Пусть там на quality.embarcadero.com с ней разбираются, а нам она не нужна, у нас и так программок много. Пойдём, моя радость!