Deprecation warnings in 5.3 cause showstopper error in Seaside

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

Deprecation warnings in 5.3 cause showstopper error in Seaside

timrowledge
Here's a fun problem. Part of the 'finger pointing' even points at me for this one...

After loading Seaside into that clean 5.3 image it seems impossible to get Seaside to work. All that happens is a very unhelpful page saying
Internal Error: SystemVersion>>>  major

No amount of trying adaptor restarts etc does anything different. Eventually one realises that the error handling has broken somewhere, in such a way as to prevent it even printing the error properly. This is always a fun thing to solve.

Evidently somewhere a SystemVersion is being sent #major - but it does not implement it. OK, create an implementation and break on it. Dig deep into the stack and... #asMutator is sent to a Symbol, which is deprecated and that triggers the Seaside debug stack printing.

So, problem 1 - the deprecation checking clearly got turned off in my Pi image and I didn't notice adequately to understand what it might change. Damn. Disabling the deprecation warnings lets Seaside 'work' - except of course is still has the problem in the error handling that will bite later.

Where it goes wrong is in WAPharoWalkback>>#tempNamesAndValuesIn:do: that uses
` SystemVersion current major >= 8 ifTrue:[`
... which cannot work. Squeak hasn't implemented SystemVersion>>>  major since at least before Squeak 4.0.

I also suspect that despite the WAPharoWalkback class comment claiming it is a Squeak specific class, that in fact this is a Pharo specific class. Something about the class name... I dunno? Also of course, the Squeak major version name isn't 8, it's currently 5.

The good news is that simply changing the method to
tempNamesAndValuesIn: aContext do: aTwoArgumentBlock
        SystemVersion current majorVersionNumber >= 5 ifTrue:[
                aContext tempNames doWithIndex: [ :each :index |
                        aTwoArgumentBlock
                                value: each
                                value: (aContext namedTempAt: index) ] ]
lets the Seaside walkback work properly.

However, it seems odd that there is any guarding of the doWithIndex: clause - was there ever a time that it shouldn't have been evaluated? I don't *think* it would have been a problem pre-Closures but maybe?
Also, what is the best practical option for fixing this permanently? It clearly can't work in a Pharo image so some separation will be required. Maybe add a really-Squeak specific subclass of WAPharoWalkback to the Seaside-Pharo-Development-Core package? Add a(nother) squeak related package to the configuration?

tim
--
tim Rowledge; [hidden email]; http://www.rowledge.org/tim
Useful random insult:- Suffers from Clue Deficit Disorder.



Reply | Threaded
Open this post in threaded view
|

Re: Deprecation warnings in 5.3 cause showstopper error in Seaside

Tobias Pape

> On 17.06.2020, at 01:04, tim Rowledge <[hidden email]> wrote:
>
> Here's a fun problem. Part of the 'finger pointing' even points at me for this one...
>
> After loading Seaside into that clean 5.3 image it seems impossible to get Seaside to work. All that happens is a very unhelpful page saying
> Internal Error: SystemVersion>>>  major
>
> No amount of trying adaptor restarts etc does anything different. Eventually one realises that the error handling has broken somewhere, in such a way as to prevent it even printing the error properly. This is always a fun thing to solve.
>
> Evidently somewhere a SystemVersion is being sent #major - but it does not implement it. OK, create an implementation and break on it. Dig deep into the stack and... #asMutator is sent to a Symbol, which is deprecated and that triggers the Seaside debug stack printing.
>
> So, problem 1 - the deprecation checking clearly got turned off in my Pi image and I didn't notice adequately to understand what it might change. Damn. Disabling the deprecation warnings lets Seaside 'work' - except of course is still has the problem in the error handling that will bite later.
>
> Where it goes wrong is in WAPharoWalkback>>#tempNamesAndValuesIn:do: that uses
> ` SystemVersion current major >= 8 ifTrue:[`
> ... which cannot work. Squeak hasn't implemented SystemVersion>>>  major since at least before Squeak 4.0.
>
> I also suspect that despite the WAPharoWalkback class comment claiming it is a Squeak specific class, that in fact this is a Pharo specific class. Something about the class name... I dunno? Also of course, the Squeak major version name isn't 8, it's currently 5.
>
> The good news is that simply changing the method to
> tempNamesAndValuesIn: aContext do: aTwoArgumentBlock
> SystemVersion current majorVersionNumber >= 5 ifTrue:[
> aContext tempNames doWithIndex: [ :each :index |
> aTwoArgumentBlock
> value: each
> value: (aContext namedTempAt: index) ] ]
> lets the Seaside walkback work properly.
>
> However, it seems odd that there is any guarding of the doWithIndex: clause - was there ever a time that it shouldn't have been evaluated? I don't *think* it would have been a problem pre-Closures but maybe?

Here are the two relevant commits:

https://github.com/SeasideSt/Seaside/commit/20e082861098f511fc2fea1bdb463de8560ec25f
https://github.com/SeasideSt/Seaside/commit/3e430a7d294fdf3784abd62ec55fdfbedd20ffc8#diff-a0aa33163150c439089b33f44dec6a3f

It seems pharo before 8 used a different API to access the context…


> Also, what is the best practical option for fixing this permanently? It clearly can't work in a Pharo image so some separation will be required. Maybe add a really-Squeak specific subclass of WAPharoWalkback to the Seaside-Pharo-Development-Core package? Add a(nother) squeak related package to the configuration?

We have something like these already. Seaside-Squeak-Development-Core is maybe in order.
Or actually put that in Grease, where GemStone is already doing the right thing, more or less
        https://github.com/SeasideSt/Grease/blob/master/repository/Grease-GemStone-Core.package/GsContext.class/instance/tempNames.st

Best regards
        -Tobias


>
> tim




Reply | Threaded
Open this post in threaded view
|

Re: Deprecation warnings in 5.3 cause showstopper error in Seaside

Tobias Pape

> On 17.06.2020, at 01:16, Tobias Pape <[hidden email]> wrote:
>
>>
>> On 17.06.2020, at 01:04, tim Rowledge <[hidden email]> wrote:
>>
>> Here's a fun problem. Part of the 'finger pointing' even points at me for this one...
>>
>> After loading Seaside into that clean 5.3 image it seems impossible to get Seaside to work. All that happens is a very unhelpful page saying
>> Internal Error: SystemVersion>>>  major
>>
>> No amount of trying adaptor restarts etc does anything different. Eventually one realises that the error handling has broken somewhere, in such a way as to prevent it even printing the error properly. This is always a fun thing to solve.
>>
>> Evidently somewhere a SystemVersion is being sent #major - but it does not implement it. OK, create an implementation and break on it. Dig deep into the stack and... #asMutator is sent to a Symbol, which is deprecated and that triggers the Seaside debug stack printing.
>>
>> So, problem 1 - the deprecation checking clearly got turned off in my Pi image and I didn't notice adequately to understand what it might change. Damn. Disabling the deprecation warnings lets Seaside 'work' - except of course is still has the problem in the error handling that will bite later.
>>
>> Where it goes wrong is in WAPharoWalkback>>#tempNamesAndValuesIn:do: that uses
>> ` SystemVersion current major >= 8 ifTrue:[`
>> ... which cannot work. Squeak hasn't implemented SystemVersion>>>  major since at least before Squeak 4.0.
>>
>> I also suspect that despite the WAPharoWalkback class comment claiming it is a Squeak specific class, that in fact this is a Pharo specific class. Something about the class name... I dunno? Also of course, the Squeak major version name isn't 8, it's currently 5.
>>
>> The good news is that simply changing the method to
>> tempNamesAndValuesIn: aContext do: aTwoArgumentBlock
>> SystemVersion current majorVersionNumber >= 5 ifTrue:[
>> aContext tempNames doWithIndex: [ :each :index |
>> aTwoArgumentBlock
>> value: each
>> value: (aContext namedTempAt: index) ] ]
>> lets the Seaside walkback work properly.
>>
>> However, it seems odd that there is any guarding of the doWithIndex: clause - was there ever a time that it shouldn't have been evaluated? I don't *think* it would have been a problem pre-Closures but maybe?
>
> Here are the two relevant commits:
>
> https://github.com/SeasideSt/Seaside/commit/20e082861098f511fc2fea1bdb463de8560ec25f
> https://github.com/SeasideSt/Seaside/commit/3e430a7d294fdf3784abd62ec55fdfbedd20ffc8#diff-a0aa33163150c439089b33f44dec6a3f
>
> It seems pharo before 8 used a different API to access the context…
>
>
>> Also, what is the best practical option for fixing this permanently? It clearly can't work in a Pharo image so some separation will be required. Maybe add a really-Squeak specific subclass of WAPharoWalkback to the Seaside-Pharo-Development-Core package? Add a(nother) squeak related package to the configuration?
>
> We have something like these already. Seaside-Squeak-Development-Core is maybe in order.
> Or actually put that in Grease, where GemStone is already doing the right thing, more or less
> https://github.com/SeasideSt/Grease/blob/master/repository/Grease-GemStone-Core.package/GsContext.class/instance/tempNames.st
>

By that, I don't mean the implementation per se but the fact that there's a process abstraction with a "compatible"? api.
It mimics Squeaks process, btw.

I now wonder how the walkbacks have ever worked in Squeak after 2010…

Best regards
        -Tobias


>>
>> tim



Reply | Threaded
Open this post in threaded view
|

Re: Deprecation warnings in 5.3 cause showstopper error in Seaside

timrowledge


> On 2020-06-16, at 4:29 PM, Tobias Pape <[hidden email]> wrote:
>
>
> I now wonder how the walkbacks have ever worked in Squeak after 2010…

Me too! I haven't (so far as I can recall) had reason to try it in years. It wasn't really required for NuScratch, for example...


tim
--
tim Rowledge; [hidden email]; http://www.rowledge.org/tim
Strange OpCodes: BW: Branch on Whim



Reply | Threaded
Open this post in threaded view
|

Re: Deprecation warnings in 5.3 cause showstopper error in Seaside

timrowledge

I submitted https://github.com/SeasideSt/Seaside/issues/1204 to record this in the hope someone can make a nice clean solution for Seaside 3.5


tim
--
tim Rowledge; [hidden email]; http://www.rowledge.org/tim
Littergators resolve disputes about rubbish