@dlangru

Страница 196 из 719
Pavel
23.06.2017
10:40:02
Я видел как мой друг один отрефакторил легаси перл на вполне читабельный структурированный код. Так что думаю что на любом языке можно писать красиво.

Stepanos
23.06.2017
10:40:16
можно)

qwerty
23.06.2017
11:14:27
https://habrahabr.ru/company/unigine/blog/331330/ тоже собираюсь на этот курс сходить. С 4го занятия интересные вещи будут рассказывать. На которые сам время никак не выделю

Denis
23.06.2017
16:53:08
А есть safe способ кастануть массив байтов в структуру? Нужно мутить что-то с union?

Google
Ned Ogl
23.06.2017
17:00:53
Так стоп, объясните мне один нюанс

DMD ведь на D написан, верно?

Pavel
23.06.2017
17:02:43
А есть safe способ кастануть массив байтов в структуру? Нужно мутить что-то с union?
Да, вот пример https://github.com/nexor/socks5d/commit/198ef14b6c22ff165f5acc31f810d13527c4d129#diff-9254cd54ddc231e899e24ae88e2fa1a4R40

Denis
23.06.2017
17:03:06
DMD ведь на D написан, верно?
Таком Ди, который автоконверт из С++

Pavel
23.06.2017
17:03:09
Pavel
23.06.2017
17:05:29
Да вполне рабочая

Denis
23.06.2017
17:05:50
конечно хотелось бы а) видеть крыжик @safe б) иметь такую штуку в стандартной библиотеке

раз уж к safe стремимся

Ned Ogl
23.06.2017
17:06:14
Denis
23.06.2017
17:06:24
А то я случайно сделал bytes.to!StructName а оно случайно скомпилилось

такая хрень в результате там была!..

Google
Denis
23.06.2017
17:07:10
То есть?..
изначально компилятор писался на С++ по множеству причин. Но однажды решили что это не Ъ и конвертанули его конвертером, специально для этого написанным в Дишный код

Maxim
23.06.2017
17:07:54
ну так-то, union — это стандартная фича языка, которая как раз и придумана для того, чтобы несколько переменных разделяли одну область памяти, не вижу смысла что-то еще делать в стандартной библиотеке)

Dmitry
23.06.2017
17:12:11
Вот мой новый мега-сервис для обмена кодом http://past.code123.org/ Из плюсов только отсутствие ебучей капчи и минимальное количество JavaScript. В настоящий момент проверок никаких не предусмотрено. Скорее всего есть ряд глюков. Боковая панель с последним пастами пока не реализована. Короче как-то так.

Dmitry
23.06.2017
17:14:00
Я ее принципиально реализовывать не буду

она меня просто заебала

Dmitry
23.06.2017
18:19:42
@safe нету там...
Так конверсия произвольных байтов в структуру и не может быть safe. Там же внутри указатели могут быть, в них любой мусор так может попасть.

Denis
23.06.2017
18:20:28
дискуссионый вопрос!

Вообще, вот есть типовая задача - сделать из байтов структуру. Приехало по сети нечто - надо распихать.

Почему это не может быть safe? Может нам нужны тогда безуказательные структуры?

Dmitry
23.06.2017
18:23:38
"Memory-safe code cannot use certain language features, such as: Casts that break the type system..." http://dlang.org/spec/memory-safe-d.html

The following operations are not allowed in safe functions: No casting from a pointer type to any type other than void*. No casting from any non-pointer type to a pointer type. No modification of pointer values. Cannot access unions that have pointers or references overlapping with other types. http://dlang.org/spec/function.html#function-safety

Если без указателей, то еще туда-сюда. Но чтобы safe по-хорошему нужно разумную десериализацию, а не тупой кастинг байтов.

cerealed хорошая либа для этого например

Denis
23.06.2017
18:25:37
Dmitry
23.06.2017
18:26:22
плохой указатель - прямая дорога к memory corruption, не халяльно

Denis
23.06.2017
18:29:54
А нулевой он плохой или хороший? :)

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

Дед Пегас
23.06.2017
18:45:30
Что нонче норм для работы с бд?

Google
Denis
23.06.2017
18:50:25
it depends же

чозабд?

Dmitry
23.06.2017
18:51:20
Нулевой - так себе :) Но его хотя бы отличить можно от хорошего. safe подмножество языка призвано гарантировать статически, что всякий указатель либо нулевой, либо указывает на живой объект правильного типа. А мусорный указатель может указывать куда угодно, тут никакой safety быть не может. Типовая задача преобразования блобов - пожалста, или unsafe кастинг или safe десериализация.

Denis
23.06.2017
18:53:22
> safe подмножество языка призвано гарантировать статически, что всякий указатель либо нулевой, либо указывает на живой объект правильного типа. Это точно?

Dmitry
23.06.2017
18:55:00
"Safe functions are functions that are statically checked to exhibit no possibility of undefined behavior." А переход по рандомному указателю - это еще какой UB

Denis
23.06.2017
18:57:17
undefined behavior != undefined pointer, IMHO

Dmitry
23.06.2017
18:59:31
!=, но переход по такому поинтеру точно UB

Весь смысл @safe теряется, если разрешить неинициализированные данные и мусор в указателях

Denis
23.06.2017
19:02:00
> но переход по такому поинтеру А никто не заставляет

ну ок, верю

Дед Пегас
23.06.2017
19:02:10
чозабд?
Любая реляционная.

Можно постгрю.

Denis
23.06.2017
19:02:17
Нужно*

dpq2 конечно

)

Дед Пегас
24.06.2017
10:14:01
dpq2 конечно
Попытался использовать. Словил Access Violation

Вроде использовал пример из репы, тупо пытаюсь подключиться и всё.

Т.е. тупо ` string connInfo = "postgres://postgres:postgres@localhost:5432/windboner"; Connection conn = new Connection(connInfo); `

И ква

Dmitry
24.06.2017
10:20:46
Денис, я не вправе конечно тебе указывать чем заниматься, но не лучше ли было усилия приложить к развитию нативного драйвера для PщstgreSQL https://github.com/pszturmaj/ddb ?

Google
Dmitry
24.06.2017
10:21:13
Просто обертки это конечно хорошо, но все же лучше когда оно нативное...

Дед Пегас
24.06.2017
10:21:41
Мне для моих задач этого ваще за глаза хватит.

Dmitry
24.06.2017
10:22:10
ну как бы да... я юзал активно

там есть пару косяков, но в целом более чем юзабельно

Denis
24.06.2017
10:23:05
А где падает?

Libpq установлена?

Скопипасти полный вывод куда-нибудь

Дед Пегас
24.06.2017
10:25:54
$ ./imagehosting.exe --config=config.json 2017-06-24T13:13:21.060:C:\Users\Master\AppData\Roaming\dub\packages\dpq2-master\dpq2\src\dpq2\package.d:_sharedStaticCtor10:9 DerelictPQ loading... 2017-06-24T13:13:21.062:C:\Users\Master\AppData\Roaming\dub\packages\dpq2-master\dpq2\src\dpq2\package.d:_sharedStaticCtor10:16 ...DerelictPQ loading finished object.Error@(0): Access Violation

Admin
ERROR: S client not available

Denis
24.06.2017
10:26:40
Денис, я не вправе конечно тебе указывать чем заниматься, но не лучше ли было усилия приложить к развитию нативного драйвера для PщstgreSQL https://github.com/pszturmaj/ddb ?
Нет не лучше. Потому что при изменениях в протоколе усилия придётся прикладывать вновь и вновь. Раз уж у протокола нет спецификации кроме кода одной стандартной библиотеки.

Dmitry
24.06.2017
10:26:59
а там протокол разве сильно меняют?

Dmitry
24.06.2017
10:27:41
Ну банально никаких либ сторонних не надо.

Denis
24.06.2017
10:27:57
а там протокол разве сильно меняют?
Это не важно - важно что это придётся мониторить.

Дед Пегас
24.06.2017
10:28:16
О, а ddb заработал!

Дед Пегас
24.06.2017
10:28:58
Воткнул прямо в каталог с проектом.

Google
Denis
24.06.2017
10:30:48
Я в винде не шарю подгружается ли оно. Но если дереликт не ругается то видимо да. Подозреваю баг в том что объекты не убиты после выгрузки дереликта. Удали их принудительно

Удали до выгрузки дереликта имею ввиду

Дед Пегас
24.06.2017
10:32:14
Окей.

Pavel
24.06.2017
10:33:19
а там протокол разве сильно меняют?
Я немного ковырял протокол, и вроде он очень редко меняется. Хотя они добавляют много новых крутых фич, может я до них просто не дошел

Dmitry
24.06.2017
10:35:25
в mysql протокол вроде тоже почти с 2005 года не поменялся

Denis
24.06.2017
10:36:01
Pavel
24.06.2017
10:36:31
Разве не публикуют? Это же все в документации описано

Или ты именно про diff изменений?

Denis
24.06.2017
10:36:43
Протокола нет в документации

Он задан кодом библиотеки

Дык это код - могут забыть что-то важное. Если протокола официально не публиковали то реверсить его лучше не надо.

База это не шутки, там может бабло считаться большое

Pavel
24.06.2017
10:38:39
https://www.postgresql.org/docs/9.6/static/protocol.html а это что?

Denis
24.06.2017
10:40:25
Это обзор. Найди там формат массива например

Или jsonb

Pavel
24.06.2017
11:10:52
Формат массива это же часть синтаксиса запросов, она не имеет отношения к протоколу имхо

Denis
24.06.2017
11:11:28
> Формат массива это же часть синтаксиса запросов Это формат значений ячеек. То есть, часть протокола если не обмена, но данных.

Pavel
24.06.2017
11:11:56
В протоколе же не описаны например операторы select, update. Там только низкоуровневая вещь - шлите ваш текстовый запрос вот с таким набором байтовых флагов

Denis
24.06.2017
11:12:12
Дык запросы-то уже не текстовые давно, и ответы тоже.

Можно и текстовые, только это медленно.

В запросе сейчас текстовый только текст запроса самого, а аргументы - бинарные

И то, хороший тон в большинстве случаев это передавать название запроса вместо его текста (PREPARED statements)

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