@dlangru

Страница 674 из 719
Dmitry
04.09.2018
12:42:33
Denis
04.09.2018
13:03:21
а в целом про их код что скажешь?
велосипеды-велосипедики

Dmitry
04.09.2018
15:02:17
Кто объяснит в чем преимущество отказа от классов? https://theartofmachinery.com/2018/08/13/inheritance_and_polymorphism_2.html

Denis
04.09.2018
15:03:14
классы не бесплатны - оверхед на разыменование указателей на методы в vtbl почти всегда есть

Google
Dmitry
04.09.2018
15:03:46
Засыпаю от его книги
Я тоже. Но зато доходчиво излагает.

Dark
04.09.2018
15:06:03
Я тоже. Но зато доходчиво излагает.
Это разве не взаимоисключающие параграфы?

Dmitry
04.09.2018
15:13:21
Это разве не взаимоисключающие параграфы?
Да нет. Просто можно пролистывать, что итак понятно и пройдено. Мне от Александреску книга зашла, надо ещё раз перечитать.

Igor
04.09.2018
15:19:38
те-же указатели

Denis
04.09.2018
15:20:06
не понял мысль

Valeriy
04.09.2018
15:20:27
классы не бесплатны - оверхед на разыменование указателей на методы в vtbl почти всегда есть
У классов основная цена — это аллокации в куче (GC), структуры создаются на стеке — это очень быстро. vtable по сравнению с этим — сущий пустяк



static foreach (enum string member; FieldNameTuple!VTable) { ... }

Мне кажется это более явным код делает

Кто объяснит в чем преимущество отказа от классов? https://theartofmachinery.com/2018/08/13/inheritance_and_polymorphism_2.html
Встатье описывается некая версия статического полиморфизма. Мне так показалось

Когда полиморфизм нужен только на этапе компиляции, то можно уменьшить оверхед за счёт шаблонов.

CRTP в плюсах используется часто. В D всё сильно упрощается за счёт миксинов и более сильных возможностей метапрограммирования

Google
Igor
04.09.2018
15:35:51
не понял мысль
Если есть возможность использовать структуры не моделируя из них наследование/полиморфизм то всё ок. Но часто оказывается что в той или другой форме приходится наследовать и делать это кастомно с помощью тех- же укащателей

Pavel
04.09.2018
16:15:30
классы не бесплатны - оверхед на разыменование указателей на методы в vtbl почти всегда есть
Всегда есть когда есть необходимость и нет в противном случае. При использовании любых подходов, кстати. Хоть со структурами хоть с чем.

Pavel
04.09.2018
16:19:28
"У классов основная цена — это аллокации в куче (GC)". Для любых классов, или для каких-то нет?

Оверхед на vtable?
Смотря как используется класс. Есть девиртуализация.

Oleg
04.09.2018
16:20:54
"У классов основная цена — это аллокации в куче (GC)". Для любых классов, или для каких-то нет?
если ты их руками не в куче выделяешь, то на такие не распространяется

Toha
04.09.2018
16:21:49
а структуры где хранятся?

NullSanya
04.09.2018
16:22:00
Шот мне все больше раст нравится. Нужна vtable - скажи явно, иначе ее не будет.

NullSanya
04.09.2018
16:48:12
Виртуал где?

Pavel
04.09.2018
16:49:21
у методов

NullSanya
04.09.2018
16:51:02
Не, в расте немного по другому

Если ты создаешь ссылку на трейт

Oleg
04.09.2018
16:59:01
https://godbolt.org/z/amxXlG
это ты к тому что есть оптимизация у ldc, где на стеке создаётся?

просто с телефона не удобно смотреть

Pavel
04.09.2018
16:59:51
это ты к тому что есть оптимизация у ldc, где на стеке создаётся?
Вроде аллокаций я не заметил, но там и аллоцировать нечего.

Pavel
05.09.2018
11:25:25
Ну есть же scoped создание класса на стеке

Dmitry
05.09.2018
11:39:45
А данные то они все равно в куче хранят

Google
Dmitry
05.09.2018
11:50:54
А разве нет? Блин есть все это в картинках?

Oleg
05.09.2018
11:51:15
думаю это было бы максимально бессмысленно

Dmitry
05.09.2018
13:12:15
шта?
А где у класса тогда данные лежат?

Oleg
05.09.2018
13:14:38
А где у класса тогда данные лежат?
смотря как ты его выделил

если на стеке, то и данные на стеке, если в куче, то и данные в куче

а какой иначе смысл?

и что кроме данных в классе? виртуальная таблица и тайпинфо

Igor
05.09.2018
13:28:31
Тайпинфо имхо вообще отдельно хранится. В инстансе только указатель на него. И да, всё хранится там куда положил, хоть в кучу хоть в стек.

Dmitry
05.09.2018
13:40:34
если на стеке, то и данные на стеке, если в куче, то и данные в куче
ты хочешь сказать что string будет на стеке данные хранить?

Igor
05.09.2018
13:41:26
Где скажут там и будет )

Dmitry
05.09.2018
13:42:03
точно? я думал что компилятор разные типы сложные на кучу кладет

Igor
05.09.2018
13:44:09
Стринг это указатель на начало, длина, и возможно размер для рещервирования

Куда показывает указатель не так важно

Dark
05.09.2018
13:46:40
Куда показывает указатель не так важно
Не важно, да. Но речь идет о том, будут ли вложенные типы класса, выделенного на стеке, выделяться на стеке?

Igor
05.09.2018
13:48:41
Ну я отвечал конкретно о строках, про остальное - думаю что будут выделяться так как их будет выделять конструктор

По умолчанию да, в куче

В gc куче

https://run.dlang.io/is/lSp1xa

Google
Pavel
05.09.2018
14:50:32
Если ты создаешь объект на стеке а у него в конструкторе написано someField = new SomeClass() то с чего б ему тоже на стеке разместиться. Это как-то слишком сложно для компилятора выходит.

Pavel
05.09.2018
14:51:28
Короче все что создается через new - оно создается в куче )

Мне кажется даже new int можно сделать

Valeriy
05.09.2018
14:52:12
А кстати, есть в D placement new? Есть scoped, который аллоцирует класс на стеке, но в итоге объект будет не исходного типа, а типа scoped!T

Pavel
05.09.2018
14:52:49
Ну есть emplace - это такая магическая штука которая позволяет размещать объект в выделенном ранее тобою куске памяти.

Valeriy
05.09.2018
14:52:55
Есть emplace но он не подходит для классов

Pavel
05.09.2018
14:53:08
Почему не подходит? Я видел пример в статье на вики

Valeriy
05.09.2018
14:53:21
Pavel
05.09.2018
14:54:30
https://wiki.dlang.org/Memory_Management#Mark.2FRelease

Admin
ERROR: S client not available

NullSanya
05.09.2018
14:55:32
Valeriy
05.09.2018
14:55:47
https://dlang.org/phobos/std_conv.html#.emplace

Oleg
05.09.2018
14:56:10
Мне кажется даже new int можно сделать
вернуть должно указатель

NullSanya
05.09.2018
14:56:32
Но он использует TypeInfo

Valeriy
05.09.2018
14:58:01
Pavel
05.09.2018
14:58:02
вернуть должно указатель
Это как-то противоречит тому что написано в вики статье, там возвращается просто ссыла на объект класса. Но проверять мне это сейчас лень.

Pavel
05.09.2018
15:02:04
а да, вернется int*

но главное что в куче)

Google
Valeriy
05.09.2018
15:08:52
Забавно, вот здесь пишут, что scope new планируется сделать deprecated, а пока работают вот такие штуки: @nogc C foo() { scope auto c = new C(); return c; } https://run.dlang.io/is/NCiCEZ

Pavel
05.09.2018
15:12:18
Вот такая конструкция - да, deprecated. Но есть еще шаблон scoped! который как раз пришел на замену

Igor
05.09.2018
15:12:23
бомба?

scope это же обещание не предавать ссылку наружу?

Valeriy
05.09.2018
15:14:28
scope это же обещание не предавать ссылку наружу?
@nogc позволяет сделать вывод, что объект размещён на стеке

Немного переделал https://run.dlang.io/is/llmopI я непонимаю как это может работать. Скорее всего UB. В D есть undefined behavior?

Igor
05.09.2018
15:18:00
оно даже с @safe компилится

https://run.dlang.io/is/0HUoQ3

имхо возвращает како-то статический инстанс

https://run.dlang.io/is/pjfySf

Valeriy
05.09.2018
15:28:23
имхо возвращает како-то статический инстанс
Мне не понятно что там происходит, потому что деструктор вызывается сразу после выхода из функции, т.е. объект не перемещается и это не rvo

Igor
05.09.2018
15:29:09
ага

Karbin
05.09.2018
16:12:48
раньше была такая штука https://dlang.org/spec/class.html#allocators

Denis
05.09.2018
17:52:52


Valeriy
05.09.2018
17:53:56
Вот я понимаю фанат D

Dark
05.09.2018
17:54:11
Миниатюра D и обратная совместимость

White_116
05.09.2018
19:55:39
Ребятки, подскажите, как правильно сформировать массив вида (byte[4]-длина текста, byte[]-текст) byte[] data; string Name = "Test "; data ~= cast(byte*)Name.length; // <-проблема. data ~= Name;

Denis
05.09.2018
20:04:34
В структуры оберни сразу понятнее станет

White_116
05.09.2018
20:07:55
struct streamfile { uint textSize; char* text; }

не получается перевести int в byte[4], делаю так data ~= (cast(byte*)&Name.length)[0 .. 4].dup; ругается на левостороннее значение

Denis
05.09.2018
20:33:58
https://dlang.org/phobos/std_bitmanip.html Endianness conversion

Страница 674 из 719