may be you could add a bug entry on the cog tracker

stef

On Apr 28, 2011, at 12:25 PM, Henrik Sperre Johansen wrote:

> On 28.04.2011 12:12, Toon Verwaest wrote:
>> nextPut: anObject
>>    "Primitive. Insert the argument at the next position in the Stream
>>    represented by the receiver. Fail if the collection of this stream is not 
>> an
>>    Array or a String. Fail if the stream is positioned at its end, or if the
>>    position is out of bounds in the collection. Fail if the argument is not
>>    of the right type for the collection. Optional. See Object documentation
>>    whatIsAPrimitive."
>> 
>> <primitive: 66>
>>    position >= writeLimit
>>        ifTrue: [^ self pastEndPut: anObject]
>>        ifFalse:
>>            [position := position + 1.
>>            ^collection at: position put: anObject]
>> 
>> The primitive will only fail if you are trying to write past the end. This 
>> check is very fast since it's primitive... and we'll only go in Smalltalk 
>> code when it fails. The first version on the other hand is always first some 
>> smalltalk code (quite a lot for your basic example) before it goes into a 
>> slightly more heavy primitive (replaceFrom:to:with:startingAt:).
> To be exact, the primitive always fails on Cog (not implemented, jitted 
> version is just as fast), and only works for non-ReadWriteable streams on 
> newish (last year or so) VM's :)
> http://forum.world.st/Bug-in-Interpreter-gt-gt-primitiveNextPut-td788236.html
> 
> The constant overhead is still lower than nextPutAll: of course.
> 
> Cheers,
> Henry
> 
> 
> 
> 
> 


Reply via email to