Nullable<T> i Nullable Reference Type są dwoma kompletnie różnymi rzeczami. To drugie nie jest typem, jest opcjonalnym atrybutem (javowym odpowiednikiem adnotacji) wstawianym przez kompilator. To nie jest typ, więc nie podlega wymazywaniu (pomijam już fakt, że generyki w dotnecie są reifikowane).
Genericsy w Javie też działają jak adnotacja. Da się odczytać z pliku .class jakie są ograniczenia typów dla klasy czy składowych w klasie, ale z instancji klasy nie da się wyczytać nic dodatkowego (i na tym właśnie polega wymazywanie).
Twoje pomieszanie z poplątaniem wynika z faktu, że zacząłeś googlować "znany" termin i dostałeś wyniki, których nie da się zrozumieć w minutę bez znajomości reszty języka.
Racja. Pomyślałem, że Nullable<T> ma coś wspólnego z Nullable Reference Types (dziwne, że dodają nową rzecz zamiast zrobić jedną porządną). W sumie nawet jak się je połączy (jakkolwiek by to rozumieć) to i tak nie dostanie się pełni możliwości Optionala.
Rust zrobił Optionale ciekawie. Rustowy system typów zawiera takie pojęcie jak niezerowe typy, dla których można zrobić zoptymalizowaną reprezentację Optiona, np:
https://doc.rust-lang.org/std/num/struct.NonZeroU32.html
An integer that is known not to equal zero.
This enables some memory layout optimization. For example, Option<NonZeroU32> is the same size as u32:
Ta optymalizacja przenosi się to na referencje:
https://doc.rust-lang.org/std/option/index.html#options-and-pointers-nullable-pointers
This usage of Option to create safe nullable pointers is so common that Rust does special optimizations to make the representation of Option<Box<T>> a single pointer. Optional pointers in Rust are stored as efficiently as any other pointer type.
Niestety podwójny Option już rozwala optymalizację:
Kopiuj
use std::mem::size_of;
fn main() {
assert_eq!(size_of::<Option<core::num::NonZeroU32>>(), size_of::<u32>()); // passes
assert_eq!(size_of::<Option<Option<core::num::NonZeroU32>>>(), size_of::<u32>()); // fails
}
Z drugiej strony w C# i tak nie da się zrobić analogicznego string?? cokolwiek więc nawet by do takiej sytuacji nie doszło.