[Vm-dev] Cuis now runs with latest Cog, but I don't understand the problem we had

Eliot Miranda eliot.miranda at gmail.com
Sat Apr 30 14:44:24 UTC 2016


Hi Nicolas,

    on a point of terminology...

> On Apr 28, 2016, at 12:39 PM, Nicolas Cellier <nicolas.cellier.aka.nice at gmail.com> wrote:
> 
> Moreover, as long as you write primitive: 110 in cog, you don't invoke primitive 110.
> You rather invoke genPrimitiveIdentical.
> Please try the snippet on a StackVM.

Yes, one /does/ invoke primitive 110; that's what the primitive pragma specifies.  But the VM doesn't necessarily invoke the primitiveIdentical implementation of primitive 110 in the interpreter and will very likely invoke code generated by genPrimitiveIdentical.

> 
> genPrimitiveIdentical has been slightly refactored, but I see no obvious problem by just reading code.
> Moreover, when you use Object = you'll also call same methods in the end...
> This would deserve experimenting VMSimulator... (I don't have the Bochs plugin working now)
> 
> 2016-04-28 21:21 GMT+02:00 Nicolas Cellier <nicolas.cellier.aka.nice at gmail.com>:
>> Hi Juan, then how do you explain:
>> 
>> "Just to clarify: the issue was experienced only when running on Cog...
>> current versions of the Stack VM performed as expected."
>> 
>> 
>> 2016-04-28 21:10 GMT+02:00 Juan Vuletich <JuanVuletich at zoho.com>:
>>> 
>>>> On 4/28/2016 2:13 PM, Phil (list) wrote:
>>>> 
>>>>> On Thu, 2016-04-28 at 12:58 -0400, Phil (list) wrote:
>>>>>> On Thu, 2016-04-28 at 16:43 +0200, Clément Bera wrote:
>>>>>>   Have you tried on latest VM ? I remembered fixing a bug on #==
>>>>>> primitive like a month ago. The problem was when performing #==
>>>>>> primitive with the argument being a forwarder to an immediate.
>>>>> The problem still existed as of Cog #3686 (Juan found the fix
>>>>> yesterday.)  On my system, Cuis last worked perfectly with 3370,
>>>>> mostly
>>>>> worked with 3390, somewhat worked with 3427 and did not work after
>>>>> that
>>>>> until we found the Character>>#= bug/fix.
>>>> Just to clarify: the issue was experienced only when running on Cog...
>>>> current versions of the Stack VM performed as expected.
>>> 
>>> Fortunately I work with Gera Richarte @ Satellogic, and it didn't take long for him to suggest an explanation: Maybe prim 110 is broken in recent Cog VMs, but nobody notices it because the only sender is #== that is already optimized by the jitter, so prim 110 is never really called. And I realized we can test that theory. First, we add this method to Character:
>>> 
>>> === aCharacter
>>> <primitive: 110>
>>>     self halt
>>> 
>>> Then the following snippet (in latest Cuis, #2744):
>>> 
>>>     0 to: 255 do: [ :i1 | 0 to: 255 do: [ :i2 | i1 = i2 ifFalse: [(Character value: i1) === (Character value: i2) ifTrue: [{i1.i2} print ]]]]
>>> 
>>> prints nothing if run with Cog 3370, but prints a lot of pairs in more recent Cog. So I think Gera is right.
>>> 
>>> Thanks,
>>> Juan Vuletich
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20160430/b548b12c/attachment.htm


More information about the Vm-dev mailing list