>  
> On Jan 21, 2020 at 5:37 PM,  <Rowan Tommins (mailto:rowan.coll...@gmail.com)> 
>  wrote:
>  
>  
>  
>  On 20/01/2020 00:53, Mike Schinkel wrote: 
> >  One approach mentioned by Andrea Faulds was to extend the hashtable (ref: 
> > your article[1]) and count types as assigned just like we currently count 
> > references. So a 10,240 element array of ints could have an internal 
> > tracker showing that the array contains type(s): ['int' =>  10240]. Append 
> > a string value to the array and then the types would be ['int' =>  10240, 
> > 'string' =>  1]. 
>
>
> This would work really well for simple types like 'int' and 'string', 
> but loses its advantage fast with things like interfaces and 
> pseudo-types. For instance, if you have an array with objects of 20 
> different classes, and need to check it against a constraint of 
> SomeInterface[], you still have to test all 20 classes to see if they 
> implement that interface. 
>
> The overhead is also rather high, because you have to allocate memory 
> for this list on every array, and keep it up to date on every write, 
> even if it's never used. 
>
> I've had a similar idea in the past, but rather than trying to list the 
> types in advance, just cache them after passing (or failing) a type 
> check, so more like [ 'SomeInterface[]' =>  true, 'SomeOtherInterface[]' 
> =>  false ]. Even if you just wiped the cache completely on every write, 
> I think that would give a decent boost, because there will often be 
> cases where a value is passed through a series of related functions all 
> expecting the same type. 
>
> The worst case pseudotype is probably "callable[]", because it's 
> actually context-dependent (e.g. [$object, 'privateMethod] is only 
> "callable" inside the same class as $object) so can't be pre-calculated 
> or cached. That would be problematic even with full generics - 
> logically, List<callable>  would check each member was callable when it 
> was added to the list, but it might turn out not to be callable when it 
> was accessed later.   
>  
>    
>  
>    
>  
>    
>  
>        

 
>  
 
 
Those are all really good points.
 

 
Unfortunately. :-(
 

 
-Mike
 
 
     

Reply via email to