ref struct - это какой-то C# курильщика
От: Философ Ад http://vk.com/id10256428
Дата: 29.05.19 04:58
Оценка: -2
Официальное обоснование:
-For high performance and native development scenarios, you may want “stack-only” types that always stay on execution stack..
-...
-Cannot be dynamic binding, boxing, unboxing, wrapping or converting.
-----ref struct is also called embedded reference.

Раньше было так:
        public struct S
        {
            public int A;
            public int B;
        }

public void M0(ref S s){}

        public struct S1
        {
            public S SF;
            public int C;
        }

public void M1(ref S1 s){}


Теперь сделаем финт ушами, и допишем ref перед "struct S". Результат — всё сломалось.
Нафига козе баян??? Зачем положили верёвку, которая стреляет в ноги мимопроходящим?

Когда кто-то, у кого его лямбда не компилируется попытается закрыть свою таску (по-быстрячку, перед релизом), то он не задумываясь удалит слово "ref". Всё ведь и правда заработает — серьёзно! Человек, который мерджит реквесты потом замыленным, уставшим взглядом этого просто не заметит.
Всё сказанное выше — личное мнение, если не указано обратное.
Re: ref struct - это какой-то C# курильщика
От: vdimas Россия  
Дата: 29.05.19 05:23
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>Когда кто-то, у кого его лямбда не компилируется попытается закрыть свою таску (по-быстрячку, перед релизом), то он не задумываясь удалит слово "ref".


Странно, что у него вообще скомипиллируется после этого.
Обычно ref struct сидит в каком-нить interop, где лямбды не нужны, или как обёртки над Span/ReadOnlySpan, когда в прикладном коде.


Ф>Всё ведь и правда заработает — серьёзно! Человек, который мерджит реквесты потом замыленным, уставшим взглядом этого просто не заметит.


А можно поинтересоваться, для каких целей вы используете ref struct?
Re[2]: ref struct - это какой-то C# курильщика
От: Философ Ад http://vk.com/id10256428
Дата: 29.05.19 05:39
Оценка:
Здравствуйте, vdimas, Вы писали:

V>А можно поинтересоваться, для каких целей вы используете ref struct?


Мы — ни для каких. У нас вообще C# 4.0
Я просто прикинул, где они могут появиться, для каких целей, и как это потом всё будет сломано. А так — мы парсим бинарные форматы и периодически юзаем interop.
К слову, System.IO у нас свой со времён C# 2.0 — нужно было длинные имена поддерживать.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[3]: ref struct - это какой-то C# курильщика
От: vdimas Россия  
Дата: 29.05.19 05:56
Оценка:
Здравствуйте, Философ, Вы писали:

V>>А можно поинтересоваться, для каких целей вы используете ref struct?

Ф>Мы — ни для каких. У нас вообще C# 4.0
Ф>Я просто прикинул, где они могут появиться, для каких целей

Обычно для целей битовыжимания через нейтивный interop, или для прикладных "оберток" над Span.
В обоих случаях — для целей ссылания на некий стековый буфер, иначе ref struct не нужен, т.е. не нужны его гарантии.


Ф>К слову, System.IO у нас свой со времён C# 2.0 — нужно было длинные имена поддерживать.


У меня свои все коллекции, все парсеры-форматтеры, весь сетевой стек, все строковые операции плюс портированная прорва их с плюсов. ))
Дотнет сам по себе умеет хорошо работать, но текущие либы написаны не для шустрого исполнения, а для низкой планки входа.
Re: ref struct - это какой-то C# курильщика
От: alexzzzz  
Дата: 29.05.19 10:38
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>Теперь сделаем финт ушами, и допишем ref перед "struct S". Результат — всё сломалось.


Оно же не само. Ты лично и сломал, дописав ref. ref-struct не может жить в куче (оно для этого специально придумано), а просто-struct может, поэтому ref-struct не может быть полем просто-struct. Компилятор на это ругается.

Ф>Когда кто-то, у кого его лямбда не компилируется попытается закрыть свою таску (по-быстрячку, перед релизом), то он не задумываясь удалит слово "ref". Всё ведь и правда заработает — серьёзно!


В смысле «не задумываясь»? Так можно не задумываясь struct на class заменить, тоже всё может без проблем работать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.