Re:Removing Garbage Collection from the Rust Language (2013)
by seabrookmx on Monday September 11, 2023 @03:23PM
(#37472409)
C# calls the first one "nullable reference types." When that build option is enabled, all types are non-nullable by default, and you can make them optionally nullable by declaring them like "MyClass? cls = null;"
The compiler will ensure you check for null before de-referencing a nullable type.
Re:Removing Garbage Collection from the Rust Language (2013)
by tazjin on Monday September 11, 2023 @05:57PM
(#37474262)
How does this interact with third-party dependencies you use? In my experience, most gradual typing things break down at that boundary.
Re:Removing Garbage Collection from the Rust Language (2013)
by seabrookmx on Tuesday September 12, 2023 @12:14PM
(#37483511)
This isn't gradual typing? If libraries are not compiled with the compiler option, then all their reference types will be deemed nullable and I need to check for null before dereferencing. I can't do something like "GetItem().Name" if "GetItem()" returns a reference type like I could in Java, GoLang, JS, etc. If that library did use the flag and was provably non-nullable, then I could.
- absence of null pointers
- proper sum types which can be statically checked for exhaustiveness
- statically controlled mutability (yes, borrow-checking is still useful if you have a GC!)
Also no exceptions, but that's not a type system feature.