@dlangru

Страница 233 из 719
Maxim
13.08.2017
12:15:14
но вообще, обсуждают они что-то типа разреженных матриц: у них есть огромное количество параметров, и в каждом случае (например, предпочтения каждого юзера) только несколько из них имеют ненулевые значения

Pavel
13.08.2017
17:43:06
Если в vibed приходит некорректный json с заголовком 'applcation/json', то можно как-то отловить ошибку? Не могу найти на како уровне, вайб пытается сам парсить и кидает исключение.

Oleg
13.08.2017
17:49:28
Pavel
14.08.2017
12:28:35
Когда я передаю структуру в аргументах одной функции, она копируется или как? Это получается медленнее чем передать ссылку на класс?

Google
Dmitry
14.08.2017
12:28:51
копируется

вроде можно поставить ref чтобы не копировалось

Pavel
14.08.2017
12:29:57
Вот да, получается в таком случае классы по любому будут работать медленее

Maxim
14.08.2017
12:31:40
надо глядеть в asm

Oleg
14.08.2017
12:37:05
что?

структура копируется — это медленно класс по ссылке передаётся всегда — это быстро

можно структуру передать по ссылке — это быстро

класс будет работать медленней структуры в местах вызовов методов

так как каждый метод класса в D виртуальный и необходимо осуществлять поиск по таблице

кроме final и private методов

private всегда можно считать final

они не ищутся по таблице, используется прямой указатель на них

Google
Oleg
14.08.2017
12:39:44
тоесть если в классе все методы final, то вполне на уровне со структурой должна быть скорость

Maxim
14.08.2017
12:50:39
мое любопытство удовлетворено: dmd по умолчанию честно пушит всю структуру в стек, даже если вызываемая функция внутри себя ее не меняет)

Pavel
14.08.2017
12:56:04
Maxim
14.08.2017
12:56:49
а смысл? можно просто final class сделать)

Oleg
14.08.2017
12:56:50
В общем буду везде использовать структуру и ref с ней
если позволяет логика архитектуры, то да

Pavel
14.08.2017
12:57:22
а смысл? можно просто final class сделать)
Я недавно делал бенчмарки и выяснил что класс создается в 10 раз медленнее чем структура.

Oleg
14.08.2017
12:57:30
а смысл? можно просто final class сделать)
даже final class будет выделяться в куче

а куча это сборщик, остановки мира и прочая накладная чепуха

Maxim
14.08.2017
12:58:23
а, ну так-то да, тогда нужно не забывать везде ставить ref, и помнить, что любой вызов может изменить структуру)

Oleg
14.08.2017
12:58:39
ref const Type?

Maxim
14.08.2017
12:58:56
как вариант)

Oleg
14.08.2017
12:59:07
void foo()(auto ref const Type bar)

Maxim
14.08.2017
12:59:32
сделать алиас на это)

Oleg
14.08.2017
13:00:25
D не поддерживает rvalue reference, следовательно метод void foo(ref int a) нельзя вызывать так foo(3+4), для этого он должен быть шаблонным и auto ref будет работать и с rvalue и с lvalue, для lvalue подставляя ссылку

ну и, думаю, оптимизация для rvalue будет реализовывать перемещение

так что это самый удобный и быстрый вариант, если не нужны виртуальные методы

Pavel
14.08.2017
13:03:08
Ну впринципе мне это и надо. Передал структуру в функцию, она ее подредактировала и вернула.

Главное чтобы они не копировались лишний раз

Oleg
14.08.2017
13:03:49
если ты просто передаёшь по ссылке, то ты можешь изменить поля и в точке вызова будет изменённое значение

Google
Oleg
14.08.2017
13:04:44
void foo(ref int x) { x *= 2; } void main() { int a = 10; foo(a); assert(a == 20); }

Maxim
14.08.2017
13:05:30
С точки зрения чистоты кода, конечно, решение сомнительное, но если во главе угла производительность, то можно и код с запашком практиковать)

Oleg
14.08.2017
13:05:58
фукнциональная чистота имеется ввиду?

лично я не вижу ничего зазорного использовать ссылки

Maxim
14.08.2017
13:06:43
Не, бытовая программистская)

Oleg
14.08.2017
13:07:05
и в чём аргументация подобного тезиса?

Maxim
14.08.2017
13:07:31
С подобным подходом можно наплодить такого, что потом поддерживать сложно

Pavel
14.08.2017
13:07:54
Я костылю все что только можно. Выкинул vibe.d, взял голый eventloop и написал свою урезаную реализацию парсинга http в 100 строк

Думаю и eventloop выкинуть и взять socket select + TaskPool

Oleg
14.08.2017
13:08:56
есть задача максимум скорости вырулить?

Pavel
14.08.2017
13:09:04
Да, так надо :)

Это код не для продакшена

Oleg
14.08.2017
13:09:31
стоит тогда посмотреть в сторону ldc и его флагов оптимизации

так же разного рода inline'ы

pure

nothrow

nogc

Google
Oleg
14.08.2017
13:10:18
всё это доп информация для оптимизатора

Pavel
14.08.2017
13:10:24
Да я пока пишу на dmd, потом обязательно начну компилять в ldc

Oleg
14.08.2017
13:10:37
и вообще betterC самый производительный код выдаст

но это уже не D в целом

Pavel
14.08.2017
13:11:12
betterC это какой-то флаг компилятора?

Oleg
14.08.2017
13:11:16
да

http://forum.dlang.org/thread/ixgtcyattenjrnqcoonv@forum.dlang.org

коротко — это то что в переводе — улучшенный C

рантайм выпиливается

как я понял

Admin
ERROR: S client not available

Oleg
14.08.2017
13:13:35
mir собирается с betterC, чтобы соревноваться с intel'овскими разными BLAS'ами

но лично сам не использовал, деталей не знаю

Maxim
14.08.2017
18:14:42
а кто какое расширение для D в vscode использует?

Pavel
14.08.2017
18:17:37
я использую dlang-vscode

Maxim
14.08.2017
18:22:58
Спасибо, заценю)

Pavel
14.08.2017
18:34:07
Посмотри тут выше где-то Дмитрий кидал ссылку на тему с форума где обещают божественный плагин который умеет все на свете.

И подсветка и проверка и автодополнение

Maxim
14.08.2017
18:46:21
как-то странно go to definition работает, в eclipse локальные пакеты подхватываются, а в dlang-vscode — нет

Dmitry
14.08.2017
19:02:55
К теме про стеки и кучи. А это все как-то можно наглядно визуализировать? Чтобы было понятно что куда кладется и как выглядит в реале. А то до сих пор картинка в голове не рисуется четкая.

Google
Andrey
14.08.2017
19:08:58
Всё что в теле функции - на стеке, остальное на куче (new, malloc). Но с учетом того что реально хранится. Для классов, на стеке ссылка. Для структур - вся структура. И т.д.

Pavel
14.08.2017
19:11:57
Я более менее понимаю как работает стек, а как работает куча - меньше

Andrey
14.08.2017
19:15:11
Куча это тупо всё что не стек. Там память выделяет операционная система (через new, malloc). Почитай про виртуальную память. Стек - это просто массив в адрессном пространстве процесса, new выделяет память в этом-же пространстве, но по запросу программы - динамически

Ievgenii
14.08.2017
21:54:09
Не вижу большого смысла с структур, которые все время передаются по ссылке

Так что-то да и можно забыть!

Ну не будет в проекте создаваться каждую секунду у тебя по 1К структур

Сделать пулл Обджект и с классами нормально работать

Без танцов и страха, что ты завтра забудешь реф и будет копирование

Имхо

Eto
14.08.2017
22:32:40
Небось и виртуальные методы используешь.

Ievgenii
15.08.2017
11:04:51
И они имеются...

Eto
15.08.2017
11:15:40
«Engines don't use the same types you have in JavaScript. As you probably know, all numbers in JavaScript are IEEE754 double precision floating point numbers, there's no specific available representation for integers. But engines, when they can predict you only use integers, can use a more compact and faster to use representation, for example, short integers. This kind of optimization is especially important for computation or data intensive applications.»

Maxim
15.08.2017
11:18:33
а кто в курсе извращений, на javascript еще не написали какую-нибудь операционную систему?

Eto
15.08.2017
11:20:40
Года 3-4 назад слышал про операционку на JS в браузере.

Ruslan
15.08.2017
12:25:04
на garrysmod написали

Pavel
15.08.2017
13:13:06
Кто-нибудь работал с memutils? Как там можно вырубить CryptoSafe ? Ну или вообще чтобы вот это не появлялось при сборке Enhanced memory security is enabled.

Dmitry
16.08.2017
06:36:56
Кстати, вот мы тут говорим о том объект размещен в стеке или куче. Я праивльно понимаю что ссылка на объект (его имя) всегда в стеке. А вот его данные или в стеке или в куче?

Maxim
16.08.2017
06:39:30
не на имя, а на данные)

в общем случае сслыка на объект — это переменная размера ptr_t, в которой хранится адрес памяти, где хранятся «данные» объекта

т.е. таблица виртуальных методов и значения переменных

Dmitry
16.08.2017
06:43:12
а эта ссылка на объект хранится где? В стеке или в куче?

Maxim
16.08.2017
06:43:32
подозреваю, что в стеке)

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