![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
TarasBer |
![]()
Сообщение
#1
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
И что делать с этим raised CONSTRAINT_ERROR : test.adb:24 discriminant check failed ? В процедуре через out-параметр присвоилось нормально, однако. А вот t3'access.all := t1'access.all; - ошибка дискриминанта Почему прямо присваивать можно, а через указатель - нельзя? Так и написано в стандарте? Если поставить точку останова, а потом добить пустых строчек так, чтобы эта точка оказалась на строчке, на которой ничего нет, а потом отрубить отладчик, пересобрать код, перезапустить отладчик, то эту точку останова уже не убрать. Дизассмеблер не взлетел: Couldn't get assembly code. Кстати, смысла на ограничения параметров в функциях нет никакого. Избавление от побочных эффектов? Ха, толку, если можно писать во внешние переменные. Зато костыль с access получится на славу по уродливости. Зачем вообще языки Паскалевого семейства делают ненужное разделение на процедуры и функции? Да, концепция красивая, типа процедура - то, что выполняется, функция - то, что возвращает значение, но в условиях реальности она только мешает. Сообщение отредактировано: TarasBer - 31.01.2011 15:11 -------------------- |
![]() ![]() |
TarasBer |
![]()
Сообщение
#2
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
> Либо отказаться от использования discriminant records и решить задачу по-другому,
Ну я пока так и делаю. > либо воспользоваться procedure вместо function (это тоже не будет работать со всеми вариантами, см. ниже), Неудобно. > либо отключать проверку дискриминанта. Неправильно. > Ну, и четвертый вариант: ждать выхода компилятора, полностью поддерживающего Ada 2012. Да уж жду с нетерпением. Кстати, а будет ли добавлена конструкция return when, по аналогии с exit when? В общем, я так и не понял реальную причину, по которой контроль за ссылками сильнее, чем за просто записями. Я предположил, что может память для них по разному выделяется и попытка присвоить длинную ветку короткой может испортить данные в куче, хотя это вряд ли, для записей с дискриминантом по умолчанию, как написано, в стандарте, память всегда выделяется под самую длинную ветку. > Без понятия. Не требовалось ни разу ctrl+k+i и ctrl+k+u мне уже не нужны, ctrl+tab намного круче! Отладчик что-то какой-то нестабильный. На пустом месте выдал: 0x6a34f630 in system.soft_links.abort_defer_nt () from C:\Program Files\ADA\bin\libgnat-2010.dll -------------------- |
![]() ![]() |
![]() |
Текстовая версия | 25.06.2025 5:08 |