
Stepanos
12.12.2017
20:16:03
куда ето тулить? :) перед словом class?
не красиво же

Mike
12.12.2017
20:16:11

Oleg
12.12.2017
20:16:37

Google

Mike
12.12.2017
20:16:53
не красиво же
иметь и struct и class, между которыми менее 10% отличий - ИМХО куда более некрасиво ?

Oleg
12.12.2017
20:17:25
Мне вот надо
Чтобы быстро на уровне Си и удобно на уровне питона
А тебе может и не надо
И ты смысла не видишь

Mike
12.12.2017
20:19:38
куда ето тулить? :) перед словом class?
да)
А вообще я считаю что должно быть просто: есть статическое выделение памяти, а есть динамическое. статика в стеке, динамика - в куче
статика нужна внутри скопа, а динамика - чтобы куда-нить передавать
?

Oleg
12.12.2017
20:20:58
Просто по умолчанию обратное поведение

Stepanos
12.12.2017
20:21:25
https://habrahabr.ru/post/116363/
как на D такое делается? чтоб бьіла сущность какае-то, в которую можно кидать задачи и оно организовьівало в очередь по несколько потоков

Mike
12.12.2017
20:22:40
И ты смысла не видишь
ну я на сях под микроокнтроллеры несоклько лет всякую дич пишу... а последние пол года - на яве под линукс
и Dlang мне со стороны кажется золотой серединой между ними))) ? но глуюже копаю и всякие странные штуки всплывают ?

Oleg
12.12.2017
20:24:03

Google

Mike
12.12.2017
20:27:43


Stepanos
12.12.2017
20:28:40
ну для Java девов ето актуально, ибо не хочется заморачиваться таким
+ екзекютор можно использовать как самостоятельную сущность, либо же передавать во всякие там RxJava и другие посторонние либки чтоб рулить потоками централизовано либо делить по групам
а-ля Scheduler.io(), Scheduler.computation() и тд

Mike
12.12.2017
20:33:17
Для классов в этой ситуации нужна сериализация
хотите сказать, что если вычитать кусок данных по адресу экземпляра класса, то его соержимое НЕ будет соответсвовать тому что у вас в теле класса описано..??? ? это как так? зачем так?

NullSanya
12.12.2017
20:33:58

Stepanos
12.12.2017
20:34:19
есть инфа нормальная по ThreadScheduler, FiberScheduler...?

Mike
12.12.2017
20:34:56
Неа.
в сообщеньке ТРИ вопроса))))

Andrey
12.12.2017
20:35:17

NullSanya
12.12.2017
20:36:01

Stepanos
12.12.2017
20:37:53

Ievgenii
12.12.2017
20:43:42
Пруф?
http://rextester.com/FQGC22771
Вполне возможно, что он ее заИнлайнил

Andrey
12.12.2017
20:45:42
так это у тебя скопировалась структура

Ievgenii
12.12.2017
20:45:47
Нет
Деструктор 1 раз отработал
Если бы скопировало - было бы 2 раза

Andrey
12.12.2017
20:47:08
в этом примере она обязана скопироваться вроде как. просто соптимизировалось видимо

Google


Mike
12.12.2017
20:48:14
есть инфа нормальная по ThreadScheduler, FiberScheduler...?
кстати, ка краз вчера пытался понять как можно аккуратно рулить фибрами... н аглаза ничего не попалось, а что попалось - показалось совсем не тем что нужно
задача: использовать фибры вместо потоков (потому что прожорливость у них меньше)
В теле самой функции-фибры геммор только в натыкивание йелдов.. а вот снаружи - нужно же за ними следить, каждый по очереди перезапускать, каждому свои данные для работы подсовывать......
(как модель мысленного эксперимента рассматривался "высоконагруженный" хттп-сервер: если на каждый запрос отдельный поток генерить, то тормоза будут уже послде пары сотен [так на многочисденных форумах люди пишут], значит нужно запустить потоков {количество_ядер}+1 [так GNU иногда рекомендует] и в каждом запустить кучу фибр, которые уже и будут сами запросы обрабатывать. И, поскольку фибры можно "использовать повторно", то, значит, "входные данные" им надо неким указателем изначально скармливать, тчоб потом можно было новые данные "ресетнутой" фибре отдать ?и нужно следить какая фибра закончила чтобы ресетнуть её и новым запросом нагрузить. И ещё нужно следить за количеством "живых" фибр в каждом из потоков, чтобы новый запрос отдавать тому потоку, который менее загружен... т.е., фактически, нужен собюственный планировщик для единого адресного пространства и вытесняющей многозадачности ?я думал он в std уже есть [раз есть фибры и т.п.], но вот за ночь копания в доках так и не нашёл ничего подходящего...... [про vibe.d не надо мне говорить: 1) в курсе что он есть и типо именно так и устроен 2) задачка интересна скорее сама по себе, а не как продакшин-продукт 3) при первом знакомстве с документацией на vibe.d он чот не вызвал желания его вообще где-либо использовать ? ] )


Ievgenii
12.12.2017
20:49:19
Но все возможно

Andrey
12.12.2017
20:49:47
ну а как иначе, у структур семантика копирования

Ievgenii
12.12.2017
20:52:06
http://rextester.com/WVPXMQ71729
Адреса совпадают
Вот структуру я создал в одном скопе, а использую в другом
Так что можно...
И удалится она, соответственно, когда выйдет из внешнего скопа

Andrey
12.12.2017
20:53:49
выделилась в том же месте на стеке)

Ievgenii
12.12.2017
20:55:32
Суть вопроса была в следующем: можно ли возвращать структуру и не удалится ли она при завершении ее скопа

Ievgenii
12.12.2017
20:55:37
Я сказал, что можно
Показал пример
Конечно, это не обычная ситуация
И такое не нужно делать каждый день :)

Andrey
12.12.2017
20:57:04
структуру возвращасть естественно можно, ибо она копируется. я думал, вопрос в том, можно ли возвращать ссылку на структуру

Ievgenii
12.12.2017
20:57:05
Но если реализовывать генератор, то думаю что копирование тоже не произойдет, а будет создавать сразу во внешнем скопе
Ну ссылку не выйдет, скорее всего
Не уверен

Google

Ievgenii
12.12.2017
21:02:30
Но вот если хранить экземпляр структуры глобально
То она и не удалится до завершения программы
Да и деструктор у нее не вызывается

Pavel
12.12.2017
21:05:20

Mike
12.12.2017
21:05:21

Ievgenii
12.12.2017
21:09:49
Логично
Ссылку не даст
Вот интересно
Если нужно работать с большим количеством параметров

Admin
ERROR: S client not available

Ievgenii
12.12.2017
21:11:14
Пусть тех же интов
Что будет быстрее, каждый раз их копировать в структуре
Или единожды забить в класс и передавать по счылке
Скажем в одном объекте там 2000 интов
2000 свойств в одном объекте
Нужно будет потестить
Мне кажется тут структура будет проигрывать

Andrey
12.12.2017
21:12:55
структуру можно по ссылке передавать

Ievgenii
12.12.2017
21:13:06
Как?

Mike
12.12.2017
21:14:48
Если нужно работать с большим количеством параметров
опиши конкретнее случай — тупо передать в функцию кучу данных? думаешь есть разница в скорости доступа к структуре и к классу (по указателю)? я вот чот сомневаюсь ? косвенная адресация она и в африке косвенная адресация, а смещения компилятор заранее все высчитает

Google

Andrey
12.12.2017
21:16:10
Как?
struct Foo {}; void foo(ref Foo f) { ... }

Mike
12.12.2017
21:41:15

Andrey
12.12.2017
21:46:41

Mike
12.12.2017
21:50:33

Andrey
12.12.2017
21:53:39
скопипащу из книжки Александреску))
Структуры позволяют определять простые, инкапсулированные типы-
значения. Удобная аналогия – тип int: значение типа int – это 4 байта,
допускающие определенные операции. В int нет никакого скрытого со
стояния и никаких косвенных обращений, и две переменные типа int
всегда ссылаются на разные значения 1 . Соглашение о структурах ис
ключает динамический полиморфизм, переопределение методов, насле
дование и бесконечное время жизни. Структура – это преувеличенный
тип int.

NullSanya
12.12.2017
21:58:25
Книга очень хорошая, стоит ее почитать.

Andrey
12.12.2017
21:59:39
+1

NullSanya
12.12.2017
22:01:26
Кстати, а тут есть люди, умеющие в шаблоны плюсов?

Igor
12.12.2017
22:07:33
зачем И структуры И классы - структуры легковеснее, имеют детерминированное выполнение деструктора. Классы тяжеловеснее, по дефолту доступ через vtable, зато имеют фишки типа наследования, синхронизирования и т.д.
всё описано по ссылке приведенной выше (https://dlang.org/spec/struct.html)

Oleg
12.12.2017
22:33:25

NullSanya
12.12.2017
22:34:26

Oleg
12.12.2017
22:35:19
Тут, к сожалению, я не помогу (
Как это в D сделать знаю)

NullSanya
12.12.2017
22:38:25
Но надо на плюсах
Есть простая распаковка
Пытался переделать, но падает с исключением.

Oleg
12.12.2017
22:39:41
Можно подставить функцию, которая заменит один свой аргумент и передаст дальше в целевую функцию

NullSanya
12.12.2017
22:43:36

Ievgenii
13.12.2017
00:17:54

NullSanya
13.12.2017
00:22:05
Язык программирования D