Russian Qt Forum
Ноябрь 22, 2024, 06:00
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
С/C++
>
C++ Object Token Library
Страниц: [
1
]
2
3
...
9
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: C++ Object Token Library (Прочитано 58836 раз)
ViTech
Гипер активный житель
Offline
Сообщений: 858
C++ Object Token Library
«
:
Февраль 04, 2020, 16:36 »
C++ Object Token Library
- это эволюция Unified Pointer Library из
этой темы
.
Основные изменения:
Терминология: pointer -> object token.
Все токены по умолчанию single, а не optional.
Удалён safe::weak_single.
Добавлен slim::unique (обёртка над std::unique_ptr).
Добавлены raw::weak, raw::unified (обёртки над голым указателем).
Функции для унифицированного доступа к токенам.
Traits.
Что-то ещё
.
Записан
Пока сам не сделаешь...
ssoft
Программист
Offline
Сообщений: 584
Re: C++ Object Token Library
«
Ответ #1 :
Февраль 06, 2020, 07:19 »
Несомненно, реализация стала более стройной и интересной). В том числе и понятие токена выглядит более гармонично, чем понятие указателя.
Программная реализация ассоциативных связей агрегации стала ближе к объектно-ориентированной модели.
После беглого просмотра осталось несколько вопросов:
- Токены реализуют только ассоциативные связи агрегации?
- Экземпляры, которыми владеют/ссылаются токены, всегда формируются в куче?
- Можно ли связать токены и произвольную переменную?
- Можно ли связать токены и произвольный параметр?
Записан
ViTech
Гипер активный житель
Offline
Сообщений: 858
Re: C++ Object Token Library
«
Ответ #2 :
Февраль 06, 2020, 11:47 »
Цитата: ssoft от Февраль 06, 2020, 07:19
- Токены реализуют только ассоциативные связи агрегации?
Текущий набор токенов предназначен в основном для выражения ассоциативных связей и написания программ в стиле ООП. Но можно применять и в функциональном программировании, с учётом понимания особенностей токенов. Кроме того, можно добавлять типы токенов не связанных с ассоциативными связями. У меня есть идеи для таких токенов, но пока у меня нет в них надобности, я их и не делал.
Цитата: ssoft от Февраль 06, 2020, 07:19
- Экземпляры, которыми владеют/ссылаются токены, всегда формируются в куче?
Сейчас владеющие токены да, только для объектов в куче. raw::weak/raw::unified могут ссылаться на объекты на стеке. Про владеющие токены для объектов на стеке нужно думать отдельно, чтобы поведение токенов было согласованным. Основные проблемы возникают при перемещении объекта.
Цитата: ssoft от Февраль 06, 2020, 07:19
- Можно ли связать токены и произвольную переменную?
- Можно ли связать токены и произвольный параметр?
Не совсем понял эти вопросы, хорошо бы привести примеры
. raw::weak/raw::unified можно связать со всем, что имеет адрес. Под свою ответственность разумеется
.
В целом, не нужно пугаться этих заумных слов про ассоциативные связи, агрегации, UML и прочее. Токены из CppOtl - это аналог умных и голых указателей С++, с расширенными возможностями. Поэтому в первой библиотеке Unified Pointer Library они указателями и назывались
.
Записан
Пока сам не сделаешь...
_Bers
Бывалый
Offline
Сообщений: 486
Re: C++ Object Token Library
«
Ответ #3 :
Февраль 06, 2020, 13:41 »
не очевидно, нафига нужна эта библиотека.
Записан
ViTech
Гипер активный житель
Offline
Сообщений: 858
Re: C++ Object Token Library
«
Ответ #4 :
Февраль 06, 2020, 13:53 »
Цитата: _Bers от Февраль 06, 2020, 13:41
не очевидно, нафига нужна эта библиотека.
Если вы прочитали всё документацию по ссылке и не нашли ничего полезного для себя, значит вам она не нужна. Что не отменяет факта её возможной полезности для других людей
.
Записан
Пока сам не сделаешь...
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: C++ Object Token Library
«
Ответ #5 :
Февраль 06, 2020, 16:14 »
Цитата: ssoft от Февраль 06, 2020, 07:19
В том числе и понятие токена выглядит более гармонично, чем понятие указателя.
Не сказал бы, лично к меня "токен" стойко ассоциируется со строками и синтаксическим разбором.
Цитата: ViTech от Февраль 06, 2020, 13:53
Что не отменяет факта её возможной полезности для других людей
.
Ну кол-во пользователей Вашей библиотеки всегда будет исчисляться простым натуральным числом
Это проблема ЛЮБОГО велика - да, возможно он решает насущные проблемы, и совсем не исключено что намного лучше чем занюханная стандартная библиотека. НО дальше этого он никуда не пойдет. Поясняю на живом примере:
Вот Вы стали бы использовать МОЙ код?
Думаю что НИКОГДА, даже без разницы чему он посвящен. Потому что Вы же пишете (намного) лучше, знаете (намного) больше и.т.п
Да и чисто объективно обычно лучше "подсмотреть идею" чем пристраивать посторонку. А вот std - да, использовать будут, даже если полный кал - но стандартный, и это мощнейшая отмазка, которой у Вас, увы, нет. Если человек работает в проекте вместе с Вами, то std код катит, а вот самопал - себе дороже. Не обязан человек его знать/учить, а вот (сраное) std - обязан.
Думаете кто-то рассуждает иначе? Вот
ssoft
относится к Вашей затее весьма позитивно и конструктивно, спросите у него задействует ли он эту либу в своем проекте? Конечно могу лишь предполагать, но думается ответ будет типа "все не так просто" - и это нормально
Записан
ViTech
Гипер активный житель
Offline
Сообщений: 858
Re: C++ Object Token Library
«
Ответ #6 :
Февраль 06, 2020, 16:50 »
Цитата: Igors от Февраль 06, 2020, 16:14
Не сказал бы, лично к меня "токен" стойко ассоциируется со строками и синтаксическим разбором.
Токен вообще много к чему приплетают
. В UML пишут про object token, оттуда и пошло.
Цитата: Igors от Февраль 06, 2020, 16:14
Ну кол-во пользователей Вашей библиотеки всегда будет исчисляться простым натуральным числом
Это проблема ЛЮБОГО велика - да, возможно он решает насущные проблемы, и совсем не исключено что намного лучше чем занюханная стандартная библиотека. НО дальше этого он никуда не пойдет. Поясняю на живом примере:
Вот Вы стали бы использовать МОЙ код?
Думаю что НИКОГДА, даже без разницы чему он посвящен. Потому что Вы же пишете (намного) лучше, знаете (намного) больше и.т.п
Да и чисто объективно обычно лучше "подсмотреть идею" чем пристраивать посторонку. А вот std - да, использовать будут, даже если полный кал - но стандартный, и это мощнейшая отмазка, которой у Вас, увы, нет. Если человек работает в проекте вместе с Вами, то std код катит, а вот самопал - себе дороже. Не обязан человек его знать/учить, а вот (сраное) std - обязан.
Думаете кто-то рассуждает иначе? Вот
ssoft
относится к Вашей затее весьма позитивно и конструктивно, спросите у него задействует ли он эту либу в своем проекте? Конечно могу лишь предполагать, но думается ответ будет типа "все не так просто" - и это нормально.
Использование сторонней библиотеки всегда риск. Эту библиотеку я делаю для себя. Мне важно, чтобы я мог использовать такую функциональность в проектах, в которых я принимаю участие. И мне не жалко поделиться этими наработками с другими. Чтобы показать, что на С++ можно писать вот так, с меньшими страданиями
. Если на её основе сделают что-то покруче, так на здоровье. Будут ли ей пользоваться другие, меня уже меньше волнует. Как говорится: моё дело предложить
.
Ну а пока напомню, что gsl::not_null<std::unique_ptr> до сих пор не работает. А на днях из gsl::not_null удалили конструктор перемещения (нашёл этот
pull request
). Похоже, у них своё видение not_null семантики. И
std::observer_ptr
в C++20 так и не вошёл, насколько я понял. И что-то я не вижу подвижек на этом поле в сторону выразительности умных и не очень указателей. Если кто знает такие - сообщайте.
«
Последнее редактирование: Февраль 06, 2020, 17:12 от ViTech
»
Записан
Пока сам не сделаешь...
ssoft
Программист
Offline
Сообщений: 584
Re: C++ Object Token Library
«
Ответ #7 :
Февраль 07, 2020, 10:09 »
Цитата: Igors от Февраль 06, 2020, 16:14
Не сказал бы, лично к меня "токен" стойко ассоциируется со строками и синтаксическим разбором.
Если я правильно понимаю вопрос), то токен объекта - это то с помощью чего можно обратиться к экземпляру. То есть в контексте программы в записи
Код:
int value = 1;
int - тип, 1 - значение, value - токен, с помощью которого можно осуществить доступ к значению 1. При этом в зависимости от места записи, value может являться свойством (property), параметром (parameter) или переменной (variable).
Цитата: Igors от Февраль 06, 2020, 16:14
Вот
ssoft
относится к Вашей затее весьма позитивно и конструктивно, спросите у него задействует ли он эту либу в своем проекте? Конечно могу лишь предполагать, но думается ответ будет типа "все не так просто" - и это нормально
Действительно, реализация мне интересна больше с академической точки зрения, но только потому, что я не разделяю идею использования аналога указателей в качестве токенов. Основной причиной считаю, что указатель является семантически неверным с точки зрения модели ООП. Но огромное количество разработчиков даже не думает об этом (не забивают себе мозг всякой ерундой
) - используют всё, что есть под рукой, совершенно не задумываясь об ассоциативных связях, согласованности и непротиворечивости объектно-ориентированной модели.
Тем не менее, C++ Object Token Library достаточно близка по виду к умным указателям std, при этом дополнительно решает ряд задач:
- корректно согласует модельное понятие агрегации shared, composite, none (shared, unique, weak) с технически механизмом продления жизни;
- обеспечивает гарантированную мультипликативность (single, optional);
- ликвидирует необходимость прямой работы с нативными указателями.
По виду указателя нельзя однозначно определить, что из себя он представляет - значение, массив, ассоциативная связь. Умные указатели std - это одно из частных решений для замены нативных, не всегда удобное, так как добавляет ряд свойств и ограничений применения (memory heap, optional и др.).
Реализация C++ Object Token Library добавляет механизмы управления такими свойствами, как (single/optional, продление времени жизни), но не такими как (thread safe, lazy/cow и т.д.).
Для тех кому важно, чтобы реализация программы как можно ближе соответствовала ее модели, эти примитивы могут быть весьма полезными.
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: C++ Object Token Library
«
Ответ #8 :
Февраль 07, 2020, 10:23 »
ssoft
Красиво заливаете, кажется, стоит посмотреь этого зверя
Записан
ViTech
Гипер активный житель
Offline
Сообщений: 858
Re: C++ Object Token Library
«
Ответ #9 :
Февраль 07, 2020, 10:56 »
Цитата: ssoft от Февраль 07, 2020, 10:09
Если я правильно понимаю вопрос), то токен объекта - это то с помощью чего можно обратиться к экземпляру. То есть в контексте программы в записи
Код:
int value = 1;
int - тип, 1 - значение, value - токен, с помощью которого можно осуществить доступ к значению 1. При этом в зависимости от места записи, value может являться свойством (property), параметром (parameter) или переменной (variable).
Самое интересное, что в UML токен объекта описан в общих чертах:
15.2.3.1 Activities (
UML
)
Цитировать
Tokens are not explicitly modeled in an Activity, but are used for describing the execution of an Activity. An object token is a container for a value that flows over ObjectFlow edges (some object tokens can flow over ControlFlow edges, as specified by the modeler, see isControlType for ObjectNodes in sub clause 15.4). An object token with no value in it is called a null token.
Т.е. токен объекта - это контейнер, и моделируйте/реализуйте его как хотите
.
Цитата: ssoft от Февраль 07, 2020, 10:09
Тем не менее, C++ Object Token Library достаточно близка по виду к умным указателям std, при этом дополнительно решает ряд задач:
- корректно согласует модельное понятие агрегации shared, composite, none (shared, unique, weak) с технически механизмом продления жизни;
- обеспечивает гарантированную мультипликативность (single, optional);
- ликвидирует необходимость прямой работы с нативными указателями.
По виду указателя нельзя однозначно определить, что из себя он представляет - значение, массив, ассоциативная связь. Умные указатели std - это одно из частных решений для замены нативных, не всегда удобное, так как добавляет ряд свойств и ограничений применения (memory heap, optional и др.).
Реализация C++ Object Token Library добавляет механизмы управления такими свойствами, как (single/optional, продление времени жизни), но не такими как (thread safe, lazy/cow и т.д.).
Для тех кому важно, чтобы реализация программы как можно ближе соответствовала ее модели, эти примитивы могут быть весьма полезными.
Спасибо за отзыв
.
Цитата: ssoft от Февраль 07, 2020, 10:09
Действительно, реализация мне интересна больше с академической точки зрения, но только потому, что я не разделяю идею использования аналога указателей в качестве токенов. Основной причиной считаю, что указатель является семантически неверным с точки зрения модели ООП. Но огромное количество разработчиков даже не думает об этом (не забивают себе мозг всякой ерундой
) - используют всё, что есть под рукой, совершенно не задумываясь об ассоциативных связях, согласованности и непротиворечивости объектно-ориентированной модели.
Я, кстати, тоже не разделяю идею использования аналога указателей в качестве токенов
. Об этом говорится в разделе
Access
. То, что сейчас токены внутри реализованы через указатели, не значит, что токены - тоже указатели. Хотя имеют их черты. Просто привожу аналогию с умными указателями std чтобы сразу было примерно понятно, что это за штуковины
.
«
Последнее редактирование: Февраль 07, 2020, 11:40 от ViTech
»
Записан
Пока сам не сделаешь...
_Bers
Бывалый
Offline
Сообщений: 486
Re: C++ Object Token Library
«
Ответ #10 :
Февраль 07, 2020, 11:50 »
Цитата: ViTech от Февраль 06, 2020, 13:53
Цитата: _Bers от Февраль 06, 2020, 13:41
не очевидно, нафига нужна эта библиотека.
Если вы прочитали всё документацию по ссылке и не нашли ничего полезного для себя, значит вам она не нужна. Что не отменяет факта её возможной полезности для других людей
.
конечно же
я не читал всю документацию по ссылке.
поскольку не имею привычки тратить время не пойми на что.
нормальные люди на титульном листе пишут зачем нужна библиотека,
с кратенькими примерами использования.
вот например:
https://github.com/zeux/pugixml
титульный лист - отправная точка, глядя на который сразу можно сразу понять:
зачем нужна эта вещь, и стоит ли вообще тратить время на более дательное ознакомление.
в твоём случае оформление убогое.
я решил, что проще спросить у тебя на прямую:
зачем нужна эта вещь?
как её предполагается использовать?
Записан
ViTech
Гипер активный житель
Offline
Сообщений: 858
Re: C++ Object Token Library
«
Ответ #11 :
Февраль 07, 2020, 11:59 »
Цитата: _Bers от Февраль 07, 2020, 11:50
конечно же
я не читал всю документацию по ссылке.
поскольку не имею привычки тратить время не пойми на что.
...
в твоём случае оформление убогое.
я решил, что проще спросить у тебя на прямую:
зачем нужна эта вещь?
как её предполагается использовать?
Вам низачем и никак.
Записан
Пока сам не сделаешь...
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: C++ Object Token Library
«
Ответ #12 :
Февраль 07, 2020, 14:55 »
Цитата: _Bers от Февраль 07, 2020, 11:50
в твоём случае оформление убогое.
Как быстро срабатывает рефлекс "велик, костыль"
Цитата: _Bers от Февраль 07, 2020, 11:50
зачем нужна эта вещь?
как её предполагается использовать?
Пример: до боли простая задача/ситуевина
Код
C++ (Qt)
struct
A
{
...
B
*
data
;
...
}
;
"A" при этом НЕ владеет data, не отвечает ни за его создание ни удаление. Естественно экземпляр A получает по рогам при стороннем удалении data, и это надо мучительно отслеживать. Чтобы автоматом иметь валидность data приходится объявлять его weak, а сами данные создавать shared, никаких др стандартных средств нет. В итоге получается/навязывается липовый shared, ведь никакого совместного владения этими данными не планировалось. Задумка автора (насколько я понимаю) создать такую серию вумных указателей чтобы "легализовать" такое (и др) отношения использлвания.
Цитата: ViTech от Февраль 06, 2020, 16:50
Использование сторонней библиотеки всегда риск. Эту библиотеку я делаю для себя. Мне важно, чтобы я мог использовать такую функциональность в проектах, в которых я принимаю участие. И мне не жалко поделиться этими наработками с другими. Чтобы показать, что на С++ можно писать вот так, с меньшими страданиями
. Если на её основе сделают что-то покруче, так на здоровье. Будут ли ей пользоваться другие, меня уже меньше волнует. Как говорится: моё дело предложить
.
Конечно, имеете полное право. Все-таки с "функциональностью", на мой взгляд, слабкувато. Вы обеспечиваете лишь создание, копирование и удаление новых вумных указателей, и.. по сути все. Др словами Вы вставили каждую "сущность" в свою красивую рамочку. А установка и разрыв "отношений" по-прежнему всецело ручная работа, и ее немало.
Кстати за истекшее время я реализовал свою "фишку" (в первую очередь для решения проблемы выше). У меня получилась статУя вообще без всяких указателей/токенов. Т.е. для примера выше члена data просто нет. Вместо этого используется обращение к глобальной "таблице связей" между объектами. Однако это уже за рамками темы
Записан
_Bers
Бывалый
Offline
Сообщений: 486
Re: C++ Object Token Library
«
Ответ #13 :
Февраль 08, 2020, 02:55 »
Цитата: Igors от Февраль 07, 2020, 14:55
Цитата: _Bers от Февраль 07, 2020, 11:50
в твоём случае оформление убогое.
Как быстро срабатывает рефлекс "велик, костыль"
оформление убогое, потому что с таким оформлением
нужно обстоятельно вникать в документацию этой библиотеки,
просто для того, что бы понять, зачем она вообще нужна.
причем тут какие то рефлексы?
выше я приводил пример качественно оформленной библиотеки pugixml.
на самом деле подобных примеров масса.
вполне себе велосипед:
https://github.com/USCiLab/cereal
Цитата: Igors от Февраль 07, 2020, 14:55
Цитата: _Bers от Февраль 07, 2020, 11:50
зачем нужна эта вещь?
как её предполагается использовать?
Пример: до боли простая задача/ситуевина
Код
C++ (Qt)
struct
A
{
...
B
*
data
;
...
}
;
"A" при этом НЕ владеет data, не отвечает ни за его создание ни удаление. Естественно экземпляр A получает по рогам при стороннем удалении data, и это надо мучительно отслеживать. Чтобы автоматом иметь валидность data приходится объявлять его weak, а сами данные создавать shared, никаких др стандартных средств нет. В итоге получается/навязывается липовый shared, ведь никакого совместного владения этими данными не планировалось. Задумка автора (насколько я понимаю) создать такую серию вумных указателей чтобы "легализовать" такое (и др) отношения использлвания.
1.
твой пример не иллюстриует как так получается,
что в какой то момент классу нужен доступ к ресурсу,
время жизни которого уже завершилось.
однако очевидно, что сама по себе такая ситуация - это какой то баг
2.
это - баг безотносительно к тому, использовал ты raw pointer, или связку shared/weak
допустим ты решил использовать невладеющий weak.
тогда у тебя на руках окажется невалидный weak, и как это тебе поможет?
тебе ресурс нужен, а его нет.
нужно звать программистов и
чинить программу
.
3.
ты написал про совместное владение так, словно думаешь,
будто бы область применения shared - когда предполагается неколько владельцев.
на самом же деле, область применения shared - когда нужно расшаривать ресурс между несколькими потребителями.
количество владельцев при этом не суть важно.
важно, что если есть несколько потребителей, значит нужен shared.
и он будет. в том или ином виде.
4.
я не понял, какое "такое" использование?
какая вообще проблема решается?
Записан
ViTech
Гипер активный житель
Offline
Сообщений: 858
Re: C++ Object Token Library
«
Ответ #14 :
Февраль 08, 2020, 11:08 »
Цитата: _Bers от Февраль 08, 2020, 02:55
оформление убогое, потому что с таким оформлением
нужно обстоятельно вникать в документацию этой библиотеки,
просто для того, что бы понять, зачем она вообще нужна.
Вот уж действительно открытие, что техническую документацию нужно читать
внимательно
. Что каждое слово там что-нибудь да значит, а не служит для описания красот и наполнения сцен, как в художественной. Например, про использование: если вам непонятна фраза "Using otn tokens is similar to using smart pointers from the C++ standard library." или вы не знаете, как пользоваться умными указателями стандартной библиотеки C++, то вам и токены вряд ли понадобятся.
Это первичная публикация бета-версии библиотеки. И прежде чем писать документацию для новичков, мне интересно мнение более опытных разработчиков.
Записан
Пока сам не сделаешь...
Страниц: [
1
]
2
3
...
9
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...