
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

Denis
23.06.2017
17:03:06

Pavel
23.06.2017
17:03:09

Denis
23.06.2017
17:03:36

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. В настоящий момент проверок никаких не предусмотрено. Скорее всего есть ряд глюков. Боковая панель с последним пастами пока не реализована. Короче как-то так.

Denis
23.06.2017
17:13:22
Из плюсов только отсутствие ебучей капчи
ну это пока...

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
Вроде использовал пример из репы, тупо пытаюсь подключиться и всё.
Т.е. тупо
`
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

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

Denis
24.06.2017
10:27:15

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

Denis
24.06.2017
10:27:57

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

Denis
24.06.2017
10:28:17

Дед Пегас
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)