[fpc-pascal] Optional param modifier

Benito van der Zander benito at benibela.de
Sun Apr 14 01:02:26 CEST 2019

>> Perhaps there could be the opposite modifier, so the function cannot be called with nil. Like
> Interesting idea but I’d have to think about it more to know if this is a real problem I’ve ever experienced.

for example, I store some interfaces in a list, and just replaced the 
default list with a faster list that assumes all interfaces in the list 
are non-nil. (When you know the interface is non-nil, you can replace 
the automatic reference counting with a direct call to ._addref, which 
is faster. )

But then it crashed because somewhere it was used with a nil interface. 
There it would have been useful to mark the new function as only non-nil 
accepting, so that it is clear it cannot be used like the old function, 
and the compiler have made sure there is no call with nil

> Well, as far as the "optional" part goes, the benefits of it will be 
> fairly limited. Object variables occur in many places, and all of them 
> can have the nil value, and the compiler has no idea if you did the 
> check.
> You pick a tiny subset of those cases, and attempt to add protection 
> to it. Given the gain (or rather absence of it, according to the 
> microscopic size of that subset) the effort (and chance of false 
> positives) is not worth it. 

You would need to have optional or non-nil markers at every variable, 
before it becomes really useful.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20190414/9d3c9606/attachment.html>

More information about the fpc-pascal mailing list