
Ievgenii
20.06.2018
06:30:33
Сори!

NullSanya
20.06.2018
06:31:24
мог напутать

Ievgenii
20.06.2018
06:31:44

Google

Ievgenii
20.06.2018
06:31:49
Могут быть еще простые строки
Типа: @ForMyDad
И проверяй на наличие такого атрибута

NullSanya
20.06.2018
06:32:24
Мне не нравится такой подход

Ievgenii
20.06.2018
06:32:34
Весьма забавная штука. Ява вся пронизана этим...

NullSanya
20.06.2018
06:32:54
Чем?
Строки не автокомплитятся.

Dmitry
20.06.2018
06:32:59

Ievgenii
20.06.2018
06:33:10

NullSanya
20.06.2018
06:33:18

Ievgenii
20.06.2018
06:33:40
Да)
Зато дает много возможностей!

Google

NullSanya
20.06.2018
06:33:48

Ievgenii
20.06.2018
06:34:00

Dark
20.06.2018
06:34:52

Ievgenii
20.06.2018
06:34:54

Maxim
20.06.2018
06:36:05
для полноты картины нужно сказать, что File — это не дескриптор, а структура-обертка над сишным вводом-выводом
и там уже внутри лежит дескриптор, который является просто числом)

Dmitry
20.06.2018
06:36:40

Maxim
20.06.2018
06:38:23

Ievgenii
20.06.2018
06:38:42

Valeriy
20.06.2018
06:38:43
UDA — это интроспекция времени компиляции.
В перспективе мощьная штука.
Пок ане довелось попробовать

Dmitry
20.06.2018
06:38:46

Ievgenii
20.06.2018
06:38:47
Это в куче
File test(string name) {
return File(name, "r");
}
test1 = test("/tmp/t.txt");
А это, по идее, ошибка

NullSanya
20.06.2018
06:39:10

Valeriy
20.06.2018
06:39:34

Ievgenii
20.06.2018
06:39:39

Dark
20.06.2018
06:39:39
Давай пример, не совсем понятно
enum long test = 0;
struct test2 {
@test bool prop;
}
Когда я получаю атрибуты prop, у меня вместо test - 0. И тип long.
Второй момент. Я хочу как то так
struct t {
@test @test(someString) string prop;

NullSanya
20.06.2018
06:39:54

Google

Maxim
20.06.2018
06:40:02

Ievgenii
20.06.2018
06:40:08

Valeriy
20.06.2018
06:40:35

Maxim
20.06.2018
06:41:32
ну и, соответственно, адрес будет храниться на стеке, хотя, наверное, может и в регистре каком-нибудь лежать

Ievgenii
20.06.2018
06:41:47

Valeriy
20.06.2018
06:42:34
Компилятор знает возвращаемый тип и резервирует место на стеке

Ievgenii
20.06.2018
06:43:04

Valeriy
20.06.2018
06:43:06
А ещё есть такая штука, как RVO,

Ievgenii
20.06.2018
06:43:18

Valeriy
20.06.2018
06:43:31

Dark
20.06.2018
06:43:31

Ievgenii
20.06.2018
06:43:38

Maxim
20.06.2018
06:44:07
Нет
более того, может храниться и в регистре, зависит всё от calling convertion

Ievgenii
20.06.2018
06:44:17
struct AttrT(T)
{
string name;
T value;
}
@AttrT!uint("Answer", 42) @AttrT!int("Pi", 3) @AttrT int d;
static assert(getUDAs!(d, AttrT).length == 2);
static assert(getUDAs!(d, AttrT)[0].name == "Answer");
static assert(getUDAs!(d, AttrT)[0].value == 42);
static assert(getUDAs!(d, AttrT)[1].name == "Pi");
static assert(getUDAs!(d, AttrT)[1].value == 3);
static assert(getUDAs!(d, AttrT!uint).length == 1);
static assert(getUDAs!(d, AttrT!uint)[0].name == "Answer");
static assert(getUDAs!(d, AttrT!uint)[0].value == 42);
static assert(getUDAs!(d, AttrT!int).length == 1);
static assert(getUDAs!(d, AttrT!int)[0].name == "Pi");
static assert(getUDAs!(d, AttrT!int)[0].value == 3);

Valeriy
20.06.2018
06:44:48

Ievgenii
20.06.2018
06:45:37

Google

Valeriy
20.06.2018
06:45:55
Только к тому что определено внутри тела функции. Возвращаемое значение, то что полсе return размещается на стеке вызывающего скопа

Maxim
20.06.2018
06:46:47
https://dlang.org/spec/abi.html#return_value

Valeriy
20.06.2018
06:46:54
Для этого и нужна статическая типизация, что такие оптимизации они элементарно делаются

Maxim
20.06.2018
06:48:01
такие дела, практически всё возвращается в регистрах)

Ievgenii
20.06.2018
06:49:07

Valeriy
20.06.2018
06:49:56

Ievgenii
20.06.2018
06:50:09

Valeriy
20.06.2018
06:50:15
У тебя там void — тип возвращаемого значения

Ievgenii
20.06.2018
06:50:36

Admin
ERROR: S client not available

Ievgenii
20.06.2018
06:50:52
И это факт
Структуры ВСЕГДА копируются
Если ты их не возвращаешь по указателю или с ref
Объекты классов - всегда возвращаются по ссылке
Ну или указатель фигаш на них...
Если в функции ты создаешь структуру, а после возвращаешь эту структуру - при возврате будет копирование структуры!
Чуть напутал, при возврате компилятор оптимизирует и не создает копию структуры. Он при входе в функцию создает копию

Google

Ievgenii
20.06.2018
06:57:12
https://run.dlang.io/is/zuA9sl

Valeriy
20.06.2018
07:00:31

Ievgenii
20.06.2018
07:00:46
Вот я спрашиваю, как?
Это очень удобная вещь, когда ты хочешь к некой сущности добавить мета информацию, без хранения ее в самом поле

Valeriy
20.06.2018
07:02:32
Вот я спрашиваю, как?
У @deviator были на хабре статьи про UDA
https://habr.com/post/261349/
https://habr.com/post/261641/

Ievgenii
20.06.2018
07:09:31
Не ожидая очистки стека вызываемой функции

Dark
20.06.2018
07:11:48

Ievgenii
20.06.2018
07:12:15
Или что-то не выходит?

Dark
20.06.2018
07:12:55
Так пример из мануала полностью описывает твой пример
Не полностью.
@AttrT!uint("Answer", 42) @AttrT!int("Pi", 3) @AttrT int d;
static assert(getUDAs!(d, AttrT).length == 2);
static assert(getUDAs!(d, AttrT)[0].name == "Answer");
static assert(getUDAs!(d, AttrT)[0].value == 42);
static assert(getUDAs!(d, AttrT)[1].name == "Pi");
static assert(getUDAs!(d, AttrT)[1].value == 3);
3ий атрибут не виден

Ievgenii
20.06.2018
07:39:40

Dark
20.06.2018
07:42:09

Ievgenii
20.06.2018
07:48:33

Dark
20.06.2018
07:49:12

Ievgenii
20.06.2018
07:49:33
Так я же тебе сделал ее структурой
Не понимаю

Dark
20.06.2018
07:50:35
struct Data(T) { }
@Data Data!int int some;
getUDAs(some, Data).length; // => 1

Ievgenii
20.06.2018
07:51:55