Сообщение Re[11]: ref local vs null от 29.05.2019 20:11
Изменено 29.05.2019 20:31 alexzzzz
Re[11]: ref local vs null
Здравствуйте, vdimas, Вы писали:
A>>Максимум что можно сделать с самой ссылкой, перенаправить её в новое место, явно указав, куда именно;
V>Также с указателями, заметь.
V>В С++ с ссылками так поступать нельзя.
Потому что текущий синтаксис не позволяет отличить переназначение ссылки от присваивания. Есть более концептуальные причины?
A>>а не как с указателями, где можно прибавить к адресу левое число — авось куда-нибудь да попадём.
V>Да без проблем:
V>https://docs.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.unsafe.add?view=dotnet-plat-ext-2.1#System_Runtime_CompilerServices_Unsafe_Add__1___0__System_IntPtr_
V>...
Почему оно не на C#?
A>>Ссылка же указывает на какую-то конкретную ячейку памяти, в которой гарантированно хранится что-то полезное.
V>Угу, типа сабжа — ссылки на null.
При большом желании можно и ... строку сделать отрицательной длины. Того же уровня явление.
В пролетевшей ссылке на Гитхаб хотели в импортируемую нативную функцию, принимающую MyStruct*, вместо указателя отдавать null-ссылку. Функция просит указатель, в C# есть указатели, в чём проблема? От того что в коде где-то будет написано ref и не будет написано unsafe, он не станет ни безопаснее, ни надёжнее. Если кому-то страшно писать слово unsafe, то и правильно, оно специально страшное. Зато честное.
A>>Максимум что можно сделать с самой ссылкой, перенаправить её в новое место, явно указав, куда именно;
V>Также с указателями, заметь.
V>В С++ с ссылками так поступать нельзя.
Потому что текущий синтаксис не позволяет отличить переназначение ссылки от присваивания. Есть более концептуальные причины?
A>>а не как с указателями, где можно прибавить к адресу левое число — авось куда-нибудь да попадём.
V>Да без проблем:
V>https://docs.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.unsafe.add?view=dotnet-plat-ext-2.1#System_Runtime_CompilerServices_Unsafe_Add__1___0__System_IntPtr_
V>...
Почему оно не на C#?
A>>Ссылка же указывает на какую-то конкретную ячейку памяти, в которой гарантированно хранится что-то полезное.
V>Угу, типа сабжа — ссылки на null.
При большом желании можно и ... строку сделать отрицательной длины. Того же уровня явление.
В пролетевшей ссылке на Гитхаб хотели в импортируемую нативную функцию, принимающую MyStruct*, вместо указателя отдавать null-ссылку. Функция просит указатель, в C# есть указатели, в чём проблема? От того что в коде где-то будет написано ref и не будет написано unsafe, он не станет ни безопаснее, ни надёжнее. Если кому-то страшно писать слово unsafe, то и правильно, оно специально страшное. Зато честное.
Re[11]: ref local vs null
Здравствуйте, vdimas, Вы писали:
A>>Максимум что можно сделать с самой ссылкой, перенаправить её в новое место, явно указав, куда именно;
V>Также с указателями, заметь.
V>В С++ с ссылками так поступать нельзя.
Потому что текущий синтаксис не позволяет отличить переназначение ссылки от присваивания. Есть более концептуальные причины?
A>>а не как с указателями, где можно прибавить к адресу левое число — авось куда-нибудь да попадём.
V>Да без проблем:
V>https://docs.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.unsafe.add?view=dotnet-plat-ext-2.1#System_Runtime_CompilerServices_Unsafe_Add__1___0__System_IntPtr_
V>...
Почему оно не на C#?
A>>Указатель подразумевает, что есть непревырвая последовательность ячеек памяти, которые можно последовательно или произвольно читать и писать.
V>Ты не поверишь... ))
Не поверю.
A>>Ссылка же указывает на какую-то конкретную ячейку памяти, в которой гарантированно хранится что-то полезное.
V>Угу, типа сабжа — ссылки на null.
При большом желании можно и ... строку сделать отрицательной длины. Того же уровня явление.
В пролетевшей ссылке на Гитхаб хотели в импортируемую нативную функцию, принимающую MyStruct*, вместо указателя отдавать null-ссылку. Функция просит указатель, в C# есть указатели, в чём проблема? От того что в коде где-то будет написано ref и не будет написано unsafe, он не станет ни безопаснее, ни надёжнее. Если кому-то страшно писать слово unsafe, то и правильно, оно специально страшное. Зато честное.
A>>Максимум что можно сделать с самой ссылкой, перенаправить её в новое место, явно указав, куда именно;
V>Также с указателями, заметь.
V>В С++ с ссылками так поступать нельзя.
Потому что текущий синтаксис не позволяет отличить переназначение ссылки от присваивания. Есть более концептуальные причины?
A>>а не как с указателями, где можно прибавить к адресу левое число — авось куда-нибудь да попадём.
V>Да без проблем:
V>https://docs.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.unsafe.add?view=dotnet-plat-ext-2.1#System_Runtime_CompilerServices_Unsafe_Add__1___0__System_IntPtr_
V>...
Почему оно не на C#?
A>>Указатель подразумевает, что есть непревырвая последовательность ячеек памяти, которые можно последовательно или произвольно читать и писать.
V>Ты не поверишь... ))
Не поверю.
A>>Ссылка же указывает на какую-то конкретную ячейку памяти, в которой гарантированно хранится что-то полезное.
V>Угу, типа сабжа — ссылки на null.
При большом желании можно и ... строку сделать отрицательной длины. Того же уровня явление.
В пролетевшей ссылке на Гитхаб хотели в импортируемую нативную функцию, принимающую MyStruct*, вместо указателя отдавать null-ссылку. Функция просит указатель, в C# есть указатели, в чём проблема? От того что в коде где-то будет написано ref и не будет написано unsafe, он не станет ни безопаснее, ни надёжнее. Если кому-то страшно писать слово unsafe, то и правильно, оно специально страшное. Зато честное.