Pharo 4.0 -- Inspecting a recursive data structure is slow

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
11 messages Options
Reply | Threaded
Open this post in threaded view
|

Pharo 4.0 -- Inspecting a recursive data structure is slow

Hannes Hirzel
Hello

I have realized that inspecting a recursive data structure is very
slow in Pharo 4.0

A test case:

| myDict |
myDict := Dictionary new.
myDict at: #hello put: 'hello'.
myDict at: #recurHello put: myDict.
myDict inspect

It takes a long time for the inspector to come up. And the image
freezes later on if you continue.

The problem is with the inspector because if I do
| myDict |
myDict := Dictionary new.
myDict at: #hello put: 'hello'.
myDict at: #recurHello put: myDict.
3 + 4 inspect

it comes up instantly.


As a comparison I attach the Cuis ** test result. The inspector comes
up instantly and the image does not have any problems.


What are the workarounds in Pharo 4.0?

- Setting a time out somewhere?
- Disabling certain functions?
- Loading a simpler inspector?

Regards

Hannes


** current build  2463.image
https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev

Cuis.2463_recursive_dict_test.png (55K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Pharo 4.0 -- Inspecting a recursive data structure is slow

Andrei Chis
Hi Hannes,

Can open a bug report?
I though most recursive problems were fixed in the new inspector.
Seems that there are still some related to printing recursive structures.

You can switch to the previous inspector (GTInspector setGTInspectorEnabledStatus: false),
however, this bug seem to also kill that inspector.

Cheers,
Andrei

On Sat, Aug 29, 2015 at 7:16 AM, H. Hirzel <[hidden email]> wrote:
Hello

I have realized that inspecting a recursive data structure is very
slow in Pharo 4.0

A test case:

| myDict |
myDict := Dictionary new.
myDict at: #hello put: 'hello'.
myDict at: #recurHello put: myDict.
myDict inspect

It takes a long time for the inspector to come up. And the image
freezes later on if you continue.

The problem is with the inspector because if I do
| myDict |
myDict := Dictionary new.
myDict at: #hello put: 'hello'.
myDict at: #recurHello put: myDict.
3 + 4 inspect

it comes up instantly.


As a comparison I attach the Cuis ** test result. The inspector comes
up instantly and the image does not have any problems.


What are the workarounds in Pharo 4.0?

- Setting a time out somewhere?
- Disabling certain functions?
- Loading a simpler inspector?

Regards

Hannes


** current build  2463.image
https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev

Reply | Threaded
Open this post in threaded view
|

Re: Pharo 4.0 -- Inspecting a recursive data structure is slow

Hannes Hirzel
Andrei,

Thanks for confirming the bug.

Report is here

    https://pharo.fogbugz.com/f/cases/16425/Pharo-4-0-Inspecting-a-recursive-data-structure-is-slow

--Hannes

On 8/29/15, Andrei Chis <[hidden email]> wrote:

> Hi Hannes,
>
> Can open a bug report?
> I though most recursive problems were fixed in the new inspector.
> Seems that there are still some related to printing recursive structures.
>
> You can switch to the previous inspector (GTInspector
> setGTInspectorEnabledStatus: false),
> however, this bug seem to also kill that inspector.
>
> Cheers,
> Andrei
>
> On Sat, Aug 29, 2015 at 7:16 AM, H. Hirzel <[hidden email]> wrote:
>
>> Hello
>>
>> I have realized that inspecting a recursive data structure is very
>> slow in Pharo 4.0
>>
>> A test case:
>>
>> | myDict |
>> myDict := Dictionary new.
>> myDict at: #hello put: 'hello'.
>> myDict at: #recurHello put: myDict.
>> myDict inspect
>>
>> It takes a long time for the inspector to come up. And the image
>> freezes later on if you continue.
>>
>> The problem is with the inspector because if I do
>> | myDict |
>> myDict := Dictionary new.
>> myDict at: #hello put: 'hello'.
>> myDict at: #recurHello put: myDict.
>> 3 + 4 inspect
>>
>> it comes up instantly.
>>
>>
>> As a comparison I attach the Cuis ** test result. The inspector comes
>> up instantly and the image does not have any problems.
>>
>>
>> What are the workarounds in Pharo 4.0?
>>
>> - Setting a time out somewhere?
>> - Disabling certain functions?
>> - Loading a simpler inspector?
>>
>> Regards
>>
>> Hannes
>>
>>
>> ** current build  2463.image
>> https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev
>>
>

Reply | Threaded
Open this post in threaded view
|

Re: Pharo 4.0 -- Inspecting a recursive data structure is slow

Marcus Denker-4
It seems to be fixed in Pharo5 already. Debugger comes up within less than a second and is usable.

        Marcus

> On 29 Aug 2015, at 11:57, H. Hirzel <[hidden email]> wrote:
>
> Andrei,
>
> Thanks for confirming the bug.
>
> Report is here
>
>    https://pharo.fogbugz.com/f/cases/16425/Pharo-4-0-Inspecting-a-recursive-data-structure-is-slow
>
> --Hannes
>
> On 8/29/15, Andrei Chis <[hidden email]> wrote:
>> Hi Hannes,
>>
>> Can open a bug report?
>> I though most recursive problems were fixed in the new inspector.
>> Seems that there are still some related to printing recursive structures.
>>
>> You can switch to the previous inspector (GTInspector
>> setGTInspectorEnabledStatus: false),
>> however, this bug seem to also kill that inspector.
>>
>> Cheers,
>> Andrei
>>
>> On Sat, Aug 29, 2015 at 7:16 AM, H. Hirzel <[hidden email]> wrote:
>>
>>> Hello
>>>
>>> I have realized that inspecting a recursive data structure is very
>>> slow in Pharo 4.0
>>>
>>> A test case:
>>>
>>> | myDict |
>>> myDict := Dictionary new.
>>> myDict at: #hello put: 'hello'.
>>> myDict at: #recurHello put: myDict.
>>> myDict inspect
>>>
>>> It takes a long time for the inspector to come up. And the image
>>> freezes later on if you continue.
>>>
>>> The problem is with the inspector because if I do
>>> | myDict |
>>> myDict := Dictionary new.
>>> myDict at: #hello put: 'hello'.
>>> myDict at: #recurHello put: myDict.
>>> 3 + 4 inspect
>>>
>>> it comes up instantly.
>>>
>>>
>>> As a comparison I attach the Cuis ** test result. The inspector comes
>>> up instantly and the image does not have any problems.
>>>
>>>
>>> What are the workarounds in Pharo 4.0?
>>>
>>> - Setting a time out somewhere?
>>> - Disabling certain functions?
>>> - Loading a simpler inspector?
>>>
>>> Regards
>>>
>>> Hannes
>>>
>>>
>>> ** current build  2463.image
>>> https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev
>>>
>>
>


Reply | Threaded
Open this post in threaded view
|

Re: Pharo 4.0 -- Inspecting a recursive data structure is slow

Andrei Chis
Was there an issue/fix for this in Pharo 5?
It might be worth backporting to Pharo 4.

On Sat, Aug 29, 2015 at 12:06 PM, Marcus Denker <[hidden email]> wrote:
It seems to be fixed in Pharo5 already. Debugger comes up within less than a second and is usable.

        Marcus
> On 29 Aug 2015, at 11:57, H. Hirzel <[hidden email]> wrote:
>
> Andrei,
>
> Thanks for confirming the bug.
>
> Report is here
>
>    https://pharo.fogbugz.com/f/cases/16425/Pharo-4-0-Inspecting-a-recursive-data-structure-is-slow
>
> --Hannes
>
> On 8/29/15, Andrei Chis <[hidden email]> wrote:
>> Hi Hannes,
>>
>> Can open a bug report?
>> I though most recursive problems were fixed in the new inspector.
>> Seems that there are still some related to printing recursive structures.
>>
>> You can switch to the previous inspector (GTInspector
>> setGTInspectorEnabledStatus: false),
>> however, this bug seem to also kill that inspector.
>>
>> Cheers,
>> Andrei
>>
>> On Sat, Aug 29, 2015 at 7:16 AM, H. Hirzel <[hidden email]> wrote:
>>
>>> Hello
>>>
>>> I have realized that inspecting a recursive data structure is very
>>> slow in Pharo 4.0
>>>
>>> A test case:
>>>
>>> | myDict |
>>> myDict := Dictionary new.
>>> myDict at: #hello put: 'hello'.
>>> myDict at: #recurHello put: myDict.
>>> myDict inspect
>>>
>>> It takes a long time for the inspector to come up. And the image
>>> freezes later on if you continue.
>>>
>>> The problem is with the inspector because if I do
>>> | myDict |
>>> myDict := Dictionary new.
>>> myDict at: #hello put: 'hello'.
>>> myDict at: #recurHello put: myDict.
>>> 3 + 4 inspect
>>>
>>> it comes up instantly.
>>>
>>>
>>> As a comparison I attach the Cuis ** test result. The inspector comes
>>> up instantly and the image does not have any problems.
>>>
>>>
>>> What are the workarounds in Pharo 4.0?
>>>
>>> - Setting a time out somewhere?
>>> - Disabling certain functions?
>>> - Loading a simpler inspector?
>>>
>>> Regards
>>>
>>> Hannes
>>>
>>>
>>> ** current build  2463.image
>>> https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev
>>>
>>
>



Reply | Threaded
Open this post in threaded view
|

Re: Pharo 4.0 -- Inspecting a recursive data structure is slow

Hannes Hirzel
In reply to this post by Marcus Denker-4
On 8/29/15, Marcus Denker <[hidden email]> wrote:
> It seems to be fixed in Pharo5 already. Debugger comes up within less than a
> second and is usable.

Very welcome.
I assume you mean 'Inspector' (not debugger)

>
> Marcus
>> On 29 Aug 2015, at 11:57, H. Hirzel <[hidden email]> wrote:
>>
>> Andrei,
>>
>> Thanks for confirming the bug.
>>
>> Report is here
>>
>>
>> https://pharo.fogbugz.com/f/cases/16425/Pharo-4-0-Inspecting-a-recursive-data-structure-is-slow
>>
>> --Hannes
>>
>> On 8/29/15, Andrei Chis <[hidden email]> wrote:
>>> Hi Hannes,
>>>
>>> Can open a bug report?
>>> I though most recursive problems were fixed in the new inspector.
>>> Seems that there are still some related to printing recursive
>>> structures.
>>>
>>> You can switch to the previous inspector (GTInspector
>>> setGTInspectorEnabledStatus: false),
>>> however, this bug seem to also kill that inspector.
>>>
>>> Cheers,
>>> Andrei
>>>
>>> On Sat, Aug 29, 2015 at 7:16 AM, H. Hirzel <[hidden email]>
>>> wrote:
>>>
>>>> Hello
>>>>
>>>> I have realized that inspecting a recursive data structure is very
>>>> slow in Pharo 4.0
>>>>
>>>> A test case:
>>>>
>>>> | myDict |
>>>> myDict := Dictionary new.
>>>> myDict at: #hello put: 'hello'.
>>>> myDict at: #recurHello put: myDict.
>>>> myDict inspect
>>>>
>>>> It takes a long time for the inspector to come up. And the image
>>>> freezes later on if you continue.
>>>>
>>>> The problem is with the inspector because if I do
>>>> | myDict |
>>>> myDict := Dictionary new.
>>>> myDict at: #hello put: 'hello'.
>>>> myDict at: #recurHello put: myDict.
>>>> 3 + 4 inspect
>>>>
>>>> it comes up instantly.
>>>>
>>>>
>>>> As a comparison I attach the Cuis ** test result. The inspector comes
>>>> up instantly and the image does not have any problems.
>>>>
>>>>
>>>> What are the workarounds in Pharo 4.0?
>>>>
>>>> - Setting a time out somewhere?
>>>> - Disabling certain functions?
>>>> - Loading a simpler inspector?
>>>>
>>>> Regards
>>>>
>>>> Hannes
>>>>
>>>>
>>>> ** current build  2463.image
>>>> https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev
>>>>
>>>
>>
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Pharo 4.0 -- Inspecting a recursive data structure is slow

Hannes Hirzel
In reply to this post by Andrei Chis
On 8/29/15, Andrei Chis <[hidden email]> wrote:
> Was there an issue/fix for this in Pharo 5?
> It might be worth backporting to Pharo 4.

If it is not a big effort, yes please.


>
> On Sat, Aug 29, 2015 at 12:06 PM, Marcus Denker <[hidden email]>
> wrote:
>
>> It seems to be fixed in Pharo5 already. Debugger comes up within less
>> than
>> a second and is usable.
>>
>>         Marcus
>> > On 29 Aug 2015, at 11:57, H. Hirzel <[hidden email]> wrote:
>> >
>> > Andrei,
>> >
>> > Thanks for confirming the bug.
>> >
>> > Report is here
>> >
>> >
>> https://pharo.fogbugz.com/f/cases/16425/Pharo-4-0-Inspecting-a-recursive-data-structure-is-slow
>> >
>> > --Hannes
>> >
>> > On 8/29/15, Andrei Chis <[hidden email]> wrote:
>> >> Hi Hannes,
>> >>
>> >> Can open a bug report?
>> >> I though most recursive problems were fixed in the new inspector.
>> >> Seems that there are still some related to printing recursive
>> structures.
>> >>
>> >> You can switch to the previous inspector (GTInspector
>> >> setGTInspectorEnabledStatus: false),
>> >> however, this bug seem to also kill that inspector.
>> >>
>> >> Cheers,
>> >> Andrei
>> >>
>> >> On Sat, Aug 29, 2015 at 7:16 AM, H. Hirzel <[hidden email]>
>> wrote:
>> >>
>> >>> Hello
>> >>>
>> >>> I have realized that inspecting a recursive data structure is very
>> >>> slow in Pharo 4.0
>> >>>
>> >>> A test case:
>> >>>
>> >>> | myDict |
>> >>> myDict := Dictionary new.
>> >>> myDict at: #hello put: 'hello'.
>> >>> myDict at: #recurHello put: myDict.
>> >>> myDict inspect
>> >>>
>> >>> It takes a long time for the inspector to come up. And the image
>> >>> freezes later on if you continue.
>> >>>
>> >>> The problem is with the inspector because if I do
>> >>> | myDict |
>> >>> myDict := Dictionary new.
>> >>> myDict at: #hello put: 'hello'.
>> >>> myDict at: #recurHello put: myDict.
>> >>> 3 + 4 inspect
>> >>>
>> >>> it comes up instantly.
>> >>>
>> >>>
>> >>> As a comparison I attach the Cuis ** test result. The inspector comes
>> >>> up instantly and the image does not have any problems.
>> >>>
>> >>>
>> >>> What are the workarounds in Pharo 4.0?
>> >>>
>> >>> - Setting a time out somewhere?
>> >>> - Disabling certain functions?
>> >>> - Loading a simpler inspector?
>> >>>
>> >>> Regards
>> >>>
>> >>> Hannes
>> >>>
>> >>>
>> >>> ** current build  2463.image
>> >>> https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev
>> >>>
>> >>
>> >
>>
>>
>>
>

Reply | Threaded
Open this post in threaded view
|

Re: Pharo 4.0 -- Inspecting a recursive data structure is slow

Marcus Denker-4
In reply to this post by Hannes Hirzel

> On 29 Aug 2015, at 13:27, H. Hirzel <[hidden email]> wrote:
>
> On 8/29/15, Marcus Denker <[hidden email]> wrote:
>> It seems to be fixed in Pharo5 already. Debugger comes up within less than a
>> second and is usable.
>
> Very welcome.
> I assume you mean 'Inspector' (not debugger)
>

Yes.
        Marcus
Reply | Threaded
Open this post in threaded view
|

Re: Pharo 4.0 -- Inspecting a recursive data structure is slow

Marcus Denker-4
In reply to this post by Andrei Chis

> On 29 Aug 2015, at 12:58, Andrei Chis <[hidden email]> wrote:
>
> Was there an issue/fix for this in Pharo 5?
> It might be worth backporting to Pharo 4.
>
Maybe one related to what is printed for the dictionary.
It used to be very slow for large collections

https://pharo.fogbugz.com/f/cases/15311/The-display-string-for-collection-makes-it-difficult-to-inspect
Reply | Threaded
Open this post in threaded view
|

Re: Pharo 4.0 -- Inspecting a recursive data structure is slow

Hannes Hirzel
As for me no need to hurry. I switch now to Pharo 5 build 50287 in the
meantime. I will continue using that if I do not  run into larger
problems.

--Hannes

On 8/29/15, Marcus Denker <[hidden email]> wrote:

>
>> On 29 Aug 2015, at 12:58, Andrei Chis <[hidden email]> wrote:
>>
>> Was there an issue/fix for this in Pharo 5?
>> It might be worth backporting to Pharo 4.
>>
> Maybe one related to what is printed for the dictionary.
> It used to be very slow for large collections
>
> https://pharo.fogbugz.com/f/cases/15311/The-display-string-for-collection-makes-it-difficult-to-inspect
>

Reply | Threaded
Open this post in threaded view
|

Re: Pharo 4.0 -- Inspecting a recursive data structure is slow

Nicolai Hess
No this doesn't even fully work for the GTInspector (even not in Pharo 5.0).

It is the same issue Ben discovered when working with the pointer explorer.
(http://forum.world.st/Proposal-for-LiteralArray-class-tp4803015.html
and
http://forum.world.st/Fwd-14827-ProtoObject-pointersTo-failing-circular-references-tp4802576.html)

The problem is that arrays printOn:
does not check for already visited objects
(squeak does this, but the implementation in pharo changed).

For example, in Pharo 50

| myDict |
myDict := Dictionary new.
myDict at: #hello put: 'hello'.
myDict at: #recurHello put: myDict.
myDict inspect

you can open the inspector, but selecting the first element in the "keys" tab makes the image
unresponsive. The same happens if you select the #array instvar in the "raw" tab.



2015-08-29 15:16 GMT+02:00 H. Hirzel <[hidden email]>:
As for me no need to hurry. I switch now to Pharo 5 build 50287 in the
meantime. I will continue using that if I do not  run into larger
problems.

--Hannes

On 8/29/15, Marcus Denker <[hidden email]> wrote:
>
>> On 29 Aug 2015, at 12:58, Andrei Chis <[hidden email]> wrote:
>>
>> Was there an issue/fix for this in Pharo 5?
>> It might be worth backporting to Pharo 4.
>>
> Maybe one related to what is printed for the dictionary.
> It used to be very slow for large collections
>
> https://pharo.fogbugz.com/f/cases/15311/The-display-string-for-collection-makes-it-difficult-to-inspect
>