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 |
3.02.2011 14:58
Сообщение
#2
|
|
Гость |
Цитата это потому, что решили не добавлять этого в язык? Оно уже сейчас есть в языке. Но только в А2005, а как должен читать код человек, только что пришедший с А95? Там ведь так нельзя было делать. В целях удобства пользователей это делается. С точки зрения компилятора эти 2 типа записи абсолютно одинаковы.Цитата Ну не в стандарте, а в учебнике (если я правильно его понял): Не совсем. Тут размер еще зависит от способа описания переменной. То есть, если ты описываешь переменную так, что ее дискриминант становится постоянным и не допустимо его дальнейшее изменение (для этого достаточно написать v : TMain(0); скажем), то размер записи будет равен размеру жестко установленного варианта. Если же переменная описана с возможностью изменения дискриминанта, то размер ее будет равен размеру ее максимального варианта. с этим аккуратнее будь. И учти, что в A95 (если компилируешь без ключа -gnat05) у aliased-записи нельзя было менять дискриминант вообще, в то время как у обычной - согласно общим правилам. То есть, t13 : aliased TMain1 := (d => 0, f1 => 1); В 2005 это ограничение сняли, теперь можно менять дискриминант в данном случае. Цитата сказал что-то типа "это будет доступно в 2012 году". Это так и есть? Да, в А2012 вводится set notation, можно будет записывать if a in b .. c | d | e then ... Кроме этого должны быть разрешены Case-выражения, типа A := (case B is when 1 => 10, when 2 => 50, when others => 0); , есть еще много изменений... Цитата Я не знаю, почему Вирту и Хоару он показался сложным Вирт был обижен, что не его поделку выбрали в качестве базы для нового языка, а проект Ишбиа. Хоар работал там же, в одной группе с Виртом, так что причина - та же, скорее всего.P.S. Проект чуть позже посмотрю, хорошо? |
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
volvo В Стандарте? Где именно, можно уточнить? Ибо это н... 2.02.2011 17:05
TarasBer > В Стандарте? Где именно, можно уточнить? Ибо ... 3.02.2011 13:33
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:42 |