@dlangru

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

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

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:57:05
для меня он прям естественный

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

Oleg
22.03.2017
15:58:01
Ну тогда хотя бы можно было бы скастовать структуру к void[] ? Или так тоже нельзя?
у void[] есть одно маленькое ограничение -- нельзя обратиться к элементу

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
Ведь это же чисто детали реализации какой-то.

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
А как-то так можно? void main() { string [] str = ["aa","bb","cc","dd"]; foreach(s;str) { if(s.canFind("bb")) { s.array.insertBefore("x"); } } }
str.insertBefore попробуй, но вот только в Ди могут быть особенности на этот счет. Это ты итератор модифицируешь в процессе итерации... Попробуй сделать копию str (.dup кажется?) в переменную str2 и в неё добавлять.

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
да, он уже в ФФ и Хроме
Блин, я подумал что это обычный ассемблер :)) А ты про веб ассембли! Да, уже добавили везде! Ждём теперь ААА игрульки под браузеры

Oleg
24.03.2017
07:01:20
Как я понимаю это все же метод какого-то контейнера был т.е. не для этого
s.array это ты у string s, а str это у тебя string[], так что должно работать

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
а разве у GDC нет поддеркки? Или его давно не обновляли?
Я имею ввиду, что если wasm запилят для Ди, то скорее всего именно в LDC

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