Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.008 c
15-1218723656
antonn
2008-08-14 18:20
2008.10.05
Оптимизация...


2-1219955393
dars73
2008-08-29 00:29
2008.10.05
Проблема с записью в RichEdit


15-1218831883
axis_of_evil
2008-08-16 00:24
2008.10.05
windows .. samba, кажись


2-1219917796
D7
2008-08-28 14:03
2008.10.05
COM-сервера


15-1218610196
MsGuns
2008-08-13 10:49
2008.10.05
Лето или очередная летаргия форума ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский