OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 14 Декабрь, 2019 15:28

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




Начать новую тему Ответить на тему  [ Сообщений: 54 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Случаи из жизни/практики.
СообщениеДобавлено: Пятница, 27 Сентябрь, 2019 09:44 

Зарегистрирован: Пятница, 20 Июль, 2007 17:26
Сообщения: 700
Откуда: Псков
Есть вот это:
https://ru.wikipedia.org/wiki/%D0%9F%D1 ... 1%8B%D1%85


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Случаи из жизни/практики.
СообщениеДобавлено: Вторник, 01 Октябрь, 2019 11:36 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1450
М-да, страничку начинают заполнять сторонние темы... :)
Я свои сообщения буду цветом выделять.

Очередной хинт - архитектурного плана.
Вообще, после АО и QNX я убедился, что (по слогану QSSL ) "architecture DOES matter". И это (способность к разработке хороших архитектурных решений) многократно перевешивает "вкусности" конкретного языка.


Так вот. Очередная "мАксима":

ЕСЛИ У ВАС ПОЯВИЛОСЬ ЖЕЛАНИЕ/"НЕОБХОДИМОСТЬ" СДЕЛАТЬ МЬЮТЕКС РЕКУРСИВНЫМ, ТО ВЫ СДЕЛАЛИ НЕПРАВИЛЬНУЮ АРХИТЕКТУРУ.
ОБЯЗАТЕЛЬНО ПЕРЕПРОЕКТИРУЙТЕ ЕЁ ЧАСТЬ ИЛИ ВСЮ!


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Случаи из жизни/практики.
СообщениеДобавлено: Вторник, 01 Октябрь, 2019 17:25 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2318
Откуда: Россия, Томск
А что такое рекурсивный мьютекс?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Случаи из жизни/практики.
СообщениеДобавлено: Вторник, 01 Октябрь, 2019 17:58 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1450
Александр Ильин писал(а):
А что такое рекурсивный мьютекс?
Это - который можно повторно (и - больше раз) залочить/разлочить из того же потока, в котором он уже был залочен.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Случаи из жизни/практики.
СообщениеДобавлено: Вторник, 01 Октябрь, 2019 20:18 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3126
Откуда: Астрахань
Это не бинарный семафор, что ли? :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Случаи из жизни/практики.
СообщениеДобавлено: Вторник, 01 Октябрь, 2019 21:40 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2318
Откуда: Россия, Томск
Wlad писал(а):
Александр Ильин писал(а):
А что такое рекурсивный мьютекс?
Это - который можно повторно (и - больше раз) залочить/разлочить из того же потока, в котором он уже был залочен.
То есть, стандартный мьютекс Windows?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Случаи из жизни/практики.
СообщениеДобавлено: Среда, 02 Октябрь, 2019 00:59 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1450
Александр Ильин писал(а):
То есть, стандартный мьютекс Windows?
Понятия не имею. Стараюсь как можно меньше с ней соприкасаться в работе, кроме случаев вынужденного (и неизбежного) пользования средств разработки для микроконтроллеров. :)
Если мьютексы там такие "по умолчанию", тогда - всё ещё намного хуже, чем я смел предположить...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Случаи из жизни/практики.
СообщениеДобавлено: Четверг, 03 Октябрь, 2019 08:33 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1133
Откуда: СССР v2.0 rc 1
Мьютекс по определению захватывается и освобождается последовательно парно.
Если захватывается повторно (и уже не важно -- может быть и рекурсивно) -- это точно семафор.
Хотя, если используется рекурсия, логика подсказывает, что должен быть создан новый экземпляр класса со своим собственным мьютексом. (это после годового использования golang на работе -- есть в нём много странностей, и как я убедился -- в частности, не нужны каналы).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Случаи из жизни/практики.
СообщениеДобавлено: Пятница, 04 Октябрь, 2019 00:33 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1450
prospero78 писал(а):
Мьютекс по определению захватывается и освобождается последовательно парно.
Если захватывается повторно (и уже не важно -- может быть и рекурсивно) -- это точно семафор.
Хотя, если используется рекурсия, логика подсказывает, что должен быть создан новый экземпляр класса со своим собственным мьютексом. (это после годового использования golang на работе -- есть в нём много странностей, и как я убедился -- в частности, не нужны каналы).
А ж - пломбы в зубах опять заныли...
Я - не пойму. Может у меня - какое косноязычие образовалось?
Меня немцы на моём мегаужасающем (типа) аглицком прекрасно в эту сторону (про рекурсивные мьютексы) поняли и уже (через бурное обсуждение между собой) начали перепроектировать архитектуру (приходят - языками цокают и пальцы большие вверх показывают), а русскоговорящие коллеги, почему-то начинают "в эмпириях витать"...
Отчаянье берёт. Фрицы сразу начинают присматриваться-прислушиваться и, после дня-трёх, бурного междусобойчика, как оглашенные начинают всё кромсать-переделывать, а тут - опять болото ментальной писькометрии начинается...

После почти месяца здесь, начинаешь понимать, почему Пётр сюда народ на учёбу и "пожить" гонял...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Случаи из жизни/практики.
СообщениеДобавлено: Пятница, 04 Октябрь, 2019 00:48 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1450
Хотел тут с Томасом Фраем пересечься (или - с кем-то из швейцарцев, до Цюриха - 2.5 часа на машине). Но он - слишком поздно ответил - и у меня уже под конец этой и на следующей неделе - "дурдом"-запарка по расписанию и планам...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Случаи из жизни/практики.
СообщениеДобавлено: Пятница, 04 Октябрь, 2019 07:12 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1133
Откуда: СССР v2.0 rc 1
Прежде чем что-либо шкодить:
1) Сначала надо договориться о понятиях
2) Когда у всех будет единое смысловой поле -- можно задавать вопрос "а что мы собственно хотим? "
3) После ответа на вопрос выше -- задать следующие три вопроса:
3а) Чем это сделать?
3б) Как это сделать?
3в) Почему "это" лучше сделать "этим" методом "как", а не иначе?
Туда ещё надо бы пунктики про последовательность, контроль, и ответственность включить, но без первых трёх (имхо) -- делать что-либо смысла нет.

Вы уж простите ворчливого старикашку, но вот вам определение мьютекса: https://ru.m.wikipedia.org/wiki/%D0%9C%D1%8C%D1%8E%D1%82%D0%B5%D0%BA%D1%81


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Случаи из жизни/практики.
СообщениеДобавлено: Пятница, 04 Октябрь, 2019 09:15 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 96
Откуда: Russia
И чем помешали рекурсивные мьютексы?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Случаи из жизни/практики.
СообщениеДобавлено: Пятница, 04 Октябрь, 2019 10:31 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1450
Sergej Durmanov писал(а):
И чем помешали рекурсивные мьютексы?
Я же написал выше.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Случаи из жизни/практики.
СообщениеДобавлено: Пятница, 04 Октябрь, 2019 12:08 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 96
Откуда: Russia
А есть гарантия, что программист, по каким-либо причинам, вместо защищенного интерфейсного метода не обратится к внутреннеему незащищенному методу? Для оберонов, где инкапсуляция несколько подтекает, так как все сущности полностью прозрачны друг для друга, это достаточно актуально, для дельфи тоже, причем там есть хак, который позволяет в другом модуле получить в полное распоряжение и приватные члены класса...
В общем, не является ли борьба с рекурсивными мьютексами, просто борьбой ради борьбы?
Кстати, в а2 есть рекурсивные блокировких


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Случаи из жизни/практики.
СообщениеДобавлено: Пятница, 04 Октябрь, 2019 12:19 

Зарегистрирован: Пятница, 20 Июль, 2007 17:26
Сообщения: 700
Откуда: Псков
Думаю не все (я к примеру :) "опускаются" в своей повседневной деятельности до мьютексов на низком уровне, так что в помощь придётся призвать книги типа "Advanced Programming in the UNIX Environment" Стивенса (есть перевод) или David R. Butenhof, Programming with POSIX Threads. и т.д. и т.п.
Цитата (слегка урезанная) из второй книги:
"Recursive mutexes are primarily useful for converting old code where it is difficult
to establish clear boundaries of synchronization ... I have never seen a situation
where recursive mutexes were required to solve a problem, but I have seen many
cases where the alternate (and usually “better”) solutions were impractical. Such
situations frequently lead developers to create recursive mutexes, and it makes
more sense to have a single implementation available to everyone. (But your code
will usually be easier to follow, and perform better, if you avoid recursive
mutexes.)"

Свой же опыт использования "высокоуровневых" "мьютексов" в виде так называемых блокировок (LOCK) ( в том числе рекурсивных), в многопользовательской, многозадачной среде (MUMPS) не позволяет принять столь категоричную максиму в части "неправильная архитектура".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Случаи из жизни/практики.
СообщениеДобавлено: Пятница, 04 Октябрь, 2019 13:14 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1133
Откуда: СССР v2.0 rc 1
А я с цитатой согласен. Жёсткое отрицание не вводится, но настоятельно рекомендуется не лезть вперёд батьки в пекло.
Как по мне -- автор похлебал легаси на производстве ложкой достаточного размера.
Собственно, легаси потому и возникает, что в ходе эксплуатации ПО напрополую используются костыли. Вроде, дешёвый технический долг, но он есть.
Самые страшные потери те, которых мы не замечаем.
Самое дорогое то, что самое простое.
Вот и получается, что приходится мириться с мамонтами в виде их экскрементов. Но лучше не надо. Если получится.

--

Надеюсь правильно понял пассаж про сокрытие в Обероне.
Если понял правильно, то считаю, что реализация сокрытия в рамках модуля в Обероне сделана правильно.
Единица сокрытия МОДУЛЬ, а не тип. Ну, и в плане тестирования, имхо -- удобно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Случаи из жизни/практики.
СообщениеДобавлено: Пятница, 04 Октябрь, 2019 14:55 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3126
Откуда: Астрахань
Единица сокрытия - МОДУЛЬ.
К сожалению, некоторые (в частности, Бертран Мейер) думают по-другому.
В С++ наконец-то к 20-му году сообразили вводить модули.
Насколько я понимаю, по аналогии с Go.
Но они там вообще туго соображают.
В том же 20-м стандарте вводят, наконец-то, математические константы в стандарт...
Блин! Не прошло и 40 лет!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Случаи из жизни/практики.
СообщениеДобавлено: Пятница, 04 Октябрь, 2019 17:20 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1133
Откуда: СССР v2.0 rc 1
В Go, как в испорченном Обероне, модули тоже подпортили.
Например, секция импорта в каждом модуле -- индивидуальная. Но, если модули в одном пакете (читай, каталоге) -- то один модуль может обратиться к приватной переменной в другой модуль.
Если же речь идёт об экземплярах объекта, при чём эти экземпляры представлены интерфейсами, то даже в рамках одного пакета -- экземпляр интерфейса не позволяет залезть в кишки своей туши.
И какбэ, это непонимаемое мною решение)))

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

И экспорт осуществляется, если сущность называется с большой буквы. Я понимаю, что это помогает однообразию, но такая манера экспорта БЕСИТ.
Вот и думайте, коллеги, а точно ли в Обероне сокрытие плохо сделано?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Случаи из жизни/практики.
СообщениеДобавлено: Пятница, 04 Октябрь, 2019 18:05 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 96
Откуда: Russia
Инкапсуляция на уровне модуля вполне хорошее решение для процедурного Оберона, но когда мы добавляем ооп, то модульной инкапсуляции катастрофически мало.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Случаи из жизни/практики.
СообщениеДобавлено: Пятница, 04 Октябрь, 2019 18:45 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3126
Откуда: Астрахань
Ну, естественно тут возникает проблема уровней закрытия.
Но, на мой взгляд она во многом привносится стремлением разработчиков сделать умолчания при принципу С++: все, что не запрещено - разрешено.
Если умолчания вообще запретить, или сделать по принципу: все, что не разрешено - запрещено, - то проблем не должно быть.
Сделай ты явные обязательные модификатора уровня доступа - от многих ошибок избавишься.
Естественно, более вложенный доступ не должен быть более открыт, чем внешний.
Если класс локален в модуле, то его паблики должны работать только для модуля, а не для пакета или для всей программы.
На мой взгляд, должны быть такие классы уровней доступа:
1. Вся программа
2. пакет (несколько модулей)
3. модуль
4. класс
5. метод/функция/процедура
Если для всего этого есть слово, которое обязательно указывается - какие проблемы?


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

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


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

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


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

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