3 ms·
I guess it might very well be safe. I don't know C# very well, but I'd assume that ref is sort of a proxy that 1) under the hood stores an (object) reference t
by jstimpfle 7y ago
I guess it might very well be safe. I don't know C# very well, but I'd assume that ref is sort of a proxy that
1) under the hood stores an (object) reference to the lowest structural ancestor that is GC'ed, as well as an offset from that object to the ref'ed property.
2) is itself GC'ed
Escape analysis might in some cases optimize out the GC'ing of the ref, but that of course doesn't work if the ref does escape.
Something like that, but in any case it's something very different than the Pascal/C++ examples we've talked about.
- pjmlp 7y agoThe generated code is similar as how a C++ compiler would do it. Easy to check with VS Assembly visualizer or WinDbg alongside SOS.dll. D, Ada, CLU, Mesa, Mesa/Cedar, Algol, PL/I, PL/S, PL.8, Delphi, Dylan, .NET, Swift, Oberon, Oberon-2, Component Pascal, Active Oberon, QuickBasic, Turbo Basic are just a couple of examples of languages allowing for pass by value and pass by reference, some of them also quite safe. And then there is also call by name introduced alongside Algol.