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

Вниз

Это не про дельфи 2005, а про дельфи 6.   Найти похожие ветки 

 
Суслик ©   (2005-03-09 23:07) [0]

Добрый день. Когда я поставил дельфи 2005, то обнаружил, что есть некоторые синтаксические конструкции, которые не компилируются. Например такая

const
  a = 10;
var
  aa: array [a+1..a+2] of integer;


Ошибка бывает на первом "a" после "[". Сообщение "indent a redeclared".

Перед покупкой дельфи 2005 есно решил его поизучать. Изучаю триал. Там эта ошибка в точности повторяется, как и в "паленой" версии, которую я исследовал раньше.

Естесно возник вопрос: в чем дело? С точки зрения синтаксиса тут все верно. Полез в gramar (есть в штатном хелпе дельфи 6). Т.к. в 2005 его не нашел, то взял из дельфи 6.

И с удивлением обранружил, что такая конструкция

const
  a = 10;
var
  aa: array [(a)..(a)] of integer;


в дельфи 6 дает ошибку на "a" ровно с тем же сообщением. При этом

const
  a = 10;
var
  aa: array [a..(a)] of integer;

компилиться нормально

Понятно в чем дело - несмотря на то, что "(a)" есть корректное константное выражение компилятор путает его с "enumeration type", который также допустим в массиве. Т.е. писать
var
  aa: array [(a)] of integer;

абсолютно корректно.

Поэтому вопрос про дельфи 6: не является ли тот факт, что код
const
  a = 10;
var
  aa: array [(a)..(a)] of integer;

не компилиться ошибкой компилятора?
Или я неверно понимаю gramar?

ЗЫ. Вопрос все же косвенно связан с дельфи 2005. Дело в том, что возможно я пойму, что я неверно понимаю gramar как таковой и мои претензии к компилятору дельфи 2005 необоснованны.

ЗЗЫ. Проверялось и на дельфи 6 и на дельфи 6+сп 2


 
Ломброзо ©   (2005-03-09 23:38) [1]

Насколько я помню, что-то подобное тут приводил MBo и они в четыре челюсти с DiamondShark`ом этот вопрос успешно разжевали. Но прелесть ситуации в том, что для того, чтобы добиться такой ошибки, светлейшие гойловы мастаков пыхтели над попыткой её сэмулировать в течение эдак постов двадцати. Т.е. ошибка из серии "Нарочно не придумаешь". А у Вас - хоп! "Шол-шол и вот случайно нашол".
И причём не в первый раз.


 
суслик ©   (2005-03-10 00:02) [2]

Я в ms sql сервере 2 ошибки нашел. Вроде наш сервермен их репортовал.

Не программистом мне надо было быть :)


 
суслик ©   (2005-03-10 00:03) [3]

Думаю, что все дело, что в паскале не совсем контексносвободная грамматика. :(

Я не проводил исследование т.к. не видел полной грамматики (может кто видел? :)) Но такое ощущение у меня есть.


 
Димон   (2005-03-10 10:43) [4]

Попробуйте кто-нить в дельфи 6 или 7 такой код

const
 a = 10;
var
 aa: array [(a)..(a)] of integer;


выдает ошибку компиляции на первом после "[" идентификаторе "а" со с мотивировкой - "identifier receclared"?


 
_silver ©   (2005-03-10 10:46) [5]

Димон   (10.03.05 10:43) [4]
Delphi7 - да.


 
Димон   (2005-03-10 10:47) [6]


>  [5] _silver ©   (10.03.05 10:46)

Т.е. выдает ошибку?
И что ты про это думаешь? Чья ошибка? Я неверно грамматику понимаю? Или как?


 
Закулиса Мировая   (2005-03-10 10:53) [7]

Да. Ничего. ДНК. Да. Риторический вопрос.


 
_silver ©   (2005-03-10 10:53) [8]

Димон   (10.03.05 10:47) [6]
Да, выдаёт.
Build
 [Error] Unit1.pas(23): Identifier redeclared: "a"
 [Error] Unit1.pas(23): "," or ":" expected but ";" found
 [Error] Unit1.pas(26): Type expected but "IMPLEMENTATION" found
 [Fatal Error] Project1.dpr(5): Could not compile used unit "Unit1.pas"


Думаю delphi понимает (a) как перечислимый тип, а константа a уже объявлена.
Вот это выдаёт ту же ошибку.
const
a = 10;
var
 aa : (a,b);


 
Димон   (2005-03-10 10:58) [9]


>  [8] _silver ©   (10.03.05 10:53)


Как я уже говорил, я тоже думаю, что дельфи путает это с перечислимым типом. :(

Вопрос связан с 2005, т.к. там в области задания границ массивов другие глюки: в частности нельзя задавать нижние и верхние границы в виде контантных выражений. Т.е. так array: [a+1..a+22] of integer;
При том, что в каких то случая (в основном когда кода мало) это компилируется. В большом проекте нет. Смотрел и на кривой версии и на триале.

Собтсвенно вопрос риторический - забить на это и покупать 2005, или факт некорректной работы может послужить препятствием для покупки - мало ли еще сколько там глюков :(((


>  [7] Закулиса Мировая   (10.03.05 10:53)

хотел сказать, но не буду :) потрут еще ...


 
_silver ©   (2005-03-10 11:03) [10]

Димон   (10.03.05 10:58) [9]
Про глюки delphi2005 не раз писали.
Одним больше, одним меньше...
Я бы покупать не стал.
Поставил пиратскую версию, поигрался, снёс.
Буду ждать более стабильной версии.


 
Закулиса Мировая   (2005-03-10 11:06) [11]

Я просто действительно хочу узнать... или нет... я хочу, чтобы Вы привели пример кода, где использование массива, индексируемого не с нуля, размеры которого должны высчитываться на этапе компиляции от константы, причём заменить константу обычным числом прямо в коде, я#ляется жизненной необходимостью.

Что Вы сразу ложкой стучите? Я же Вам не предлагаю сбегать за верёвкой с мылом?


 
Димон   (2005-03-10 11:06) [12]


>  [10] _silver ©   (10.03.05 11:03)


и поставил, и поигрался, и снес уже :(((

Общее ощущение сырости присутствует. Сам понимаешь, что такая фигня, о которой я пишу, не особо критична, т.к. всегда можно выпутаться - преписать код иначе.

Но это наводит на мысль, а что если там еще много чего, причем такого, что не вылавливается на этапе компиляции :((

При том, что скомпилированный на 2005 проект в результате недельного тестирования глюков не выявил. Но все равно боязно.

Интересно было бы знать чей-нибудь опыт тестирования проектов, собранных на 2005. Нормально, работают?


 
Димон   (2005-03-10 11:08) [13]


>  [11] Закулиса Мировая   (10.03.05 11:06)

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


 
_silver ©   (2005-03-10 11:13) [14]

Димон   (10.03.05 11:06) [12]
Я компилировал 2 проекта на d2005, по 100тыс строк каждый. Оба откомпилировались успешно, но один запустился нормально, второй посыпал AV.
Почему так разбираться не стал, может у меня конечности кривые.
В d7 оба работают хорошо.


 
Димон   (2005-03-10 11:17) [15]


>  [14] _silver ©   (10.03.05 11:13)

попробуй скомпилиться в $R-
Я заметил, что дельфи 2005 более строг к range checking.
У тебя может где-то что-то случилось (например, в конструкторе), а где-то (например, в деструкторе) некорректно обработана ошибка.


 
Закулиса Мировая   (2005-03-10 11:18) [16]


>, обязан ее выполнять. Все. К
                     ^^^^^^^^^^


А вот в русском языке букву "ё" тоже пока никто не отменял. Почему же Вы ею  брезгуете?


 
Димон   (2005-03-10 11:20) [17]

а у меня такая на клавиатуре разве есть? Где? :)
Ув., вы первые начали неприятоности говорить:) Если вас раздражает мой  тон не терпяший возражений, то рядом полно топиков.
Если есть, что по сути - рад услышать :)


 
_silver ©   (2005-03-10 11:26) [18]

Димон   (10.03.05 11:17) [15]
Вполне возможно, но к d2005 я теперь, наверное, не скоро вернусь.


 
REA   (2005-03-10 13:21) [19]

В D7 тоже бывает, что глотает не совсем корректные конструкции.
(Например SomeFunction(Arg1,); - у этой функции один аргумент и запятая просто игнорируется). Еще что-то попадалось, но не помню что.


 
Игорь Шевченко ©   (2005-03-10 13:43) [20]


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


А ты ее читал, грамматику-то ? И в QC, кистате, писал, или только здесь жалобы на Борланд катишь ?


 
Димон   (2005-03-10 13:51) [21]


>  [20] Игорь Шевченко ©   (10.03.05 13:43)

Игорь. Буду крайне благодарен, если ты мне поможешь разобраться с qc. Как там искать заявлена ли ошибка или нет?

Грамматику я не читал, кроме того обрезка, который представлен в хелпе.
Я ты видел ее полностью? Рад был бы посмотреть:)


>  [19] REA   (10.03.05 13:21)
>Еще что-то попадалось, но не помню что.


Бывает без запятой между параметрами компилиться. 2005, кстати, все эти места радостно нашел.


 
Игорь Шевченко ©   (2005-03-10 14:43) [22]

Димон   (10.03.05 13:51) [21]

Просто опиши свою ситуацию. Искать наверное в категории Compiler, с указанием версии Delphi. Мне сейчас не удобно запускать QC, у меня он из среды запускался, а триал у нее кончился.


 
vuk ©   (2005-03-10 15:29) [23]

to Игорь Шевченко ©   (10.03.05 14:43) [22]:
>у меня он из среды запускался, а триал у нее кончился
Клиент QC - отдельная софтина, триал на нее не распространяется. У меня стоит в папке C:\Program Files\Borland\BDS\3.0\QualityCentral\

К тому же можно и через qc.borland.com работать.


 
имя   (2005-03-10 17:34) [24]

Удалено модератором


 
имя   (2005-03-10 17:48) [25]

Удалено модератором
Примечание: Дальше будет РО



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

Форум: "Потрепаться";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.04 c
4-1108153857
AquaForm
2005-02-11 23:30
2005.03.27
В буфере обмена ?????? вместо русского текста


3-1109152622
Adil
2005-02-23 12:57
2005.03.27
работать с Баз данными не используя BDE


1-1110901761
xsh
2005-03-15 18:49
2005.03.27
Stringgrid и Edit


3-1109836998
neat
2005-03-03 11:03
2005.03.27
Отследить изменение поля таблицы в DBGrid


8-1102433128
Sergonoid
2004-12-07 18:25
2005.03.27
LineTo или рисование по мм?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский