
Dmitry
24.03.2017
07:17:44
Ей богу лучше ба Вальтер Брайт на WASM заморочился, чем потратил кучу лет на попытку интеграцию с С++ сделать
В итоге она нужна оказалось лишь единицам, а сам язык в развитии застрял

Maxim
24.03.2017
07:21:21
кстати, про BetterC, точно помню, что с этим ключом не вызывались static this() для модулей)

Dmitry
24.03.2017
07:23:04
Олег, вот тут наверно лучше все же ref использовать?
string [] str = ["aa","bb","cc","dd"];
foreach(int i, ref s;str) { ... }
?

Google

Shorty(Ale Chapa) Manskiy
24.03.2017
07:23:51
ты что вообще хочешь сделать?

Dmitry
24.03.2017
07:24:27
да просто сижу пытаюсь понять как эффективнее менять к примеру массив
или элемент в строке

Oleg
24.03.2017
07:25:10

Dmitry
24.03.2017
07:25:39
RAII это что в данном контексте?

Oleg
24.03.2017
07:25:52

Dmitry
24.03.2017
07:28:56
понять просто как делать и в каких ситуациях лучше то или иное решение

Oleg
24.03.2017
07:29:07

Dmitry
24.03.2017
07:29:12
просто к примеру у меня данных будет не 1КБ а 100GB

Oleg
24.03.2017
07:29:35

Shorty(Ale Chapa) Manskiy
24.03.2017
07:30:23

Oleg
24.03.2017
07:30:39

Google

Oleg
24.03.2017
07:31:22

Dmitry
24.03.2017
07:31:53
Пока точной задачи нет, но вероятно скоро придется работать с большими данными. Пока есть время разбираюсь

Oleg
24.03.2017
07:32:43

Dmitry
24.03.2017
07:35:39
По идее у нас типы (int, string, ...) знаковый тип так?
тогда для них ref нужен

Shorty(Ale Chapa) Manskiy
24.03.2017
07:36:04

Dmitry
24.03.2017
07:38:11
Кстати, мы тут тему с Eto Demerel обсуждали уже, но никто не видел хороших статей по тому как парсеры писать? Именно статей для дураков где все с самых элементарых примеров разжевывается прям по буквам

Oleg
24.03.2017
07:38:52

Shorty(Ale Chapa) Manskiy
24.03.2017
07:39:13

Dmitry
24.03.2017
07:39:33
Мне бы просто основу понять, чтобы это для меня не было черным ящиком

Oleg
24.03.2017
07:39:45
Я могу в личку тебе рассказать

Dmitry
24.03.2017
07:40:24
давай)

Oleg
24.03.2017
07:40:28
В книжках оно сложнее чем на практике)

Shorty(Ale Chapa) Manskiy
24.03.2017
07:45:04
тогда для них ref нужен
что бы это значило? в любом случаи a ~ b создаст новый массив, вне зависимости от того, что там в нем лежит - экземпляры классов или же int'ы

Dmitry
24.03.2017
07:45:35
а если не a ~ b а замена символа?

Shorty(Ale Chapa) Manskiy
24.03.2017
07:45:58
это как?

Maxim
24.03.2017
07:46:09
в строках замена не прокатит, они immutable(char), их кастовать к char[] надо)

Dmitry
24.03.2017
07:46:21
ну типа replace(...)
а с числами?

Google

Shorty(Ale Chapa) Manskiy
24.03.2017
07:47:25
какие ты читал книги про D?

Dmitry
24.03.2017
07:48:29
У меня все хуже %) я по Ди даже книги писал %)
Тока это не значит, что я язык адекватно понимаю

Maxim
24.03.2017
07:50:02
так какая задача-то?
поменять определенный элемент в массиве?)

Dmitry
24.03.2017
07:50:47
ну вот допустим да. И понять как это эффективнее сделать и когда всякие ref не будут никакого толка давать

Maxim
24.03.2017
07:51:16
самый эффективный способ foo[i] = bar;
ф ref - это просто передача по ссылке)

Dmitry
24.03.2017
07:52:38
но если мы в строке символ поменяем будет же аллокация
т.е. смысла в ref не будет

Maxim
24.03.2017
07:53:32
ну, т.е. если тебе в цикле foreach нужно менять элементы массива по каким-то признакам, то нужен ref, иначе переменная внутри цикла не будет "ссылаться" на элемент массива
символ в строке в foreach поменять не получится, потому что он immutable char по умолчанию

Maxim
24.03.2017
07:54:32
по сути string это алиас immutable(char)[]

Dmitry
24.03.2017
07:54:56
так это я понял, а с другими типами? миссив int к примеру?

Shorty(Ale Chapa) Manskiy
24.03.2017
07:56:02

Dmitry
24.03.2017
07:56:38
что строку менять нельзя т.к. она неизменна
и любое изменение строки это создание новой копии строки

Shorty(Ale Chapa) Manskiy
24.03.2017
07:57:13
бля, а почему она не изменяема?

Dmitry
24.03.2017
07:57:32
потому что она immutable(char)[]

Shorty(Ale Chapa) Manskiy
24.03.2017
07:58:23

Google

Dmitry
24.03.2017
07:58:57
массив char и int вроде бы разные или тоже самое?

Shorty(Ale Chapa) Manskiy
24.03.2017
08:00:04
разные. но вопрос был не именно про char а про immutable

Dmitry
24.03.2017
08:01:00
ну один char поменять можно, а массив чаров который в строке нет так ведь?

Shorty(Ale Chapa) Manskiy
24.03.2017
08:02:19
тебе нужно почитать про immutable.

Dmitry
24.03.2017
08:05:02
"immutable data, could actually placed in read-only sections of memory, and hence, any attempts to modify the data it will fail."

Shorty(Ale Chapa) Manskiy
24.03.2017
08:07:22
и вот тебе еще...
в строках замена не прокатит, они immutable(char), их кастовать к char[] надо)

Pavel
24.03.2017
08:25:40
И никаких проблем с выравниваниями или порядком байт. Структура заполняется верно.

Admin
ERROR: S client not available

Pavel
24.03.2017
08:26:53
Я только стартовый пакет читал переменной длины

Maxim
24.03.2017
08:59:25
ну, порядок байтов в слове обычно оговаривается на уровне архитектуры или протокола

Pavel
24.03.2017
09:00:01
Ну я там читаю байтами а не словами, может меня еще ждут сюрпризы

Maxim
24.03.2017
09:00:22
я свои streams написал, когда нужно было руками разбирать формат png, потому что в формате и в x86 совместимых архитектурах endianness разная)

Oleg
24.03.2017
09:02:40

Maxim
24.03.2017
09:02:54
сам сделал)
по сути там только чтение/запись int, short и long надо было сделать

Oleg
24.03.2017
09:05:08
а float и double?

Maxim
24.03.2017
09:06:14
с этим я не заморачивался, да и это сильно зависит от архитектуры)

Google

Maxim
24.03.2017
09:09:33

Pavel
24.03.2017
09:10:04
Я везде делаю debug writeln, так что наверно поймаю это если что будет не так.

Shorty(Ale Chapa) Manskiy
24.03.2017
09:10:50
закон мерфи же...

Oleg
24.03.2017
09:25:54

Shorty(Ale Chapa) Manskiy
24.03.2017
09:27:03
что может случиться, обязательно случится.
Я везде делаю debug writeln, так что наверно поймаю это если что будет не так.
ну типа - обязательно не поймает, когда что-то будет не так.

Oleg
24.03.2017
09:29:31
Лазве литтл эндиан не касается только порядка байт, не касая порядок бит?
Тогда обработка через обычные байт массивы ничего не сломает

Shorty(Ale Chapa) Manskiy
24.03.2017
09:32:10
ну а когда он эти байты десериализует, то что тогда, какими они будут?
... иму же прийдет какаято непонятная херня, а не то что он хотел.

Oleg
24.03.2017
09:36:49
Ну погоди погоди
Если на обоих концах его же код
То переворачивать не нужно
Там ведь тоже неправильно будет

Shorty(Ale Chapa) Manskiy
24.03.2017
09:37:48
какая разница чей там код, ведь зависит от среды, где этот код исполняется, так ведь?

Oleg
24.03.2017
09:37:56
По моему это вообще апи сокетов итак переворачивает. Ниразу ничего крутить не приходилось

Maxim
24.03.2017
09:38:07
короче, как работает socks прокси: открываешь сокет до прокси, шлешь ему пакет авторизации с портом и айпи назначения, прокси тебе отвечает, что все ок, и дальше ты с этим сокетом работаешь, как с обычным, а прокси перенаправляет поток по нужному адресу

Shorty(Ale Chapa) Manskiy
24.03.2017
09:38:39

Maxim
24.03.2017
09:39:13
вот на этапе передачи пакета авторизации нужно номер порта и айпи передавать в формате big-endian
сначала старший байт, потом младший
сокеты сами ничего не переворачивают)

Oleg
24.03.2017
09:39:52