OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 19 Апрель, 2024 12:27

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 154 ]  На страницу Пред.  1, 2, 3, 4, 5 ... 8  След.
Автор Сообщение
СообщениеДобавлено: Вторник, 27 Январь, 2009 16:49 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Какая-то странная логика - ну и что с того?
Если отсутствие (и способ установления связи) - не артефакт, а элемент модели, внешней по отношению к собственно написанию кода, и код был написан плохо (плохо структурировался, раз что-то забыли...), то причём тут NIL-то? Это как ребёнок, ушибившийся об угол табуретки, начинает её бить за то, что она плохая...

P.S. Лично я давно занимаюсь проблемами указателей и возможностью их решения... Но вот эту проблему за проблему не принимаю, ну хоть вы что говорите ))


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Январь, 2009 16:53 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Vlad писал(а):
И все из-за того, что код, который эту связь устанавливает (и находится совсем в другом месте), был модифицирован (с неправильным пониманием относительно такого, насколько важно установить эту связь именно здесь) несколько релизов назад :)

Так проектируйте уровни ответственности, структурируйте систему... Эти уровни, владения и сетка связей на каждом из них сама должна аккуратно складываться, если выполняется нисходящая декомпозиция модели. Если только используемый инструмент не соблазняет-вынуждает с первых шагов забыть об этом уровне мышления и заняться только кунштюками его-любимого. Не, ну серьёзно - странно очень это слышать всё.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Январь, 2009 16:57 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Илья Ермаков писал(а):
Чем противоестественна, в общем случае, ситуация, когда объект может иметь связь, но в данный момент её не имеет?


Вот даже вопрос ведь был задан - "чем противоестественна...", а ответ был дан на вопрос "на какие грабли при кодинге можно наткнуться". Дорогие коллеги, грустно как-то сразу стало :(


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Январь, 2009 17:43 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Вот даже вопрос ведь был задан - "чем противоестественна...", а ответ был дан на вопрос "на какие грабли при кодинге можно наткнуться". Дорогие коллеги, грустно как-то сразу стало :(


Конкретно на такую постановку отвечаю: ничем не противоестественна. Про грабли я рассказал применительно к вашему же вопросу про "существо проблемы с nil" (то самое существо, с которым в ФП несколько лучше).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Январь, 2009 17:58 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Какая-то странная логика - ну и что с того?
Если отсутствие (и способ установления связи) - не артефакт, а элемент модели, внешней по отношению к собственно написанию кода, и код был написан плохо (плохо структурировался, раз что-то забыли...), то причём тут NIL-то?


NIL при том, что он есть всегда (для любой ссылки) - об чем и речь в названии темы. Поэтому для модели, для которой отсутсвие связи не артефакт - все хорошо. А вот для модели, в которой связь есть всегда - наличие нулевых ссылок создает опасность поиметь ошибку в рантайме. По моему опыту, иметь дело с моделями, в которых связь есть всегда, намного проще и естественнее. Поэтому я бы "по умолчанию" предпочел иметь дело с ненулевыми ссылками, а вот для выражения "отсутствия связи" - какой-то специальный способ (специальную ссылку).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Январь, 2009 18:07 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Так проектируйте уровни ответственности, структурируйте систему...


Не, извините. Не надо опять все сваливать на правильное проектирование. Правильное проектирование - это очень хорошо. И правильное тестирование - это тоже очень хорошо. Речь не идет даже о выборе какого-то компромисса: "нулевые ссылки позволяют лучше проектировать" или "нулевые сылки позволяют лучше тестировать" (в отличие, например, от случая динамическая типизация vs статическая типизация). Нулевые ссылки создают проблемы сами по себе, независимо от.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Январь, 2009 18:12 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Я согласен с тем, что указатели в текущих вариантах создают ряд проблем. И связано это в первую очередь с тем, что они недостаточно естественны (т.е. некоторые их свойства обусловлены исключительно техникой, но препятствуют выражению смысла).

Я не могу понять такую постановку вопроса применительно к NIL.
Какие проблемы они создают "сами по себе"? Проблемы того, что связь может быть не установлена? Ну так если она действительно может быть не установлена в предметке, что Вы предлагаете? Вводить от балды формализм, который это свойство исключит, а потом выламывать руки задаче, чтоб её под этот формализм запихать? Как при применении реляционной алгебры к задачам, выходящим за рамки по природе своей табличных?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Январь, 2009 18:18 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Владимир Лось писал(а):
Вот тока не надо говорить «что такого никогда не будет»... Это — самая мрачная фраза из моего опыта программирования! Когда заказчик, начальство или коллеги её произносят, у меня инстинктивно, пардон, все сфинкторы сжимаются и хочется со свечкой по углам обойти и святой водой окропить...


Воистину! Вон, и Ариан-5 упал от той же фразы (скорость ракеты никогда не будет выше вот этого-то).

А ещё мне нравится фраза: "ну и что что конструкция/модуль/класc/etc позволяет ей неправильно воспользоваться, мы то ведь не будем её так (неправильно) использовать!"

(чаще всего слышал при обсуждении архитектуры где было широкое использование void* , например в списках, в параметрах функций и проч. Ну и что, что сведения о типе теряются? Мы ведь не будем приводить к типу отличному от того что туда положим! Зато универсально!).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Январь, 2009 18:36 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Я не могу понять такую постановку вопроса применительно к NIL.
Какие проблемы они создают "сами по себе"? Проблемы того, что связь может быть не установлена? Ну так если она действительно может быть не установлена в предметке, что Вы предлагаете?


Я же сказал: "для модели, для которой отсутствие связи не артефакт - все хорошо". Проблемы начинаются с моделями, в которых отсутствие связи - артефакт. Вот, например, возьмем мою любимую базу данных и форму, которая из этой БД что-то отображает. В такой модели отсутствие связи с БД (нулевая ссылка) - артефакт. Ну нечего показывать этой форме без БД. Даже если вы захотите корректно обрабатывать ситуацию, когда с БД случилось что-то страшное, вы не будете это делать в форме (надеюсь такое проектное решение не вызывает вопросов?) Так зачем мне в форме иметь возможность получить нулевую ссылку на БД? Чтобы упасть с ASSERT'ом/NIL dereference/AV?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Январь, 2009 20:12 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Согласен. Но при чём тут NIL-ы сами по себе :)

Ну, можно попытаться обязать программиста всегда направлять ссылку на что-нибудь. Тогда вместо NIL будут подставлять заглушки, но в некоторых ситуациях понуждение устанавливать связь сразу может дисциплинировать. Как это оформить синтаксически в классическом ЯП без загромождения - трудно представить, ещё труднее сделать... В однородном языке типа Smalltalk можно представить себе, что при создании объекта все его поля-ссылки указывают на некие "пустышки". Т.е. тот же NIL, но он готов обработать (проигнорировать) любое сообщение. Что это даст - тоже непонятно.

Можно заменить семантику NIL с "ни на что не указывает" на семантику "ещё не инициализирован". Т.е. уже инициализированную ссылку нельзя превратить в NIL, его вообще явно нет в языке, он только неявно.

Дебри, дебри. Для борьбы с весьма редкой и не опасной ситуацией (она ведь локальна, не ведёт к разрушению, вылавливается вашими любимыми модульными тестами на раз, вместе с опечатками...).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Январь, 2009 23:49 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Согласен. Но при чём тут NIL-ы сами по себе :)


При том, что нет NIL'ов - нет проблем :)

Илья Ермаков писал(а):
Ну, можно попытаться обязать программиста всегда направлять ссылку на что-нибудь. Тогда вместо NIL будут подставлять заглушки,


Да, но согласитесь, что подстановка заглушки - более осмысленное действие, чем просто NIL ;) Более явное, как минимум.

Илья Ермаков писал(а):
но в некоторых ситуациях понуждение устанавливать связь сразу может дисциплинировать. Как это оформить синтаксически в классическом ЯП без загромождения - трудно представить, ещё труднее сделать...


Ой, да ладно. Вы там совсем со своим обероном белого света не видите. Можно даже минималистский синтаксис оберона не трогать - достаточно того, чтобы компилятор контролировал, что ссылочные поля вновь созданной записи явно инициализированы и не используются до инициализации (и сама запись не используется). Хотя со стороны синтаксиса сделать это более явно было бы неплохо (заодно с нормальной инициализацией массивов ;)

Илья Ермаков писал(а):
В однородном языке типа Smalltalk можно представить себе, что при создании объекта все его поля-ссылки указывают на некие "пустышки". Т.е. тот же NIL, но он готов обработать (проигнорировать) любое сообщение. Что это даст - тоже непонятно.


Не надо ничего игнорировать. Этим вы все плюсы идеи убьете на корню. Надо инициализировать осмысленными ссылками, причем лучше явно.

Илья Ермаков писал(а):
Можно заменить семантику NIL с "ни на что не указывает" на семантику "ещё не инициализирован". Т.е. уже инициализированную ссылку нельзя превратить в NIL, его вообще явно нет в языке, он только неявно.


Вы все усложняете ;) NIL просто нет. И все. Вместо NIL есть "что-то" с семантикой "связь может быть не установлена", и чтобы это "что-то" превратить в ссылку надо написать какой-нибудь гвард по аналогии с проверкой типа.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Январь, 2009 23:58 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Vlad писал(а):
Вот, например, возьмем мою любимую базу данных и форму, которая из этой БД что-то отображает. В такой модели отсутствие связи с БД (нулевая ссылка) - артефакт. Ну нечего показывать этой форме без БД. Даже если вы захотите корректно обрабатывать ситуацию, когда с БД случилось что-то страшное, вы не будете это делать в форме (надеюсь такое проектное решение не вызывает вопросов?) Так зачем мне в форме иметь возможность получить нулевую ссылку на БД? Чтобы упасть с ASSERT'ом/NIL dereference/AV?

Чё-т я не пойму, в чём конкретно проблема? NIL, в данном случае входит в пространство состояний вашего случая? Это - чётко обозначенное и осмысленное "значение"? С "навешанными" на него смыслами и реакциями элементов модели? Так в чём - таки вопрос и - "опасность" от такого NIL-а?

Тут скорее речь должна не о конкретном значении указателя "NIL" идти, а о значении "вне диапазона"...
В Си о таком даже смысла нет рассуждать. Практически во всем современных языках. Кроме тех, что обладают дескрипторной моделью представления объектов (да ещё и имеют поддержку от аппаратуры)... Но Эльбрус и Интел 432 приказали долго жить, а что-то приемлемого на горизонте не видать...
Меньшее зло - иметь такую поддержку со стороны системы времени исполнения... Но там начинаются огромные накладные расходы. Они меньше в языках без указателей и а ля Обероны, но тут уже возникает субъективный фактор...

Замкнутый круг!

На каждой итерации которого Vlad сходится со мной, или Geneipro - с Ильёй...

В конце, каждый остаётся удовлетворённым. Одни - ощущением за спиной силы мэйнстрима, другие - "математически обоснованными" правильностями выбранного пути...

А я, тем временем, ужасаюсь архитектурами Линуха и BSD и офигеваю от правильности эпиграфа (про дятла...) к первой главе Буча...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Январь, 2009 00:20 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Владимир Лось писал(а):
Чё-т я не пойму, в чём конкретно проблема?


Ох... :)

Владимир Лось писал(а):
NIL, в данном случае входит в пространство состояний вашего случая? Это - чётко обозначенное и осмысленное "значение"? С "навешанными" на него смыслами и реакциями элементов модели? Так в чём - таки вопрос и - "опасность" от такого NIL-а?


Ну давайте новыми словами. NIL - не входит в пространство состояний. И я не хочу его видеть в рамках моей модели. Мало того, я не хочу, чтобы кто-то другой "случайно" передал NIL на вход моей модели (и моя модель упала). Что тут непонятного?

Владимир Лось писал(а):
Тут скорее речь должна не о конкретном значении указателя "NIL" идти, а о значении "вне диапазона"...
В Си о таком даже смысла нет рассуждать. Практически во всем современных языках. Кроме тех, что обладают дескрипторной моделью представления объектов (да ещё и имеют поддержку от аппаратуры)... Но Эльбрус и Интел 432 приказали долго жить, а что-то приемлемого на горизонте не видать...


Ох куда вас понесло... Да, мир несовершенен :) Но я же не прошу многого, я не прошу никакой аппаратной поддержки, я всего лишь прошу убрать (а не добавить) NIL. Отрезать ненужное - это как раз в духе оберонов ;)

Владимир Лось писал(а):
Меньшее зло - иметь такую поддержку со стороны системы времени исполнения... Но там начинаются огромные накладные расходы. Они меньше в языках без указателей и а ля Обероны, но тут уже возникает субъективный фактор...


В том-то и дело, убирание NIL не требует никаких расходов. Всего лишь ломание искусственно созданных стереотипов ;)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Январь, 2009 00:30 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Собственно, вместо состояния NIL ("ни на что не указывает") состояние "ещё неинициализировано", ведущее к ошибке при попытке использования - я правильно понял, Вы это предлагаете? (я про это и говорил выше).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Январь, 2009 00:43 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Собственно, вместо состояния NIL ("ни на что не указывает") состояние "ещё неинициализировано", ведущее к ошибке при попытке использования - я правильно понял, Вы это предлагаете? (я про это и говорил выше).


Нет. Я предлагаю вообще избавиться от "ошибки при попытке использования". Нет состояния "ещё неинициализировано" для ссылки. Ссылка всегда инициализирована. Это контролирует компилятор (и реализовать это совсем не сложно).
Естественно, что для поддержки случая, когда "связь может быть не установлена" потребуется еще одна сущность. Но это будет не ссылка. Это будет что-то, что может быть приведено к ссылке только явно (как приведение типа).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Январь, 2009 00:53 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Vlad писал(а):
NIL - не входит в пространство состояний. И я не хочу его видеть в рамках моей модели. Мало того, я не хочу, чтобы кто-то другой "случайно" передал NIL на вход моей модели (и моя модель упала). Что тут непонятного?
Да уж, действительно - ОХ!

Vlad! Да Вы УЖЕ говорите о NIL, как о полноправном участнике Вашей модели! Вы уже его в свою модель ввели! Самим своим описанием своего же "нежелания видеть" и "получать о кого-нибудь"! :)
Vlad писал(а):
Но я же не прошу многого, я не прошу никакой аппаратной поддержки, я всего лишь прошу убрать (а не добавить) NIL. Отрезать ненужное - это как раз в духе оберонов ;)
Ну хорошо, а опишите мне тогда состояние "не имеет значения", "не инициализирован", "не определён"? ВВодить "доп поля" у "объектов ссылок"? Заключать соглашение о том, что в каждом типе будет своё "типизированное ПУСТО"?
Vlad писал(а):
В том-то и дело, убирание NIL не требует никаких расходов. Всего лишь ломание искусственно созданных стереотипов ;)
Ну да, ну да... "Бытие - это то, что есть, а небытие - это то, чего нет... Но того, чего нет, - быть не может. Следовательно, небытия нет..."


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Январь, 2009 01:10 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Владимир Лось писал(а):
Vlad! Да Вы УЖЕ говорите о NIL, как о полноправном участнике Вашей модели! Вы уже его в свою модель ввели! Самим своим описанием своего же "нежелания видеть" и "получать о кого-нибудь"! :)


Ох! Если бы говоря "я не хочу яблок" я бы получал от кого-нибудь яблоки, то с пропитанием было бы проще :)

Владимир Лось писал(а):
Vlad писал(а):
Отрезать ненужное - это как раз в духе оберонов ;)
Ну хорошо, а опишите мне тогда состояние "не имеет значения", "не инициализирован", "не определён"? ВВодить "доп поля" у "объектов ссылок"?


Это была шутка. Да, действительно, наряду с убиранием NIL'а потребуется сущность для описания состояния "связь еще не установлена".

Владимир Лось писал(а):
Заключать соглашение о том, что в каждом типе будет своё "типизированное ПУСТО"?


Ну это самое очевидное. Почему нет? Тем более, что прецеденты даже в мэйнстриме есть.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Январь, 2009 01:23 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Vlad писал(а):
Ох! Если бы говоря "я не хочу яблок" я бы получал от кого-нибудь яблоки, то с пропитанием было бы проще :)
Ух! Речь то, не о том, что на Ваше требование Вам именно это и давали, а о том, что Вам-таки НИЧЕГО не дадут. И это "ничего", вы должны как-то зафиксировать и отразить (кроме урчания в желудке, ессно)...
Vlad писал(а):
Да, действительно, наряду с убиранием NIL'а потребуется сущность для описания состояния "связь еще не установлена".
Но ведь мы рассуждаем о ссылках, а не о скалярных типах! У нас уже есть такое "значение" с таким смыслом - NIL!
ЗАЧЕМ ПЛОДИТЬ СУЩНОСТИ?
Vlad писал(а):
Ну это самое очевидное. Почему нет? Тем более, что прецеденты даже в мэйнстриме есть.
Они и правилам наследования и присвоения будут соответствовать?
Ото самое, чего НЕТ?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Январь, 2009 02:43 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Владимир Лось писал(а):
И это "ничего", вы должны как-то зафиксировать и отразить (кроме урчания в желудке, ессно)...


Я и предлагаю зафиксировать - отменить нулевые ссылки.

Владимир Лось писал(а):
Но ведь мы рассуждаем о ссылках, а не о скалярных типах! У нас уже есть такое "значение" с таким смыслом - NIL!
ЗАЧЕМ ПЛОДИТЬ СУЩНОСТИ?


Во-первых, смотрите тему :) Во-вторых, как вы сами заметили, NIL не работает для скалярных типов. Сущности не плодятся, вводится еще одна, совершенно ортогональная - признак "возможной неинициализированности". Вводится с конкретной целью - избежать нулевых ссылок там, где модель их не предусматривает. Для избежания ошибок, связанных с тем, что кто-то где-то забыл установить эту самую ссылку на что-то осмысленное.

Владимир Лось писал(а):
Vlad писал(а):
Ну это самое очевидное. Почему нет? Тем более, что прецеденты даже в мэйнстриме есть.
Они и правилам наследования и присвоения будут соответствовать?
Ото самое, чего НЕТ?


Вот в обероне есть понятие типа, а есть понятие массива. У вас не возникало желания наследовать массив? :) С признаком "возможной неинициализированности" все тоже самое. Это ортогональная к типам сущность.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Январь, 2009 09:59 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Реальный, осмысленный вариант - именно изменение семантики NIL, имхо.
А остальное - какая-то утопия по вытеснению неизвестно чего неизвестно куда. С моей удивлённой точки зрения.

Если нечто существует объективно, внешне к нашей формальной системе, то это ж очевидно ж, что любая риторика о том, что "мы избавились от этого" сведётся к вытеснению в какую-то другую форму... "Закон сохранения внешних понятий в формальной системе".


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 154 ]  На страницу Пред.  1, 2, 3, 4, 5 ... 8  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB