@ProCxx

Страница 2074 из 2477
Constantine
21.05.2018
19:08:39
Просто есть минлевел СП, чтобы об этом знать)

Constantine
21.05.2018
19:09:55
не понял
а как?

напомню, циклы в конечных автоматах совершенно естественны

Google
Alex
21.05.2018
19:10:20
Просто есть минлевел СП, чтобы об этом знать)
Просто это не всем нужно, поэтому стенфорды и mit не шибко башляют в это направление

Max
21.05.2018
19:10:47
формально если у вас есть ребро A -> B, то пока живо состояние А, должно быть живо и состояние В это значит что А владеет В. а значит и владеет сильной ссылкой

не вижу проблем

Alex
21.05.2018
19:11:05
У стенфорда емнип медальки были
ну да, качественное есть в единичном)))

Constantine
21.05.2018
19:11:07
представьте, что А == В

для начала

Max
21.05.2018
19:11:19
в каком смысле равно?

один и тот же обьект?

Constantine
21.05.2018
19:11:28
одно и то же состояние автомата

петля

что там про сильные ссылки?

Alex
21.05.2018
19:12:29
одно и то же состояние автомата
хочу твою теорию на примере ассемблерного кода в gas синтаксисе

Google
Constantine
21.05.2018
19:12:32
дальше представьте себе минимальный конечный автомат для (ab)*

Max
21.05.2018
19:12:34
так ну автоматы автоматами но смартпоинтеры не из разряда автоматов а из разряда сильных-слабых ссылок. посему чтобы перейти от автомата к шаредам надо перейти к обьектам

Constantine
21.05.2018
19:13:12
struct automaton_state : public std::enable_shared_from_this<automaton_state> { /*удачки*/ };

Alex
21.05.2018
19:13:24
халтура

Max
21.05.2018
19:13:38
зачем состоянию такой интерфейс?

Constantine
21.05.2018
19:13:52
я вам прямую задачу ставлю

мне нужен конечный автомат

Max
21.05.2018
19:14:18
ты хочешь выразить переходы между состояниями смартпоинтерами на состояние-цель? это неверно

Constantine
21.05.2018
19:14:21
да

это не неверно

Max
21.05.2018
19:14:51
смартпоинтеры не реализуют переходы а реализуют владение

Constantine
21.05.2018
19:15:03
в Java я просто напишу class AutomatonState { Map<char, AutomatonState> edges; };

Max
21.05.2018
19:15:04
они из плоскости владения а не из плоскости автомата

Constantine
21.05.2018
19:15:07
напишите это на С++

через weak_ptr / shared_ptr

Max
21.05.2018
19:15:40
в Java я просто напишу class AutomatonState { Map<char, AutomatonState> edges; };
в стейтмашину таблицу переходов первая же мысль

Constantine
21.05.2018
19:16:27
у вас вечное хранение и неявная утечка памяти

вы храните недостижимые состояния

это структура владения, но вы не можете априорно ручками задать ей остов и не можете поэтому реализовать её на weak_ptr / shared_ptr

Google
Max
21.05.2018
19:18:09
стейтмашина владеет всеми обьектами состояний. и в таблице можно иметь ссылки на них спокойно. состояния будут жить

у вас вечное хранение и неявная утечка памяти
не вечное а пока жива стейтмашина

Constantine
21.05.2018
19:18:26
угу

вечное

я делаю 1млрд операций с вашей машиной и она падает, хотя содержит пустой автомат

Max
21.05.2018
19:19:00
если я храню список шаред поинтеров это тоже вечное хранение?

Constantine
21.05.2018
19:19:25
вечное хранение - это когда вы храните то, что никогда не может быть использовано

Max
21.05.2018
19:19:40
нет. вечное хранение это когда чтото храниться вечно

Constantine
21.05.2018
19:19:51
хорошо, называйте как хотите

давайте назовем это "неявная утечка памяти"

ну или придумайте любое слово

для "хранить то, что не может быть использовано, в неограниченном количестве"

Max
21.05.2018
19:21:14
вечное хранение - это когда вы храните то, что никогда не может быть использовано
это уже дело реализации. когда удаляются все ребра состояние должно уничтожаться. в бусте например не так ивершины могут не иметь ребер. потому что это уже дело кастомизации под конкретную задачу

Max
21.05.2018
19:22:26
ну так задача сведена к циклическим ссылкам, которые мы уже обсуждали

я ведь правильно понял?

Constantine
21.05.2018
19:22:42
нет, это простейший пример

у вас есть циклические ссылки между состояниями

по построению автомата

весь цикл может быть недостижимым

Google
Constantine
21.05.2018
19:23:37
и в действительности вы не умеете на shared/weak структурах описывать такое владение

потому что strong ref должны образовать остов из достижимых состояний

Max
21.05.2018
19:24:53
ну так они для этого и не предназначены. два обьекта не могут владеть друг другом. потому что они реализуют семантику владения. еще раз. не семантику состояний и переходов. если два обьекта владеют друг другом они один обьект.

Constantine
21.05.2018
19:25:23
зачем тогда weak_ptr вообще нужен

Max
21.05.2018
19:25:31
потому что strong ref должны образовать остов из достижимых состояний
куча умных слов. дело не в этом а в том что я выше написал

Constantine
21.05.2018
19:25:45
если у вас все окна - один объект

и все состояния конечного автомата тоже

а еще все сущности внутри одного потока

Max
21.05.2018
19:26:42
зачем тогда weak_ptr вообще нужен
чтобы иметь невладеющую ссылку на обьект. а раз ссылка не владеющая то она может быть пустой

Constantine
21.05.2018
19:27:17
вы понимаете, что поток связан отношением владею с текущим стеком, а текущий стек - с потоком?

Admin
ERROR: S client not available

Max
21.05.2018
19:27:35
что такое поток?

Constantine
21.05.2018
19:27:44
thread

Max
21.05.2018
19:27:51
да. вот что он такое

Constantine
21.05.2018
19:28:17
не знаю, не очень хочется давать определения

но я плохо представляю, как вне контекста потока будет выполняться код

или как поток будет выполняться без кода

так что они владеют друг другом, причем жестко

Max
21.05.2018
19:30:10
как минимум определений два. это либо отдельная нить выполнения. это больше логическое, абстрактное. поток инструкций, последовательных. либо это структура данных и логика которая управляет потоками ОС.

Constantine
21.05.2018
19:30:31
я веду речь про то, оберткой для чего является std::thread

Google
Max
21.05.2018
19:30:35
так что они владеют друг другом, причем жестко
пример. у меня класс А, в нем одно поле типа Б. кто чем владеет?

Assasin
21.05.2018
19:30:44
а почему текущий стек связан с потоком?

стек - это просто область памяти

Constantine
21.05.2018
19:31:09
но это не тот же пример

Assasin
21.05.2018
19:31:28
вот связь thread -> stack_ptr я вижу, а обратной - никак

Constantine
21.05.2018
19:31:49
объект Б может наблюдать, что не захвачен класс А, но в случае с потоком ни одна функция не может наблюдать, что текущего потока не существует

Max
21.05.2018
19:31:51
тот же. потому что структура которая управляет логическим потоком хранит указатель на стек. на деле агрегация

Constantine
21.05.2018
19:32:27
т.е. состояние потока нельзя убивать, пока есть функция, которая на нем выполняется

Max
21.05.2018
19:33:41
это отношение нельзя назвать владением. если ты едешь на автобусе, ты всегда будешь в автобусе. но ты не владеешь автобусом

Alex
21.05.2018
19:34:51
Поток по факту - это всего лишь контекст исполнения. Нет контекста, нет изменения состояния. task_struct по факту просто хранит состояние до следующего контекста и потоком называться не может. TSS фактически просто служебная структура

Max
21.05.2018
19:35:05
ибо ссылки владеющие указывают на один обьект. а тут потоки могут быть разные (как и автобусы разные)

Alex
21.05.2018
19:35:21
И да, без кода поток - не поток. Но это сказать так же тупо, как и что без регистров программа- не программа

Вывод с такой логикой- регистры владеют программой, а программа регистрами? далеко пойдете с такой логикой

Ulan
21.05.2018
19:37:28
Кидаешь туда кнопки "Пуск, Панель управления и чото там"

Max
21.05.2018
19:37:37
часто вижу такую логику. чем то похоже на контравариантность типов. когда выводы сделанные на основе ковариантных отношений переносятся на контравариантные

Alex
21.05.2018
19:38:22
хитрый хак от мудрецов, раньше называли казуистикой. к реальности такие теории как правило имеют отношение никакое)

Max
21.05.2018
19:39:01
например нужно добавить новую фичу. вместо расширения класса добавляется код во всю иерархию.

Igor
21.05.2018
19:39:32
эх, буст ван лав прикручиваю конан к либе, либе нужны boost.system и boost.property_tree, такое чувство что за ними тянется если не весь буст, то две трети точно..

Max
21.05.2018
19:39:58
boost.system точно ничего не тянет

а ПТ кстати точно нужен? просто там есть косяки лютые которые потом могут всплыть

Igor
21.05.2018
19:40:52
boost.system точно ничего не тянет
значит опакечен криво requires = ( "boost_package_tools/1.66.0@bincrafters/stable", "boost_config/1.66.0@bincrafters/stable", "boost_assert/1.66.0@bincrafters/stable", "boost_core/1.66.0@bincrafters/stable", "boost_predef/1.66.0@bincrafters/stable", "boost_winapi/1.66.0@bincrafters/stable" )

а ПТ кстати точно нужен? просто там есть косяки лютые которые потом могут всплыть
пока не разбирался, в требования к сборке он вообще заявлен не был, но под капотом используется

Страница 2074 из 2477