![]() |
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 -------------------- |
![]() ![]() |
volvo |
![]()
Сообщение
#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. Проект чуть позже посмотрю, хорошо? |
![]() ![]() |
![]() |
Текстовая версия | 25.06.2025 11:59 |