1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
| TarasBer |
31.01.2011 15:09
Сообщение
#1
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
И что делать с этим 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 -------------------- |
![]() ![]() |
| volvo |
2.02.2011 17:05
Сообщение
#2
|
|
Гость |
Цитата для записей с дискриминантом по умолчанию, как написано, в стандарте, память всегда выделяется под самую длинную ветку. В Стандарте? Где именно, можно уточнить? Ибо это не выполняется ни разу. Проверь, чему равен t1'Size, а чему - t2'Size (где t1 имеет дискриминант = 0, а t2 - дискриминант = 1). А ведь использование этого поля не ограничивается обычным селектором. Я ж могу и так сделать:type Vector is array(Positive range <>) of Integer; , и это тоже дискриминантная запись. Какой теперь будет размер у tmain(0)? Неужели такой же, как и у tmain(48)? У меня что-то не получилось (я под Debian-ом сейчас, попробуй под Виндой, на всякий случай. Хотя я очень сомневаюсь). Показывает при d = 0: Size = 64 бита, а при d = 48: Size = 1632 бита. Где ж наибольшая длина? И какая она, кстати? Если в ветке when others описать еще один массив, тоже зависящий от D, то максимальный размер может быть совместим с общим объемом памяти в системе. Однако при корректной работе с такими записями все будет нормально. Правда предупреждение тебе компилятор-таки даст, мол Storage_Error может приключиться, если слишком большой дискриминант будет. Цитата Кстати, а будет ли добавлена конструкция return when, по аналогии с exit when? Что-то я не помню такого предложения на 2012. Хотя раньше - помню. Было в драфте того же документе, Ada 9X Project Report, под кодом Reference RR-0614: "Allow WHEN/RETURN in functions similar to EXIT/WHEN in loops." В итоговой версии документа этого предложения уже нет, не вышло оно из драфта. Причины непонятны. |
TarasBer Дискриминантные записи - GNAT 31.01.2011 15:09
volvo Думать, прежде, чем писать такие вещи. Ибо компиля... 31.01.2011 17:24
TarasBer > Компилятор сначала проверит, а имеешь ли ты п... 31.01.2011 18:11
volvo Значит, тебе не нужна Ада. Используй С и действуй ... 31.01.2011 20:13
-TarasBer- Мне всего-то надо создать в куче сущность с дискри... 31.01.2011 20:49
volvo Я сказал на операцию присваивания, а не на операци... 1.02.2011 13:28
TarasBer > Затем, чтобы контролировать, имеешь ли ты в д... 1.02.2011 14:15
volvo Пожалуйста. Только тебе это не поможет - ты все ра... 2.02.2011 12:35
TarasBer > Либо отказаться от использования discriminant... 2.02.2011 13:03
TarasBer > В Стандарте? Где именно, можно уточнить? Ибо ... 3.02.2011 13:33
volvo Оно уже сейчас есть в языке. Но только в А2005, а ... 3.02.2011 14:58
TarasBer > С точки зрения компилятора эти 2 типа записи ... 3.02.2011 15:22
volvo Я не про Модулу в данном случае. Я про тот проект,... 3.02.2011 17:52
-TarasBer- > Я не про Модулу в данном случае. Я про тот пр... 3.02.2011 19:48
volvo Не знаю, было ли у того проекта отдельное название... 3.02.2011 20:55
-TarasBer- > Но Вирт продвигал там идеи Алгол-W
Почитал в... 3.02.2011 21:19
volvo Что именно ты пробовал сделать, можно посмотреть? ... 3.02.2011 21:38
TarasBer Ну классический пример (из http://8vmr.livejournal... 4.02.2011 10:35
volvo Стоп. Ада такого не позволит по одной простой прич... 4.02.2011 13:30
TarasBer > Только у меня возникает вопрос: а почему надо... 4.02.2011 13:39
volvo Лямбды нужны там, где нет замыканий. В С++ их нет ... 4.02.2011 14:15![]() ![]() |
|
Текстовая версия | 15.11.2025 16:41 |