
Eto
11.09.2017
08:04:04
В JS такой метод называется some.

Andrey
11.09.2017
08:21:37
any - значит есть хоть что то

Oleg
11.09.2017
08:21:59

Andrey
11.09.2017
08:22:27
all vs any

Google

Dmitry
11.09.2017
08:23:57
@ned_ogl ну вот смотри. я сейчас с режимом betterC играюсь. Пытаюсь понять как его юзать. Как я понимаю 90% фобоса не пригодно для режима betterC т.е. то тут то там функции будут завязаны на GC. Я слышал, что mir вроде как GC-free т.е. должен вроде бы быть совместим с betterC. Вот что у меня получается при попытке сборки простейшего приложения:
момент, что-то вообще уже ничерта не собирается

Ned Ogl
11.09.2017
08:46:35
Что такое mir?

Dmitry
11.09.2017
08:50:11
эта либа GC-free
типа аналог фобоса для систем где GC не нужен
там уклон на математические функции

Maxim
11.09.2017
08:59:10
https://dlang.org/spec/betterc.html#consequences вот тут список всего, что не будет работать с betterC

Dmitry
11.09.2017
09:00:03
да это мы обсуждали уже...

Maxim
11.09.2017
09:00:04
в списке нет, но на данный момент не работают еще деструкторы структур и scope(exit), если функция возвращает значение
я это к тому, что GC-free — это необходимое, но не достаточное условие, чтобы код собирался с betterC)

Dmitry
11.09.2017
09:00:55
а...
я просто думал что это почти об одном и том же

Maxim
11.09.2017
09:02:02
но всегда можно использовать стандартную библиотеку Си)

Google

Maxim
11.09.2017
09:06:29
а нет, вру Struct deconstructors есть в списке, видимо, это поведение by design, очень жаль)

qwerty
11.09.2017
09:31:20
Что такое mir?
Generic Numerical Library for Science and Machine Learning. (из описания в репозитории)

Pavel
11.09.2017
09:36:00

Maxim
11.09.2017
09:36:27
значит, у него что-то не то работает)
сейчас в очередной раз проверил, как только функция возвращает какое-нибудь значение, компиляция падает с сообщением Error 42: Symbol Undefined __d_framehandler

Oleg
11.09.2017
09:53:57

Maxim
11.09.2017
09:56:07
но вот в свете 12-го пункта из ссылки выше появляется вопрос, что есть баг? то, что оно работает, когда возвращаемого значение нет, или то, что оно не работает, когда возвращаемое значение есть?)

Oleg
11.09.2017
10:20:38
посмотрим, может что-то прояснится...
вообще надеюсь, что это временный прикол (привязка scope(exit) и деструкторов структур к druntime)
кстати, Уолтер добавил возможность использовать версию D_betterC для проверки в каком режиме собирается сейчас код
https://github.com/dlang/dmd/commit/bac8aa59c75301c1c78c6296efddf5e4241e4a5e

Dmitry
11.09.2017
10:42:03
а как оно на практике то будет работать? по идее если флаг betterC то в режиме betterC если нет, то не в нем
или в чем фишка?

Maxim
11.09.2017
10:43:21
имеется в виду, что можно будет использовать version(D_betterC) { }
у меня вот есть маленькая библиотека для личного пользования, которой, в принципе, ничего не мешает собираться под -betterC, но для обработки ошибок она использует исключения
и можно будет для D_betterC сделать что-то типа getLastError(), а для онормального D оставить исключения

Dmitry
11.09.2017
10:53:05
а что почему betterC не восвместим с исключениями?

Maxim
11.09.2017
10:53:42
потому что им нужна сборка мусора

Dmitry
11.09.2017
10:54:29
а в какой момент? типа когда строку создают с ошибкой?

Maxim
11.09.2017
10:54:51
можно, конечно, поизвращаться и, возможно, заставить работать, но это не по фэншую)

Google

Dmitry
11.09.2017
11:06:30
ребят, посмотрите раздел про интерфейсы на предмет ошибок грубых http://dlang.ru/book#57d056c3
@maxfreck а ты говорил что у ~ есть тоже свой буфер?
просто тут в доках читаю: " Concatenation using the ~ operator is not affected since it always reallocates"
Also, one may use the .capacity property to determine how many elements can be appended to the array without reallocating
int [] x = [1,2,3];
writeln(x.capacity);
пишет: 3
Получается он место еще для трех элементов зарезервировал?

Maxim
11.09.2017
11:32:52
да, получается так
а, или нет, capacity-length — это количество

Dmitry
11.09.2017
11:35:44
никак не пойму от чего зависит capicity

Maxim
11.09.2017
11:36:21
от количества элементов в массиве

Dmitry
11.09.2017
11:36:51
ну для 3 три, а для миллиона — два миллиона?
я же правильно понимаю что это доп резерв. типа сколько зарезервировано
чтобы избежать новые аллокации

Maxim
11.09.2017
11:37:23
вот у меня что получилось:
Length 0 capacity 0
Length 10 capacity 15
Length 110 capacity 127
Length 10110 capacity 12283

Dmitry
11.09.2017
11:38:55
а кроме флага --gvc который показывает где *может* произойти аллокация есть флаги которые позволяют показать где она гарантированно будет

Pavel
11.09.2017
11:42:06
Вроде даже тут обсуждалось

Maxim
11.09.2017
11:42:33

Pavel
11.09.2017
11:42:45
т.е. идет 2,4,8,16,23,64,...,1024, и далее прибавляется фикс. число свободных ячеек.

Dmitry
11.09.2017
11:42:46
а как сгенерировать массив от 1 до 100?
так не работает:
int [] x = [iota(1,10)];
так тоже:
int [] x = [1..10];

Maxim
11.09.2017
11:43:12
x.length = 100;

Dmitry
11.09.2017
11:43:20
О!

Google

Dmitry
11.09.2017
11:43:43
Так, а если мне нужно чтобы не просто размер был выставлен, а он был уже в компайл тайм заполнен?

Maxim
11.09.2017
11:44:27
тогда ты можешь использовать статический массив)

Dmitry
11.09.2017
11:44:50
ну а в компайл тайм аналог iota возможен?

Maxim
11.09.2017
11:46:35
тут назревает вопрос зачем?

Dmitry
11.09.2017
11:47:02
а наверно я загоняюсь уже

Maxim
11.09.2017
11:48:30
я так понимаю, static foreach можно использовать)
тогда он тело foreach повторит foreach раз

Dmitry
11.09.2017
11:51:07
.sizeof Returns the array length multiplied by the number of bytes per array element
int [] x = [1,2,3];
writeln(x.sizeof);
Почему пишет 16?

Pavel
11.09.2017
11:52:24
А на [1,2] что напишет?

Admin
ERROR: S client not available

Pavel
11.09.2017
11:52:36
int это 4 байта и он выделил памяти для 4х элементов видимо.
Вот и получилось 16

Dmitry
11.09.2017
11:53:28
а типа как раз с учетом этого capacity?

Pavel
11.09.2017
11:53:47
Хм а для [1] что напишет? вангую что 8

Dmitry
11.09.2017
11:54:10
16

Maxim
11.09.2017
11:56:32
да не, это просто размер указателя и размера)

Pavel
11.09.2017
11:56:52
8+8
Наверное да
8 байт это 64 бита, как раз указатель

Dmitry
11.09.2017
11:57:34
ай блин для статических и динамических массивов это разные свойства

Google

Maxim
11.09.2017
11:58:19
вы, как бы спрашиваете, «а какой размер вот этой вот штуки, которая динамический массив?», и вам компилятор отвечает: 16 байтов: 8 — указатель на данные, 8 — текущий размер данных

Dmitry
11.09.2017
11:59:28
так если я получаю указатель на первый элемент:
x.ptr
как мне перейти ко второму элементу используя те же указатели

Pavel
11.09.2017
12:00:02
x.ptr + i * int.sizeof

Maxim
11.09.2017
12:00:19
не надо так делать)
могут в темном углу поймать и избить)

Dmitry
11.09.2017
12:03:08
а как надо?

Maxim
11.09.2017
12:05:44
использовать массивы)
но вообще, конечно, в D прокатит и такое *(arr.ptr+1)

Pavel
11.09.2017
12:07:44
и оно на int сдвинется ?

Maxim
11.09.2017
12:08:07
ага

Pavel
11.09.2017
12:08:15
хитро

Maxim
11.09.2017
12:08:26
ну так Pointer arithmetic же)

Pavel
11.09.2017
12:08:45
*(x.ptr + i * int.sizeof) так а тут он сдвинется на 4 инта ?

Maxim
11.09.2017
12:09:06
++ и +1 смещают указатель на размер размерности указателя, или как его назвать?)

Dmitry
11.09.2017
12:09:58
вот так кстати не катит:
writeln("-->", *(x.ptr++));

Maxim
11.09.2017
12:10:11

Dmitry
11.09.2017
12:10:13
а с +1 все работает

Pavel
11.09.2017
12:10:54
Не используй в общем это. Или иди в Си.

Maxim
11.09.2017
12:10:55
вряд ли D даст поменять arr.ptr, я бы на его месте не дал)