3 ms·
`non-nil` was deemed too breaking to introduce for 1.0 or even as a default because if you tagged your input as `T not nil` the compiler was not powerful enough
by mratsim 6y ago
`non-nil` was deemed too breaking to introduce for 1.0 or even as a default because if you tagged your input as `T not nil` the compiler was not powerful enough to prove that T was indeed not nil except in the most obvious cases.
The new battleplan is to integrate the Z3 theorem prover into Nim as DrNim:
- https://nim-lang.org/docs/drnim.html https://nim-lang.org/docs/drnim.html
The first use-case will be proving array bounds at compile-time and elide them. Future use-cases include not nil tracking.
- Isomorpheus 6y agoThis sounds pretty cool, but, two thoughts 1) Echoing the other comments in this thread about uneasiness with feature creep 2) Wouldn't have been a breaking change if the language didn't have nil from the beginning
- mratsim 6y ago1: DrNim is basically additional annotations that are ignored, and you can choose to opt-in via a flag. It's something you similar to MyPy for python and type annotations. The danger is if it becomes non-optional. That said contrary too many languages, the core language doesn't need: - threading - async which are huge parts to maintain, but thanks to metaprogramming you can implement them as libraries with very nice syntax as well. It also allows compiler devs to focus on what they know well, compilers and leave those 2 highly specialized areas to people who are experts (or become experts) in those. 2: There are 2 dimensions there: nil is used for C FFI, for higher-level primitives you can use Option. And C FFI was needed to bootstrap Nim with a useful set of functionality and has an escape hatch so that people could start building early on and not wait for the language. So both from a functionality and a time-to-market point of view it was necessary.