Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.09.04;
Скачать: CL | DM;

Вниз

Работает заведомо нерабочий код.   Найти похожие ветки 

 
Дмитрий С ©   (2011-05-15 12:24) [0]

У вас такое бывает?
Написал какой-то код, проверил - вроде работает, продолжаешь разработку, проходит неделя-другая - тот код работает, и вдруг начинает работать какой-то только что написанный код. Начинаешь искать, и видишь, что написанное недели две назад не может работать даже в принципе.

Была у меня такая функция:
Array.prototype.IndexOf2 = function (Value, StartIndex) {
if (!StartIndex) StartIndex = 0;

if (this.indexOf) {
 var i = this.indexOf(Value, StartIndex);
 if (i<0) return false;
 //!!!!!!!
} else {
 for(var i=StartIndex; i<this.length; i++)
  if (this[i]==Value) return i;
 return false;
}
}

Написана очень давно (сейчас б я так не стал делать), но все, же, несложно заметить, что вместо восклицательных знаков должно быть return i. Вот и спрашивается, как работа этой функции устраивала раньше? У меня это не первый случай. Ну и ваши такие случаи?


 
Ega23 ©   (2011-05-15 14:00) [1]

Нетипизированные языки сжечь. Отрубить руки-ноги, вырвать ему его себя, над трупом надругаться, а после - сжечь. Пепел развеять на Эвересте.


 
TUser ©   (2011-05-15 14:06) [2]

экстремистов - давить, после чего подвергать страшным мучениям :-)

на самом деле у нетипизированных - своя ниша, мелочи на них реально проще делать


 
DiamondShark ©   (2011-05-15 14:39) [3]


>  Вот и спрашивается, как работа этой функции устраивала раньше?

Возвращала иногда undefined. Что вызывающим кодом интерпретировалось как неудачный поиск.
Поведение, конечно, нифига не правильное, но исключений не было, и всем было пофиг: ну подумаешь, некоторые части иногда брешут. Но не падает же. Тестированием на валидность результатов никто не занимался.


 
Юрий Зотов ©   (2011-05-15 14:55) [4]

Обратный пример - не работает заведомо рабочий (казалось бы) код - цикл с явным счетчиком вдруг стал бесконечным.

Язык PL/1.

DCL I DEC FIXED(1); /* Соответствует Паскалевскому var I: 0..9; */
DO I=0,9  /* Соответствует Паскалевскому for I:=0 to 9 do begin */
 ... /* Тело цикла */
END;

Искал плюху 2 дня. С тех пор появилась привычка включать Check Range.
:o)


 
TUser ©   (2011-05-15 15:49) [5]

У меня вот цикл for в Turbo Delphi выполнялся в обратном направлении, причем счетчик цикла в его теле используется. Оптимизатор тоже умеет делать глюки.


 
Германн ©   (2011-05-15 16:46) [6]


> У меня вот цикл for в Turbo Delphi выполнялся в обратном
> направлении, причем счетчик цикла в его теле используется.
>  Оптимизатор тоже умеет делать глюки.

Оптимизатор имеет право менять направление цикла, даже если счетчик цикла используется внутри цикла.


 
virex(mobile)   (2011-05-15 17:42) [7]

>Дмитрий С ©   (15.05.11 12:24) [0]

после "оптимизации" кода, некоторый рабочий перестает работать, а не рабочий вновь начинает работать
вчерашний случай с андроид клиентом форума: сделал загрузку из базы в потоке, все робило без проблем... для теста удалил базу - не робит, пришлось восстанавливать старый код


 
TUser ©   (2011-05-15 18:22) [8]


> Оптимизатор имеет право менять направление цикла, даже если
> счетчик цикла используется внутри цикла.

С каких пор? Вообще-то, оптимизатор не имеет права влиять на результат выполнения кода, а следовательно на направление цикла, если счетчик внутри используется.


 
Германн ©   (2011-05-15 18:40) [9]


>  Вообще-то, оптимизатор не имеет права влиять на результат
> выполнения кода, а следовательно на направление цикла, если
> счетчик внутри используется.

Смотря как используется.


 
TUser ©   (2011-05-15 18:59) [10]

Имхо, если используется, то трудно придумать ситуацию, когда оптимизатор может гарантированно знать, что его правки безопасны. Из-за многопоточности.

В моем конкретном случае, результат функции изменялся в результате оптимизации, а так делать нельзя.


 
Германн ©   (2011-05-15 19:13) [11]

http://forum.sources.ru/index.php?showtopic=331557
Вот тут обсуждался один из таких примеров.


 
TUser ©   (2011-05-15 19:26) [12]


> Германн ©   (15.05.11 19:13) [11]
>
> http://forum.sources.ru/index.php?showtopic=331557
> Вот тут обсуждался один из таких примеров.
>

Ужос, очевидно, что от работы оптимизатора Result получает иное значение. У меня похожий пример был, что-то типа

for i := 1 to ...
 if a[i] = 0 then
   break
   else
 if a[i] = a[i-1] then
   Aaaa


 
TUser ©   (2011-05-15 19:29) [13]

По поводу ответа CodeMonkey - ну вот практика показывает, что цикл работает неправильно.


 
sniknik ©   (2011-05-15 20:56) [14]

> По поводу ответа CodeMonkey - ну вот практика показывает, что цикл работает неправильно.
а ты проверь. цикл там как раз работает правильно
CodeMonkey объясняет почему... но кто то смотрит только на переменную, которая вообще не причем (заменяется регистровой).

ну вот, чтобы без ссылок
// Получаем префикс времени
function GetTimePrefix(N: Integer): String;
const
 pref: array [0..6] of string = (" г. ", " м. ", " н. ", " д. ", " ч. ", " мин. ", " сек. ");
 del: array [0..6] of Integer = (31536000, 2592000, 604800, 86400, 3600, 60, 1);
var
 a: array [0..6] of Integer;
 i: integer;
begin
 Result := "";
 a[6] := N;

 for i := 0 to 5 do begin
   a[i] := a[6] div del[i];
   a[6] := a[6] mod del[i];
   if a[i] <> 0 then
     Result := Result + IntToStr(a[i]) + pref[i];
 end
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
 Edit1.Text:= GetTimePrefix(1);
end;


ставим точку останова в начало, и смотрим не только на i но и на значения массива a, как они изменяются (а они там в цикле меняются), и видим что хоть i и меняется от 6 ти, но массив заполняется с 0... т.е. переменная i "обманка". "фикция", на результат не влияет. потому и неважно с какой стороны ее считать.



Страницы: 1 вся ветка

Текущий архив: 2011.09.04;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.01 c
2-1305751066
vasja123
2011-05-19 00:37
2011.09.04
Ассоциация с типом файлов


4-1250283837
Alexei
2009-08-15 01:03
2011.09.04
Как определить момент манипуляции устройством ввода?


15-1305187866
Дмитрий С
2011-05-12 12:11
2011.09.04
Задачка с ЕГЭ (http://ege.yandex.ru)


15-1303279486
Inovet
2011-04-20 10:04
2011.09.04
Фильм "Generation П" кто-нибудь уже видел?


15-1305577799
Юрий
2011-05-17 00:29
2011.09.04
С днем рождения ! 17 мая 2011 вторник