
Oleg
14.05.2018
17:31:06
получил - обработал - забыл
пока жив экземпляр структуры жив и этот буфер

Pavel
14.05.2018
17:31:47
Хм надо же это работает
static char[INET6_ADDRSTRLEN+1] str; вот такое поле в структуре делает бинарник меньше на 4к

Google

Pavel
14.05.2018
17:32:37
А если не static то больше на 4к получается. В чем магия?

Oleg
14.05.2018
17:33:20
static по сути не поле структуры
структура как пространство имён
такая перменная одна на поток
сколько экземпляров структуры ты не сделаешь
убираешь static и это становится полем класса и везде где ты его пользуешь добавляется расход на этот массив

Pavel
14.05.2018
17:35:10
Мда если описать массив больше на 20000, то все же бинарник пухнет. Значит там этот массив как-то располагается, просто больее оптимально нежели когда не static

Oleg
14.05.2018
17:36:45
ещё раз: static не дублируется нигде, по сути это глобальная переменная, только не глобальная, а в пространстве имён структуры
а не static будет в каждом экземпляре структуры

Pavel
14.05.2018
17:38:32
Ну у меня экземпляр то один создается в процессе работы
Поработает и уходит

Oleg
14.05.2018
17:39:00
на стеке?
стек же растёт во время работы программы, на бинарник не особо должно влиять

Google

Pavel
14.05.2018
17:41:28
О я понял вроде в чем дело
char[INET6_ADDRSTRLEN+1] str = void; вот так вообще почти нет оверхеда
Или что-то такое

Oleg
14.05.2018
17:42:49
не исключено, но странно

Denis
14.05.2018
17:47:09

Pavel
15.05.2018
12:51:09
Кто-то знает как работают исключения изнутри? Они как-то влияют на производительность?

Dark
15.05.2018
12:57:09
Я читал, что влияют негативно
Но как работают, досконально не знаю

Valeriy
15.05.2018
12:57:39

Denis
15.05.2018
12:58:09

Pavel
15.05.2018
12:58:25
?

Oleg
15.05.2018
13:00:42

Pavel
15.05.2018
13:02:21
Спасибо ?

Valeriy
15.05.2018
13:03:33
В плюсах если нет nothrow, при перемещении контейнера, например, элементы копируются, а не перемещаются.
А для МК вообще c -fno-exceptions компилят

Pavel
15.05.2018
13:03:41
И вот у меня зародилась мысль, может все же считать -betterC ненужным. Рантайм весом в 300кб особо никого не смущает. Но плюшек получается никаких.
Любая фишка вроде форматированного вывода или исключений сразу снижают производительность.

Stanislav
15.05.2018
13:05:00
Так их нет в беттерС же

Pavel
15.05.2018
13:05:12
Нет, а хочется

Google

Stanislav
15.05.2018
13:05:34
В си тоже нет ) люди обходятся как-то

Pavel
15.05.2018
13:05:38
Проблема в том что нельзя из рантайма взять какие-то некоторые функции, он либо весь вкомпилируется либо betterC
И вот вчера я натолкнулся на то что даже функция копирования одного слайса в другой a[0..2] = b[0..2] это функция из рантайма.

Oleg
15.05.2018
13:06:42

Pavel
15.05.2018
13:06:47
Но если его подключить то сразу возникнет соблазн пользоваться и другими плюшками - удобными исключениями, форматированным выводом, классами с ссылочной семантикой )

Dark
15.05.2018
13:06:59

Pavel
15.05.2018
13:07:24
С выходом поддержки minimal runtime можно плодить свои промежуточные рантаймы

Stanislav
15.05.2018
13:08:14
По форматированию текста - есть же быстрый snprintf

Dark
15.05.2018
13:08:51

Pavel
15.05.2018
13:09:33
Это очень похоже на си но с приятными плюшками. Например слайс можно перебирать через foreach

Oleg
15.05.2018
13:10:39
всё то что с шаблонами оно может и в betterC, насколько я понимаю

Pavel
15.05.2018
13:11:17
Да
Даже трейты из std.traits

Oleg
15.05.2018
13:13:41
вообще кто-то на каком-то D-conf тему задвинул, что можно половину runtime сделать шаблонным и тогда типа бинарник меньше, исполняется быстрее

Stanislav
15.05.2018
13:14:06

Pavel
15.05.2018
13:14:10
Да это было бы круто
Но я думал что ldc2 сам умеет анализировать, какие функции не используются и вырезать их. Но походу все же нет.

Google

Pavel
15.05.2018
13:14:54
Как только я убираю флажок -betterC программа сразу пухнет на 300кб на ровном месте

Oleg
15.05.2018
13:15:40

Pavel
15.05.2018
13:16:27
Мне кажется что делать функции шаблонами только чтобы они не включались в бинарь это костыль

Oleg
15.05.2018
13:16:52
они будут включаться
инстанцируется и включается может даже не в одном экземпляре

Pavel
15.05.2018
13:17:37
Нет они не инстанциируются если их не использовать

Oleg
15.05.2018
13:19:10
а, понял

Eto
15.05.2018
13:21:48

Admin
ERROR: S client not available

Oleg
15.05.2018
13:23:50
https://github.com/ldc-developers/ldc/releases/tag/v1.10.0-beta1
кстати говоря)

Pavel
15.05.2018
13:27:14
Ага быстро они, новые версии чуть ли не каждый месяц выходят

Oleg
15.05.2018
19:06:10
в vk админы сообщества вообще не огонь, как оказалось спустя пару лет, поэтому чисто больше для себя https://vk.com/dlang.news
но кому интересно добавляйтесь

Pavel
15.05.2018
19:13:48
Меня нет вк ?
Но зато я открыл еще одну офигенную грань D - он умеет форматировать строки в compile time

Dark
15.05.2018
19:19:37

Pavel
15.05.2018
19:19:56
ага
я тут захотел в логгер добавить чтобы печатались файл и номер строки

Google

Pavel
15.05.2018
19:20:26
Но испугался что он не сможет перевести номер строки в string
Оказывается можно не просто перевести, а отформатировать как хочешь через шаблон со всеми модификаторами, потом еще сконкатенировать с другой строкой и все это сделать constr char* и засунуть в printf

Oleg
15.05.2018
19:25:44

Pavel
15.05.2018
19:26:45
ага
Хехе, chompPrefix тоже работает в CT

Oleg
15.05.2018
19:32:31
в format передавать CT аргумент в виде строки вроде только недавно стало можно (он проверяет аргументы соответствуют ли строке формата), а обычным способом вроде давно уж работает
так что если строка формата известна, то, как мне кажется, такой вариант предпочтительней

White_116
15.05.2018
20:18:53
как правильно создать шаблон вида: R Caller(T,U,V){}. Чтобы можно было заюзать: int d = Caller(1, 2.0f, "sda");
Проблемка с типом возврата R. Как верно реализовть, при условии что тип возврата может менятся?

Denis
15.05.2018
20:22:02
R Caller(R, T,U,V){}
ну или вместо R вначале написать auto
оно тогда тип само выведет

Dark
15.05.2018
20:25:56
Он, видимо, хочет выводить тип статически

Valeriy
15.05.2018
20:26:05

Pavel
15.05.2018
20:26:24
R Caller(T,U,V, R){}
Можешь указать вручную если знаешь какой тип

Dark
15.05.2018
20:27:18

Valeriy
15.05.2018
20:27:45

White_116
15.05.2018
20:28:19
да я вот пытаюсь по востребованые типы через static if(is(R : type))
отработать.

Valeriy
15.05.2018
20:29:02

Igor
15.05.2018
20:29:41
return cast(R)value не катит?

Dark
15.05.2018
20:30:06

Igor
15.05.2018
20:30:33
трайт ReturnType