
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
static foreach (enum string member; FieldNameTuple!VTable)
{
...
}
Мне кажется это более явным код делает
Когда полиморфизм нужен только на этапе компиляции, то можно уменьшить оверхед за счёт шаблонов.
CRTP в плюсах используется часто. В D всё сильно упрощается за счёт миксинов и более сильных возможностей метапрограммирования

Google

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

Pavel
04.09.2018
16:15:30

NullSanya
04.09.2018
16:18:49

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

Oleg
04.09.2018
16:20:54

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

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

Pavel
04.09.2018
16:31:16

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
просто с телефона не удобно смотреть

Pavel
04.09.2018
16:59:51

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

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

Google

Oleg
05.09.2018
11:50:20

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

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

Pavel
05.09.2018
14:48:26

Google

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

Oleg
05.09.2018
14:50:54

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

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

Valeriy
05.09.2018
14:58:01

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

Oleg
05.09.2018
15:01:44

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
Немного переделал
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

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