4 ms·
While I love option types, retrofitting them into languages which already have nulls has problems. Ask me about using a Java library that could return an optio
by Arcsech 9y ago
While I love option types, retrofitting them into languages which already have nulls has problems.
Ask me about using a Java library that could return an option type, which could be null, so you have to check for both the None return value AS WELL AS null.
- catnaroek 9y agoRetrofitting anything into anything always results in warts. Moral of the story: design things right, right from the beginning.
- tomsmeding 9y ago... which is practically impossible with larger projects that you can't oversee in a glance.
- catnaroek 9y agoSo don't bite more than you can chew?
- pjmlp 9y agoThe situation is known and will be fixed when the JVM gets value types, with minimal value types already on the horizon. https://wiki.openjdk.java.net/display/valhalla/Minimal+Value+Types https://wiki.openjdk.java.net/display/valhalla/Minimal+Value... Until then it is an issue that we have to live with.
- qznc 9y agoWhen or if? I heard one talk about Valhalla some time ago. If this project succeeds it will either be a miracle of engineering or a nightmare to use. Just one example: Java's type erasure trick does not work anymore when value types are type parameters, so it affects the build process. The current approach seems to be to construct specific instances at run time (or rather at class loader time). That is very late though, because some information (like return types) are lost after compilation.
- pjmlp 9y agoWhen. The ongoing changes related to value types, AOT compilation, and overall mechanical sympathy are driven from pressure in the Fintech industry. Which has been moving into Java during the last decade, and currently is eyeing other stacks that could given them the benefits of Java alongside those features, like e.g. Pony. So of course Oracle wants Java to stay relevant in those domains. You are required to annotate type parameters for the old reference behavior, currently that would be with the any modifier. Something like class Data<any T> { }
- lmm 9y agoThat's a problem you already have in Java with any other type though. If you have a List or a String or whatever it could always be null.
- cytzol 9y ago> Ask me about using a Java library that could return an option type, which could be null, so you have to check for both the None return value AS WELL AS null. No, you don't -- because those are two different kinds of null! If your library's function returns Optional.empty(), then it's because it successfully returned no value. If it returns null, though, then the library has a bug and you should crash instead of trying to continue in a known invalid state. Without the Optional type signature, the function would return null for both of these, and your program will appear to work even though it's just suffered a bug.
- Const-me 9y ago> retrofitting them into languages which already have nulls has problems I'm not sure I agree with that. See how MS did that in C# 7: https://www.kenneth-truyers.net/2016/01/25/new-features-in-c-sharp-7-part-2/ https://www.kenneth-truyers.net/2016/01/25/new-features-in-c...
- jacobparker 9y agoFYI that didn't ship in C# 7 More info: https://github.com/dotnet/csharplang/issues/36 https://github.com/dotnet/csharplang/issues/36