
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:31:39
https://code.dlang.org/packages/dlib - dlib.image - image processing (8-bit, 16-bit and 32-bit floating point channels, common filters and convolution kernels, resizing, FFT, HDRI, animation, graphics formats I/O: JPEG, PNG/APNG, BMP, TGA, HDR)
https://code.dlang.org/packages/imageformats
https://code.dlang.org/packages/daffodil
Ды да, уже тоже нашел

Evgeny
04.03.2018
06:34:34

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

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 сделать?

Denis
04.03.2018
07:01:09

Evgeny
04.03.2018
07:01:20
последний Value уничтожается и утаскивает с собой таблицу
случайно же
Ну как ее случайно утащищь? Это надо сознательно вытащить

Denis
04.03.2018
07:01:50
скажем утащит не её а строку (row)

Evgeny
04.03.2018
07:02:35

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

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
попробовал запретить - не канает, у меня внутри пакета копирование используется (с умом)

Evgeny
04.03.2018
07:09:43

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

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

Valeriy
04.03.2018
07:12:15

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

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");
}
```
И вообще в каких случаях это полезно? Типа чтобы не забыть закрыть что то?

Igor
04.03.2018
11:44:30

Evgeny
04.03.2018
12:12:49

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

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

Evgeny
04.03.2018
12:24:51

Dark
04.03.2018
12:25:27
RAII же

Evgeny
04.03.2018
12:27:21
ты ответил на сообщение, где было про scoped
scoped и есть RAII
new A() - это не RAII

Dark
04.03.2018
12:28:43

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

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

Evgeny
04.03.2018
12:40:24