@dlangru

Страница 426 из 719
Evgeny
04.03.2018
06:18:02
впрочем не проверял, но должно

Denis
04.03.2018
06:18:52
а в чём сложность запилить DIP1000?

Evgeny
04.03.2018
06:19:20
там много штук с lifetime, частично оно вроде запилено

ответ расту :)

Google
Tom
04.03.2018
06:34:41
А на сабже окромя самописного учебника что-то еще предполагается хостить или нет?

Evgeny
04.03.2018
06:36:05
компилится без проблем: https://glot.io/snippets/eyuh4sdywj

Ды да, уже тоже нашел
Я для своих целей использовал FreeImage через derelict https://code.dlang.org/packages/derelict-fi

Denis
04.03.2018
06:39:58
компилится без проблем: https://glot.io/snippets/eyuh4sdywj
а так чтобы НЕ компилилось при попытке утащить Value?

Evgeny
04.03.2018
06:44:34
походу только запретить копирование

Denis
04.03.2018
06:51:19
точно не унесут если запретить?

Evgeny
04.03.2018
06:56:23
при желании можно утащить все что угодно

@safe может затруднить этот процесс еще сильнее

Pavel
04.03.2018
06:57:01
Не отдавать никаких ссылок, разве что.

Evgeny
04.03.2018
06:57:15
а так запрет от копирования, запрет создания по умолчанию, кострукторы запривачены.

Denis
04.03.2018
06:57:53
> запрет создания по умолчанию Не могу - у меня эти же структуры используются как аргументы для запросов

Google
Evgeny
04.03.2018
06:59:55
этот запрет не обязателен

Denis
04.03.2018
07:00:02
могу, конечно, зашаблонить её и сделать 2 почти одинаковые, но одну без возможности создавать

Evgeny
04.03.2018
07:00:04
запрет от копирования работает точно

Denis
04.03.2018
07:00:36
this(this) которое?

Evgeny
04.03.2018
07:00:41
а зачем людям утаскивать эту структуру? Будут ли они реально ее таскать?

а то может таки RC сделать?

Evgeny
04.03.2018
07:01:20
последний Value уничтожается и утаскивает с собой таблицу

случайно же
Ну как ее случайно утащищь? Это надо сознательно вытащить

Denis
04.03.2018
07:01:50
последний Value уничтожается и утаскивает с собой таблицу
для этого достаточно внутри Value хранить указатель на таблицу. но это как-то избыточно кажется

Ну как ее случайно утащищь? Это надо сознательно вытащить
ну вот утащит кто-нибудь а потом будет жаловаться что библиотека нестабильная и падает

скажем утащит не её а строку (row)

Evgeny
04.03.2018
07:02:35
Denis
04.03.2018
07:02:41
гораздо вероятнее, т.к. обычно обработка построчная

может таки ты занимаешься преждевременной оптимизацией?
Дык 5 лет библиотеке уже) решил FIXME и TODO вычистить из неё

Evgeny
04.03.2018
07:03:07
гораздо вероятнее, т.к. обычно обработка построчная
ну ты лично часто таскаешь строки из БД и хранишь их потом где-то?

я вообще такого не помню ни в одном языке

Denis
04.03.2018
07:03:42
ну ты лично часто таскаешь строки из БД и хранишь их потом где-то?
ну вот в многопоточке вызовут запрос и кинут обрабатывать строку в отдельный тред. а основной тред где таблица уже может помереть

Evgeny
04.03.2018
07:04:07
поэтому нужен RC

Denis
04.03.2018
07:04:23
избыточно

Google
Evgeny
04.03.2018
07:04:24
таблица не должна помирать пока существует хоть один value

зато безопасно

Denis
04.03.2018
07:04:38
проще запретить отдаляться Value от таблицы, если это возможно

Evgeny
04.03.2018
07:05:21
проще, согласен. но когда у меня встал подобный вопрос, я сделал RC

так как пока нет средств для этого

Denis
04.03.2018
07:05:38
ну а у меня уже давно всё стоит, теперь хочется всё идеально)

Evgeny
04.03.2018
07:06:20
отложи эту идеальность до момента когда доделают DIP1000

Denis
04.03.2018
07:06:57
до никогда?)

Evgeny
04.03.2018
07:07:10
да вроде процесс пошел

частично оно как-то там запилено, но пока не работает нормально

Кстати - https://dlang.org/changelog/2.079.0.html#dip1008

Denis
04.03.2018
07:08:58
попробовал запретить - не канает, у меня внутри пакета копирование используется (с умом)

Denis
04.03.2018
07:10:01
"запакетить", щас попробую ага

Evgeny
04.03.2018
07:10:03
ну или высовывать наружу некопируемую обертку.

Valeriy
04.03.2018
07:12:15
Народ, а что вообще есть из обработки изображений?
https://github.com/zhaopuming/awesome-d/blob/master/README.md#image-processing https://github.com/libmir/dcv https://github.com/BlackEdder/ggplotd https://github.com/lgvz/imageformats

Denis
04.03.2018
07:24:46
ну или высовывать наружу некопируемую обертку.
Наклодно это всё. Та структура это просто ссылка на кусок данных таблицы, буквально байтовый массив

Pavel
04.03.2018
07:27:36
Может, пусть у GC голова болит?

Evgeny
04.03.2018
07:28:36
если работать через libpq, то там сама либа память выделяет

а копировать в GC память как-то накладненько

Google
Pavel
04.03.2018
07:30:19
в GC положить прокси. один на все записи.

Denis
04.03.2018
07:30:30
если работать через libpq, то там сама либа память выделяет
причем на этапе создания таблицы только, а потом даёт отсылки на неё

Igor
04.03.2018
07:49:14
В dip 1000 есть еще какой-то return scope

Denis
04.03.2018
07:49:37
ну о нём и речь - вернуть такую структуру чтобы она дальше никуда не ушла

была бы на том же scope что и породивший её метод

Igor
04.03.2018
07:50:45
Я про return scope не помню что там точно реализовано. Нужно читать

Ну и всё это работаетолько внутри @safe кода

Denis
04.03.2018
07:51:26
ну видимо чтобы точно не унесли через cast)

Dmitry
04.03.2018
11:14:52
А в какой момент тут экземпляр класса создается? ``` import std.stdio; import std.typecons : scoped; class A { void saySomething() { writeln("Hi from A"); } ~this() { writeln("Destruct A"); } } void main() { with(scoped!A()) { saySomething(); writeln("something"); } writeln("Hello D"); } ```

И вообще в каких случаях это полезно? Типа чтобы не забыть закрыть что то?

Dmitry
04.03.2018
12:14:02
with типа экземпляр класса без имени создает который по выходу из скоупа уничтожается?

Evgeny
04.03.2018
12:14:37
а, типа - это "артикль", а не тип переменной, теперь понял

да именно так

точнее он создаст экземпляр Scoped, который сделает описанное

Dmitry
04.03.2018
12:16:41
А когда такое бывает полезно?

Evgeny
04.03.2018
12:17:19
проверяется же элементарно: https://glot.io/snippets/eyuqj8svm4

А когда такое бывает полезно?
Что именно полезно? with позволяет не писать имя переменной

Google
Evgeny
04.03.2018
12:18:59
создание объекта внутри with позволяет совместить приятное с полезным.

Dmitry
04.03.2018
12:19:12
Точнее не далть A a = new A() ?

Evgeny
04.03.2018
12:21:02
with(scoped!A()) { saySomething(); writeln("something"); } полностью эквивалентно { auto a = scoped!A(); a.saySomething(); writeln("something"); }

Dmitry
04.03.2018
12:22:40
угу, пасибо

Evgeny
04.03.2018
12:22:43
можно и так написать with(new A()) { saySomething(); writeln("something"); }

scoped создает объект на стеке и уничтожает при выходе из скоупа

with не имеет к этому прямого отношения.

Dark
04.03.2018
12:24:32
scoped создает объект на стеке и уничтожает при выходе из скоупа
Точнее, он наверняка при выходе из скоупа будет уничтожен

Evgeny
04.03.2018
12:24:51
Dark
04.03.2018
12:25:27
не наверняка, а гарантированно
Я про обычный класс, не scoped

RAII же

Evgeny
04.03.2018
12:27:21
ты ответил на сообщение, где было про scoped

scoped и есть RAII

new A() - это не RAII

Dark
04.03.2018
12:28:43
ты ответил на сообщение, где было про scoped
Я имело ввиду просто класс, просто не правильно сказал

new A() - это не RAII
Классы пробираются gc значит?

Evgeny
04.03.2018
12:30:46
Не совсем. GC отслеживает только то что было аллоцировано с помощью GC. А класс это или массив или структура или еще что-нибудь пофиг.

new A() - сделает класс в памяти GC scoped!A() - сделает класс на стеке

точнее scoped делает класс, но взвращает обертку вокруг него, а не сам класс.

Dark
04.03.2018
12:35:44
Тогда появляется интересный вопрос. Классы освобождаются исключительно в рантайме, что ли? Вообще в компиляции не может прописать целебный free?

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