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

Вниз

Глюк дельфей в консольном приложении   Найти похожие ветки 

 
Anatoly Podgoretsky ©   (2008-08-27 00:35) [40]

> sniknik  (26.08.2008 20:41:34)  [34]

> частный случай, видать изза того, что сравнение с переменной в цикле иначе реализовано чем с константой. (асм смотрел? проверь)
> но не переписывать же изза одного случая весь хелп... %), будет не хелп, а "здесь играем, здесь не играем а здесь рыбу заворачивали".
> хотя честно, вот этого я не знал... всегда на хелп полагался.

Я привел три варианта сгенерированого кода, различие большое. Знание значения на этапе компиляции (константы), позволяет сделать другой, более оптимальный код, приводя это к Integer, но это же не позволяет работать на границах или обеспечить должную последовательность.

На самом деле зачем гадать, как это будет для разных услоивий или версий Дельфи, когда есть WHILE и расширеные типы данных, например Int64, которые позволяют сделать надежный и управляемый код.


 
Германн ©   (2008-08-27 01:09) [41]

Вот кстати тоже о типах.
http://dev2.delphimaster.ru/forum/other/1178872210


 
han_malign ©   (2008-08-27 10:49) [42]


> > Ordinal types
> > Ordinal types include integer, character, Boolean, enumerated,  and subrange types.

- так, все-таки, Longword, Word, Byte, a также Int64, ShortInt и SmallInt - ordinal types, и если нет - то какие?


> $80000000 -
> какие цифры написаны?
> ... я тут мог и массив RGB задать...

- вообще-то, Pascal - язык высокого уровня, со строгой типизацией данных...
в вашем примере, написаны шестнадцатеричные числа в мнемонике Pascal.
В конкретном контейнере(например итераторе цикла For) - такие данные имеют кокретный смысл...
Например, если итератор цикла For имеет тип Longword - то это соответственно
255
65535
4294967295
256
65536
2147483648
--------------------
For statements:
- initialValue and finalValue are expressions that are assignment-compatible with counter.

Для тех кто в танке:
for dw:= LongWord(0) to LongWord($FFFFFFFF) do
[Hint] _for.dpr(): FOR or WHILE loop executes zero times - deleted


> частный случай, видать изза того, что сравнение с переменной в цикле иначе реализовано чем с константой

- в Pascal цикл For всегда имеет одинаковую реализацию:
1. Проверка условия входа в цикл
2. Инициализация итератора, счетчика и терминирующего значения цикла.
3. Тело цикла.
4. Изменение итератора и счетчика цикла.
5. Сравнение счетчика с терминирующим значением.
   Если не совпадает - переход на 3.

В зависимости от оптимизации:
- проверка условия входа в цикл(1.) может быть выкинута на этапе компиляции.
- итератор может выполнять функцию счетчика(чаще всего).
- терминирующее значение может быть задано констатой.
- сравнение(5.) может быть опущено при явной проверке результата изменения счетчика(в Delphi выход из цикла происходит только при взведенном флаге Z - без всяких знаков)

Вот, как раз - проверка условия входа в цикл(1.) - в анализаторе компилятора, и в скомпилированном коде - имеет разную реализацию, что и является глюком...


 
sniknik ©   (2008-08-27 14:06) [43]

>> Ordinal types
>> Ordinal types include integer, character, Boolean, enumerated,  and subrange types.
ну теперь понятно откуда взял... говорю же, читаешь выборочно. взял и составил чего хочется из слов и неважно что к чему относится. (types сдесь относится к subrange, ни к чему больше, проконсультируйся со спецом по грамматике английского языка)

> - так, все-таки, Longword, Word, Byte, a также Int64, ShortInt и SmallInt - ordinal types, и если нет - то какие?
а проверь, и подставь в цикл переменную типа Int64 (единственное автоматом не приведется т.к. размером не вышла).

> Например, если итератор цикла For имеет тип Longword
заход на очередной круг? по справке он там не может иметь тип Longword, и по той же справке тип может приводится автоматом, если размерность позволяет (байт в интеджер легко, иттеджер в байт с ограничениями, и возможным чекранже).

> Для тех кто в танке:
и смысл подобного приведения, если компилятор будет проверять по такому (автоматическое приведение, сколько уже повторялось)
for dw:= integer(LongWord(0)) to integer(LongWord($FFFFFFFF)) do
?

> - в Pascal цикл For всегда имеет одинаковую реализацию:
и это после 3-х (или 4х?) приведенных вариантов?...
повторю, результирующий код не документирован, и может быть любым! (вот в твоем примере с переменной повезло и выдало такую проверку которая при неверном значении верно сработала. но это не обязаловка раз в хелпе не прописано)

кстати вот чего странно, когда тебе было выгодно ты в код CPU залез и привел, а сейчас споришь вместо того чтобы просто посмотреть и убедиться.
спор ради спора?


 
han_malign ©   (2008-08-27 16:28) [44]


> заход на очередной круг? по справке он там не может иметь тип Longword

кокретно - место в справке где это написано...
кокретно - где написано, что Longword не перечислимый тип...

> повторю, результирующий код не документирован, и может быть любым!

конкретно - пример - где результирующий код не соответсвует приведенной схеме, хотя бы из тех "3-х (или 4х?) приведенных вариантов"...

"так держать! больше ламеров - меньше конкурентов."(c)sniknik


 
DiamondShark ©   (2008-08-27 17:43) [45]


> types сдесь относится к subrange, ни к чему больше, проконсультируйся
> со спецом по грамматике английского языка

Угу. А к enumerated, надо полагать, не относится.
И что, тогда, такое character? Что такое character types, знаю -- это char и widechar, а слова character в Паскале нету.


> повторю, результирующий код не документирован, и может быть
> любым!

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

Это именно глюк компилятора.



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

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

Наверх




Память: 0.55 MB
Время: 0.021 c
2-1219309785
LCF
2008-08-21 13:09
2008.10.05
Ручная отрисовка DBGrid


15-1219052638
начинающий
2008-08-18 13:43
2008.10.05
Задачка.


15-1218377553
Урсулапов
2008-08-10 18:12
2008.10.05
А почему пост про день рождения 9 августа не было?


15-1218461415
Городской Шаман
2008-08-11 17:30
2008.10.05
Скайп-чат DelphiMaster


2-1219467347
apic
2008-08-23 08:55
2008.10.05
Создание папок