
Maxim
22.03.2017
15:53:09
в том, что размер union никогда не будет меньше, чем размер буфера, в который читается, он будет либо такой же, либо больше

Oleg
22.03.2017
15:54:36
я как раз об обратном говорил

Maxim
22.03.2017
15:54:56
а, ну тогда извини, не понял)

Google

Maxim
22.03.2017
15:56:03
в общем, по большому счету, да, отказ от явного ууазания размеров областей памяти делает программы более надежными, но требует иногда более сложных подходов к разработке)

Oleg
22.03.2017
15:56:24
вот пример с receive мне кажется настолько странным, что ппц

Pavel
22.03.2017
15:57:03

Oleg
22.03.2017
15:57:05
для меня он прям естественный

Maxim
22.03.2017
15:57:49
void — безразмерный тип, даже представить не могу, чем мог бы быть void[]

Oleg
22.03.2017
15:58:01

Pavel
22.03.2017
15:58:12
Ну так в документации метод receive как раз его принимает на вход :)

Oleg
22.03.2017
15:58:41
некоторые вещи с void[] сделать неудобней чем с ubyte[] потому что void[] всё равно для выполнения этих вещей нужно кастовать к ubyte[]

Pavel
22.03.2017
15:59:08
А как бы это делалось в C++? Там понятнее?

Oleg
22.03.2017
16:00:14
не только в документации, но и в коде (как ни странно)

Pavel
22.03.2017
16:01:31
В общем на таком простом деле как чтение из сокета (казалось бы) я завяз =(

Google

Oleg
22.03.2017
16:02:57
можно, кстати в одну строку делать чтение структуры
ну или в структуру
cast(void[])((&obj)[0..1])
вроде так
так... 1 сек
массивы же к void[] кастуются сами?
import std.stdio;
void filldata(void[] arr)
{
(cast(int[])arr)[0] = 12;
(cast(int[])arr)[1] = 34;
}
struct X { int a, b; }
void main()
{
X x;
filldata((&x)[0..1]);
writeln(x);
}
тоесть ещё проще

Pavel
22.03.2017
16:09:54
[0..1] это получается что мы адресуем одну единицу данных типа X ?

Oleg
22.03.2017
16:10:12
это срез с 0 по 1 элемент
тоесть мы берём указатель на x и работаем с ним как с массивом

Pavel
22.03.2017
16:11:10
Как с массивом элементов X ? Или массив байтов

Oleg
22.03.2017
16:11:22
как массив элементов X

Pavel
22.03.2017
16:11:40
понял

Oleg
22.03.2017
16:11:45
но стиль с union как-то проще
ну, всмысле наглядней чтоль
@chebotarevp а что, если не секрет, ты читаешь структурой из сокета?
и endianless сохраняется ли?

Pavel
22.03.2017
16:17:56
https://www.ietf.org/rfc/rfc1928.txt я вот это начал реализовывать
Входящее сообщение это struct. Как быть с сообщениями динамической длины я пока не думал еще ;)

Google

Pavel
22.03.2017
16:19:15
> Входящее сообщение это struct.
Не только входящее, но и исходящее. То есть потом я буду писать структуры в сокет тоже.

Oleg
22.03.2017
16:21:28
структуры с каким содержанием?
+----+------+------+----------+
|RSV | FRAG | ATYP | DST.ADDR |
+----+------+------+----------+
| 2 | 1 | 1 | Variable |
+----+------+------+----------+
снизу это кол-во байт на поле?

Pavel
22.03.2017
16:30:03
Да

Oleg
22.03.2017
16:30:25
тогда спешу огорчить, что так может и не сработать
и скорее всего не сработает

Pavel
22.03.2017
16:30:44
Почему? Из за того что структуры не мапятся на память плотно?

Oleg
22.03.2017
16:31:10
по сети принято bigEndian, а intel это littleEndian

Pavel
22.03.2017
16:31:34
Ну, я думаю эта проблема решаема
В крайнем случае я могу у стурктуры просто сделать метод .receiveFromSocket()
Где вручную все прочитать.

Oleg
22.03.2017
16:32:11
кстати говоря
я вот сейчас понял, что структурой ок читать

Pavel
22.03.2017
16:32:36
Но опять же я надеялся что раз D такой приятный как о нем говорят, он должен меня избавить от этих переворачиваний.

Oleg
22.03.2017
16:33:01
потому что потом можно эту структуру загнать в не особо хитрую функцию, которая будет переводить в нужный byte order поля, в зависимости от их размера

Pavel
22.03.2017
16:33:12
Ведь это же чисто детали реализации какой-то.

qwe
22.03.2017
16:34:25

Maxim
22.03.2017
16:35:38
я специально для работы с endiannes маленькую библиотеку streams написал)
https://code.dlang.org/packages/freck-streams — там только чтение из byte[] и из файлов, может, получится и надстройку над сокетом сделать)

Google

Dmitry
22.03.2017
22:34:39
А как-то так можно?
void main()
{
string [] str = ["aa","bb","cc","dd"];
foreach(s;str)
{
if(s.canFind("bb"))
{
s.array.insertBefore("x");
}
}
}
Ругается: Error: no property 'insertBefore' for type 'dchar[]'

zk
23.03.2017
06:09:51
s.array.insertBefore("x");
s.array - это функция из std.array которая создает массив из Range, a insertBefore это метод у структуры std.container.array.Array.

Dmitry
23.03.2017
07:14:11
А контейнеры для чего используются?

Oleg
23.03.2017
07:50:09
Кто как хочет так и использует
Полезней разобраться в устройстве и самому находить им применение

Dmitry
24.03.2017
06:51:27
К теме про WASM. Если в Ди не использовать ГК, т.е. писать код в режиме Better-C то получается можно будет его под WASM скомпилировать?

Oleg
24.03.2017
06:55:27

Dmitry
24.03.2017
06:58:09
да, он уже в ФФ и Хроме

Admin
ERROR: S client not available

Oleg
24.03.2017
06:58:22
BetterC

Dmitry
24.03.2017
06:58:26
а...
По идее должен, иначе не понятно как Илья используя его чтото писал...

Oleg
24.03.2017
06:59:26
да, он уже в ФФ и Хроме
Блин, я подумал что это обычный ассемблер :)) А ты про веб ассембли! Да, уже добавили везде! Ждём теперь ААА игрульки под браузеры

Dmitry
24.03.2017
06:59:32

Oleg
24.03.2017
07:01:20

Dmitry
24.03.2017
07:03:25
не совсем понял что на что заменить ...

Oleg
24.03.2017
07:03:43
Просто названия у переменных фиговые)
Ты к чему текст прибавить пытаешься? К строке или массиву?

Google

Dmitry
24.03.2017
07:04:41
как я понимаю к строке таким способом прибавить невозможно?

Oleg
24.03.2017
07:05:23
Думаю можно
Сек
Смотри
foreach(int index, s; str)
str [index] = "x" ~ s
Думаю сработает

Dmitry
24.03.2017
07:07:00
щас проверю

Oleg
24.03.2017
07:10:31
Я думал тебе в массив записать
Ну тогда просто auto ss = "x" ~ s;

Dmitry
24.03.2017
07:10:49
а, щас проверю что в нем в итоге

Oleg
24.03.2017
07:10:57
writeln(ss)

Dmitry
24.03.2017
07:11:10
угу, записалось)

Shorty(Ale Chapa) Manskiy
24.03.2017
07:11:44

Oleg
24.03.2017
07:12:11
У меня кажется так же было, ничего не менялось

Shorty(Ale Chapa) Manskiy
24.03.2017
07:12:47
ХЗ что он там давал, но размер у бинарика был меньше.

Oleg
24.03.2017
07:13:54
Проще везде выставить nothrow и nogc) и линкером заменить функции GC
Этож по идее только в LDC должно быть доступно с WASM работать
В гугле даже упоминаний нет dlang+wasm

Dmitry
24.03.2017
07:15:38
а разве у GDC нет поддеркки? Или его давно не обновляли?

Oleg
24.03.2017
07:16:21