@dlangru

Страница 567 из 719
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
не исключено, но странно

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

Dark
15.05.2018
12:57:09
Я читал, что влияют негативно

Но как работают, досконально не знаю

Valeriy
15.05.2018
12:57:39
Кто-то знает как работают исключения изнутри? Они как-то влияют на производительность?
Да влияют. Для этого и нужен nothrow, что бы компилятор мог оптимизировать

Pavel
15.05.2018
12:58:25
?

Oleg
15.05.2018
13:00:42
Кто-то знает как работают исключения изнутри? Они как-то влияют на производительность?
не буду повторяться, что влияют, но вот это скину https://habr.com/post/279111/

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

не буду повторяться, что влияют, но вот это скину https://habr.com/post/279111/
Я кстати вчера натолкнулся на твой тикет в ldc по поводу __d_array_copy

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
Но если его подключить то сразу возникнет соблазн пользоваться и другими плюшками - удобными исключениями, форматированным выводом, классами с ссылочной семантикой )

Pavel
15.05.2018
13:07:24
Это хороший пример, почему betterC мертворожденный
Ну он так сказать является экстремальным видом очищенного от всего D

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

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

Dark
15.05.2018
13:08:51
Ну он так сказать является экстремальным видом очищенного от всего D
А зачем, если ни в std, ни собственно в языке его поддержки особой нет?

Pavel
15.05.2018
13:09:33
А зачем, если ни в std, ни собственно в языке его поддержки особой нет?
Ну я и без всего этого вполне пишу программу. Вся компайл магия есть, сами слайсы тоже есть.

Это очень похоже на си но с приятными плюшками. Например слайс можно перебирать через 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 сделать шаблонным и тогда типа бинарник меньше, исполняется быстрее

Pavel
15.05.2018
13:14:10
Да это было бы круто

Но я думал что ldc2 сам умеет анализировать, какие функции не используются и вырезать их. Но походу все же нет.

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

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
не буду повторяться, что влияют, но вот это скину https://habr.com/post/279111/
"Training a monkey would be easier" Классный слоган у автора.

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

Pavel
15.05.2018
19:19:56
ага

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

Google
Pavel
15.05.2018
19:20:26
Но испугался что он не сможет перевести номер строки в string

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

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
Он, видимо, хочет выводить тип статически

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)) отработать.

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

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