Span - новая подковырка для собеседований
От: Shmj Ниоткуда  
Дата: 03.02.22 04:02
Оценка: -1
Что выведет прога?

var array = Fun1();
Console.WriteLine(array[0]);

Span<byte> Fun1()
{
    Span<byte> span = stackalloc byte[200];

    span[0] = 1;
    
    return span;
}
Re: Span - новая подковырка для собеседований
От: vaa  
Дата: 03.02.22 06:30
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Что выведет прога?

1?

☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: Span - новая подковырка для собеседований
От: vaa  
Дата: 03.02.22 06:31
Оценка: +3
Здравствуйте, Shmj, Вы писали:

S>Что выведет прога?

стэковые переменные не могут быть переданы за пределы функции?
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: Span - новая подковырка для собеседований
От: vaa  
Дата: 03.02.22 06:43
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Что выведет прога?


сдаюсь!
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: Span - новая подковырка для собеседований
От: yenik  
Дата: 03.02.22 08:52
Оценка: +1
Не скомпилируется.
Re: Span - новая подковырка для собеседований
От: BlackEric http://black-eric.lj.ru
Дата: 03.02.22 09:34
Оценка: +2
Здравствуйте, Shmj, Вы писали:

S>Что выведет прога?


На dotnet 6 не собирается: "error CS8352: Cannot use local 'span' in this context because it may expose referenced variables outside of their declaration scope"
https://github.com/BlackEric001
Re[2]: Span - новая подковырка для собеседований
От: Shmj Ниоткуда  
Дата: 03.02.22 10:28
Оценка: :)
Здравствуйте, vaa, Вы писали:

vaa>сдаюсь!


Это ж не этюд — можно взять и запустить.

Просто, имхо, поведение не очевидно. Откуда компиллер знает что в Span и какая ему разница?
Re[3]: Span - новая подковырка для собеседований
От: alexzzzz  
Дата: 03.02.22 11:02
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Просто, имхо, поведение не очевидно. Откуда компиллер знает что в Span...

Видит.

S>... и какая ему разница?

Чтобы предупреждать об ошибках.
Re[3]: Span - новая подковырка для собеседований
От: amironov79  
Дата: 03.02.22 11:21
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Просто, имхо, поведение не очевидно. Откуда компиллер знает что в Span и какая ему разница?


Это поведение описывается в любой вводной статье про Span.
Re[3]: Span - новая подковырка для собеседований
От: romangr Россия  
Дата: 03.02.22 11:27
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Просто, имхо, поведение не очевидно. Откуда компиллер знает что в Span и какая ему разница?


Курить до просвещения — https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-7.2/span-safety
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re: Span - новая подковырка для собеседований
От: Kolesiki  
Дата: 03.02.22 13:20
Оценка: +5
S>Что выведет прога?

Да пофиг, что она выведет! Это априори левый код. Брать всякое гогно и пытаться делать из собеседуемого "компилятор сишарп" — тупее конторы не найти! Ты не должен отвечать за чужой код, ты должен писать свой.
А для всяких ребусов — опять же, есть Рихтер, но эти "закавыки" вообще никак к интервью не относятся.
Re[2]: Span - новая подковырка для собеседований
От: alexzzzz  
Дата: 03.02.22 13:29
Оценка:
Здравствуйте, Kolesiki, Вы писали:

S>>Что выведет прога?


K>Да пофиг, что она выведет! Это априори левый код. Брать всякое гогно и пытаться делать из собеседуемого "компилятор сишарп" — тупее конторы не найти! Ты не должен отвечать за чужой код, ты должен писать свой.

K>А для всяких ребусов — опять же, есть Рихтер, но эти "закавыки" вообще никак к интервью не относятся.

Тут с первого взгляда на код видно, что так делать нельзя. По идее, ты об этом сразу так и скажешь. А если нет, то вдруг сам будешь пытаться такое писать в ожидании чуда. Ну нафиг.
Re[2]: Span - новая подковырка для собеседований
От: Shmj Ниоткуда  
Дата: 04.02.22 04:14
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>Да пофиг, что она выведет! Это априори левый код. Брать всякое гогно и пытаться делать из собеседуемого "компилятор сишарп" — тупее конторы не найти! Ты не должен отвечать за чужой код, ты должен писать свой.


Ну тут не совсем ребус. Стек — это таки базовое понятие и если чел. примерно знает как стек работает — то уже плюс.

Я вот когда увидел возможность использовать stackalloc у управляемом коде — сразу задался вопросом — а что же будет, если ссылку на стековою переменную передать за пределы стека? Думал получить stack fault exception — а тут фиг тебе, компиллер проверяет что хранится в Span.
Отредактировано 04.02.2022 4:28 Shmj . Предыдущая версия . Еще …
Отредактировано 04.02.2022 4:27 Shmj . Предыдущая версия .
Re[3]: Span - новая подковырка для собеседований
От: vaa  
Дата: 04.02.22 04:23
Оценка:
Здравствуйте, Shmj, Вы писали:


S> у неуправляемом коде


?

☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[4]: Span - новая подковырка для собеседований
От: Shmj Ниоткуда  
Дата: 04.02.22 05:42
Оценка: +1
Здравствуйте, vaa, Вы писали:

S>> у неуправляемом коде

vaa>


vaa>?


Ну зачем спрашивать — из контекста же понятно что перепутал.
Re[3]: Span - новая подковырка для собеседований
От: yenik  
Дата: 04.02.22 07:19
Оценка:
S>Я вот когда увидел возможность использовать stackalloc у управляемом коде — сразу задался вопросом — а что же будет, если ссылку на стековою переменную передать за пределы стека? Думал получить stack fault exception — а тут фиг тебе, компиллер проверяет что хранится в Span.

Он не проверяет, что хранится в Span. Он просто отмечает небезопасную инициализацию.
Так тоже не пройдёт, хотя по сути это безопасно. Но если убрать первую инициализацию span, то будет работать.

using System;

var array = Fun1();
Console.WriteLine(array[0]);

Span<byte> Fun1()
{
    Span<byte> span = stackalloc byte[200];        
    
    var arr = new byte[200];    
    span = arr;    
    
    span[0] = 1;
    
    return span;    
}
Re[3]: Span - новая подковырка для собеседований
От: alexzzzz  
Дата: 04.02.22 14:23
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Я вот когда увидел возможность использовать stackalloc у управляемом коде — сразу задался вопросом — а что же будет, если ссылку на стековою переменную передать за пределы стека? Думал получить stack fault exception — а тут фиг тебе, компиллер проверяет что хранится в Span.


Ну без unsafe он кроме как в Span никуда и не даст записать. Так задумано.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.