![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
TarasBer |
![]()
Сообщение
#21
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
> и, следовательно, разрешит менять селектор в рантайме
Во, тогда нормально. > Если то, что ты меняешь недоступно при установленном в настоящий момент селекторе, вылетит CONSTRAINT_ERROR Да, этого я и хотел (но опять же, как отключаемую опцию компилятора). Я понял, почему Image для перечислимых типов для меня бесполезен. Типы я перечисляю в коде на английском, сообщения для пользователя пишу на русском (возможность писать идентификаторы на русском не предлагать, запарюсь переключаться). Да, будь я носителем языка с латинницей, оценил бы эту возможность по достоинству. Система типов интересная (я про Unsigned_8 итд), намного логичнее, чем long long long int и прочие нелепые названия. -------------------- |
volvo |
![]()
Сообщение
#22
|
Гость ![]() |
Цитата этого я и хотел (но опять же, как отключаемую опцию компилятора). Обрати внимание на вывод внизу экрана, ошибки уже нет. Достаточно было просто поставить одну-единственную галочку...Эскизы прикрепленных изображений ![]() |
TarasBer |
![]()
Сообщение
#23
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Я нашёл в википедии забавный пример, который показывает, зачем в Си такой switch.
http://ru.wikipedia.org/wiki/Устройство_Даффа
Правда, остаётся вопрос, зачем нужен этот пример. -------------------- |
Lapp |
![]()
Сообщение
#24
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
зачем в Си такой switch. Аму-дарьеть.. Я б сам ни в жизь не допер..-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
volvo |
![]()
Сообщение
#25
|
Гость ![]() |
Цитата остаётся вопрос, зачем нужен этот пример. Чтоб огрести проблем с выходом новой редакции Стандарта (и новой версии компилятора, придерживающейся этой редакции).Тема разделена: Настройка GPS (IDE для Ады) Сообщение отредактировано: volvo - 20.01.2011 0:02 |
volvo |
![]()
Сообщение
#26
|
Гость ![]() |
Из недавнего - просто вспомнилось (к вопросу о безопасности и контроле программиста над происходящим в программе)...
Все помнят такую особенности Дельфи / Object Pascal, как передачу объекта класса по ссылке, и к чему это приводит, да? Иллюстрация: // есть вот такой класс Как вы думаете, что в данном случае означает Const? Неужели - то, что объкет класса нельзя изменить, и Дельфи мне выдаст ошибку компиляции или хотя бы аварийно завершит программу при попытке изменения объекта Obj? Да ничего подобного. Легко изменяется любое поле объекта, хоть напрямую, хоть через методы/свойства. Это по меньшей мере нелогично. Если я передаю объект в процедуру с таким прототипом: procedure DoSomething (Const Obj : T); , я ожидаю, что объект не будет изменен. Дельфи мне этого обеспечить не может. В отличие от С++. Что делается в Аде? Тут как раз все в порядке: (описание класса) -- Specification file (ADS) (основная программа) procedure Polymorphic (Obj : in MyObj.Root) is , компиляция прекратится при попытке вызвать метод, модифицирующий Obj. Так что вот вам еще одна ступень защиты. Если же параметр Obj описать как in out, то есть, изменяемый - то и Set_Value прекрасно отработает. |
TarasBer |
![]()
Сообщение
#27
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Эээ, а кто может обеспечить безопасность данных, передаваемых по указателю, даже если он передан с модификатором const?
Что касается классов, то в Дельфи класс - это указатель. А в С++ просто классы сделаны как положено (да, мне С++ная концепция ООП нравится куда больше), а не в виде указателей, которые ещё и надо РУКАМИ удалять. В Дельфи, чтобы передать содержимое, а не указатель, надо пользоваться не class, а object. Короче, ООП от Борланда мне (из-за этого в том числе) стало казаться настолько неестественным, что я стал жёстко структурить, выдавая иногда перлы типа http://govnokod.ru/4249 или http://govnokod.ru/5261 (да, именно тут мне захотелось контроля обращения к вариантному полю в зависимости от знаения селектора). Зато, я считаю, только после таких вещей начинаешь по-настоящему понимать смысл ООП, а не так, что дяди сказали, что ООП типо крута, а сам сидишь и лепишь его везде. -------------------- |
volvo |
![]()
Сообщение
#28
|
Гость ![]() |
Цитата Эээ, а кто может обеспечить безопасность данных, передаваемых по указателю, даже если он передан с модификатором const? Хм. Значит, надо было отменять модификатор const, или доделывать его, чтоб он работал со всеми сущностями, а не отсылать программиста разбираться, является ли классом строка, и почему на нее спецификатор действует, а на другие классы - нет.Тем более, что это возможно, как оказалось. В Аде объекты тоже не передаются по значению, однако если я заказал доступ только по чтению - то он таким и будет, и мне не надо волноваться, что мой объект будет изменен в результате. |
TarasBer |
![]()
Сообщение
#29
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Забавно, но самый страшный баг был написан именно на Аде:
http://ru.wikipedia.org/wiki/Авария_ракеты...5_(4_июня_1996) -------------------- |
volvo |
![]()
Сообщение
#30
|
Гость ![]() |
Блин... Это не проблема Ады. Есть посекундный анализ этой катастрофы, который показал, в чем на самом деле была проблема. Показать? Кому-то просто выгодно муссировать слухи, о том, что именно язык МО США дал такой сбой...
|
TarasBer |
![]()
Сообщение
#31
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
> Есть посекундный анализ этой катастрофы, который показал, в чем на самом деле была проблема. Показать?
Да. > Кому-то просто выгодно муссировать слухи, о том, что именно язык МО США дал такой сбой... Во всех официальных источниках обвиняется именно программное обеспечение. Хотя я понимаю, что С++ бы туда за пушечный выстрел не допустили и с ним бы ракета, скорее всего, даже не взлетела бы. -------------------- |
volvo |
![]()
Сообщение
#32
|
Гость ![]() |
Цитата Во всех официальных источниках обвиняется именно программное обеспечение. Уточняю: во воех русскоязычных официальных источниках... Вот перевод отчета Комиссии по Расследованию: http://forums.airbase.ru/2007/03/t54337--a...shibk.2155.html( на всякий случай - вот ссылка на англоязычный оригинал: http://homepages.inf.ed.ac.uk/perdita/Book/ariane5rep.html ) Что видим? А вот что: Цитата Было обосновано, что в случае события отмены старта период в 50 сек. после H0-9 будет достаточным для того, чтобы наземное оборудование смогло восстановить полный контроль за Инерциальной Платформой без потери информации – за это время Платформа прекратит начавшееся было перемещение, а соответствующий программный модуль всю информацию о ее состоянии зафиксирует, что поможет оперативно возвратить ее в исходное положение (напомним, что все это в случае, когда ракета продолжает находиться на месте старта). И действительно, однажды, в 1989 г., при старте под номером 33 ракеты Ariane 4, эта особенность была с успехом задействована. Однако, Ariane 5, в отличие от предыдущей модели, имел уже принципиально другую дисциплину выполнения предполетных действий – настолько другую, что работа рокового программного модуля после времени старта вообще не имела смысла. Однако, модуль повторно использовался без каких-либо модификаций – видимо из-за нежелания изменять программный код, который успешно работает. <...> Расследование показало, что в данном программном модуле присутствовало целых семь переменных, вовлеченных в операции преобразования типов. Оказалось, что разработчики проводили анализ всех операций, способных потенциально генерировать исключение, на уязвимость. И это было их вполне сознательным решением добавить надлежащую защиту к четырем переменным, а три – включая BH – оставить незащищенными. Основанием для такого решения была уверенность в том, что для этих трех переменных возникновение ситуации переполнения невозможно в принципе. Уверенность эта была подкреплена расчетами, показывающими, что ожидаемый диапазон физических полетных параметров, на основании которых определяются величины упомянутых переменных, таков, что к нежелательной ситуации привести не может. И это было верно – но для траектории, рассчитанной для модели Ariane 4. А ракета нового поколения Ariane 5 стартовала по совсем другой траектории, для которой никаких оценок не выполнялось. Между тем она (вкупе с высоким начальным ускорением) была такова, что "горизонтальная скорость" превзошла расчетную (для Ariane 4) более чем в пять раз. Но почему же не была (пусть в порядке перестраховки) обеспечена защита для всех семи, включая BH, переменных? Оказывается, для компьютера IRS была продекларирована максимальная величина рабочей нагрузки в 80%, и поэтому разработчики должны были искать пути снижения излишних вычислительных издержек. Вот они и ослабили защиту там, где теоретически нежелательной ситуации возникнуть не могло. Когда же она возникла, то вступил в действие такой механизм обработки исключительной ситуации, который оказался совершенно неадекватным. Этот механизм предусматривал следующие три основных действия. Прежде всего, информация о возникновении нештатной ситуации должна быть передана по шине на бортовой компьютер OBC; параллельно она – вместе со всем контекстом – записывалась в перепрограммируемую память EEPROM (которую во время расследования удалось восстановить и прочесть ее содержимое), и наконец, работа процессора IRS должна была аварийно завершиться. Последнее действие и оказалось фатальным – именно оно, случившееся в ситуации, которая на самом деле была нормальной (несмотря на сгенерированное из-за незащищенного переполнения программное исключение), и привело к катастрофе. Итого: недостаток вычислительной мощности, из-за которого программисты осмысленно снимают защиту (что в результате приводит к сбою) - это проблема языка? Нет. То, что траектория Ариан-5 не оценивалась во всей серьезностью, а кто-то положился на то, что все будет так же, как и в Ариан-4 - это что, проблема Ады? Нет. В чем же тогда обвиняют язык? В том, что кто-то неизвестно почему не мог усилить процессоры? В том, что не было выделено средств на тестирование баллистических характеристик? В том, что кто-то вообще не дал программистам просмотреть код, чтоб не платить им, а заявил, что будет использоваться прекрасно показавшая себя в прошлом проекте часть? Почему Ада виновата? |
TarasBer |
![]()
Сообщение
#33
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
> Итого: недостаток вычислительной мощности, из-за которого программисты осмысленно снимают защиту (что в результате приводит к сбою) - это проблема языка?
Это может быть проблемой компилятора, не умеющего эффективно оптимизировать код (не знаю, насколько это относится к Аде). -------------------- |
![]() ![]() |
![]() |
Текстовая версия | 19.06.2025 15:59 |