Re: [Moose-dev] Re: XML Parser / Pastell

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

Re: [Moose-dev] Re: XML Parser / Pastell

Alexandre Bergel
NB: I switch to Pharo

> Normally when you want to deprecate a method and discourage people  
> from using it you need only insert a "self deprecated: description"  
> line into it. When someone invokes such a method, they receive a  
> warning of its deprecation listing specifically its name and class.

Yep, I understand this.
Apparently, SAXDriver>>handleStartTag:attributes:namespaces:  
(indirectly) calls #startElement:attributes:, a deprecated method.
Do you think we should update handleStartTag:attributes:namespaces: ?  
Also, the method SAXHandler>>startElement:prefix:uri:attributes: is  
not covered by the test. I think it is important that this method is  
covered.

Cheers,
Alexandre


> I wanted to rename some of the handler messages in SAXHandler so  
> they would be more consistent with each other (note, for example,  
> the different argument order between  
> #startElement:namespaceURI:namesapce- and  
> #endElement:namespace:namespaceURI-) and also with other parts of  
> the API (-attributeList: vs. -atttributes:). Unfortunately, there is  
> no easy way to deprecate such messages. Users do not send them;  
> instead they override them in subclasses and expect the overridden  
> versions to be invoked by SAXDriver. Another problem is that the  
> handlers must degrade in a specific order, with each form invoking  
> the one taking the most arguments after it until the one taking the  
> fewest arguments (e.g., #startElement:attributes:) is reached.
>
> That unusual #forwardToDeprecatedHandler:withArgumentOrder:orTo:  
> message you discovered is the ad hoc solution. In renamed handlers  
> it checks to see if the old, deprecated version is implemented in  
> the class of the receiver and if it is, warns that it has been  
> deprecated and suggests using the new form--the caller--prior to  
> invoking the old form with the caller's arguments (reordered if  
> needed). If the deprecated version is not present, then it either  
> degrades in the normal fashion, invoking the version taking next-
> most arguments after itself (which may also check for a deprecated  
> version of itself) or do nothing if no other handler needs to be  
> invoked.
>
>>>
>>> The most recent version is completely string-based. The performance
>>> of the symbol-based predecessors was erratic; it would be terribly
>>> slow at first in a clean image and improve only after saving the
>>> image at least once. Even then my tests indicated that a purely
>>> string-based version would be faster. This is likely due to the
>>> initial overhead of interning symbols and then the subsequent
>>> overhead of looking them up. I did honestly prefer the #symbol
>>> syntax for naming things, but considering that the things so-named
>>> and the names themselves all begin life (from the tokenizer) as
>>> strings, it makes more sense (and requires less code) to keep them
>>> that way. It is also more portable, as we no longer need assume that
>>> Symbol is a subclass of String. I don't think this will cause issues
>>> in Squeak/Pharo code, as both systems (for now) assume #name =
>>> 'name'. Hopefully it will not cause too much trouble for Norbert.
>>>
>>> Alexandre, you should see an improvement in your benchmarks now.
>>
>> Indeed!
>> Cool!
>>
>> Alexandre
>>
>>>
>>>>>>> anElement attributes class (I wrote species but that will fail  
>>>>>>> in
>>>>>>> gemstone too I guess. Hell!)
>>>>>>
>>>>>> I just committed with species. Let me know. This is easy to  
>>>>>> adjust.
>>>>>>
>>>>> Ok.
>>>>>
>>>>>>>>> The gemstone XML Parser decides somehow to use
>>>>>>>>> IdentityDictionary internally. I think this should be  
>>>>>>>>> allowed. I
>>>>>>>>> just changed Dictionary to IdentityDictionary so the = test
>>>>>>>>> reflects the right type. If you change it it is clear that it
>>>>>>>>> fails. Because pharo uses Dictionary internally. So you might
>>>>>>>>> see that it is not a question of using Dictionary or
>>>>>>>>> IdentityDictionary but a question of the wrongness of using =
>>>>>>>>
>>>>>>>> How the XMLNodeTest should look like to accommodate your
>>>>>>>> situation?
>>>>>>>>
>>>>>>> I need to recheck this. The problem is really that the XML  
>>>>>>> Parser
>>>>>>> creatios instances of class Association but { #key->'value' }
>>>>>>> creates an instance of class SymbolAssociation. That means I  
>>>>>>> would
>>>>>>> know how to fix the test but I want to understand the  
>>>>>>> implications
>>>>>>> of all of this. I'll get to you if I know anything new.
>>>>>>
>>>>>> Ok.
>>>>>>
>>>>> My mail to the gemstone list led to a ticket about removing class
>>>>> checks from Association. That would be easing the handling a lot.
>>>>>
>>>>> Norbert
>>>>>>>
>>>>>>>
>>>>>>>> Alexandre
>>>>>>>>
>>>>>>>>>
>>>>>>>>>>> Here there is an assumption about the allAttributes  
>>>>>>>>>>> collection
>>>>>>>>>>> while using = as comparsion. But there is also an assumption
>>>>>>>>>>> about the order of the content. I changed this to
>>>>>>>>>>>
>>>>>>>>>>> self assert: (firstPerson allAttributes includesAllOf:
>>>>>>>>>>> #(#'first-name' #'employee-number' #'family-name')).
>>>>>>>>>>> self assert: (firstPerson allAttributeAssociations asArray
>>>>>>>>>>> includesAllOf: {(#'first-name'->'Bob'). (#'employee-number'-
>>>>>>>>>>>> 'A0000'). (#'family-name'->'Gates')}).
>>>>>>>>>>
>>>>>>>>>> Very right. My mistake. But wouldn't an asSortedCollection do
>>>>>>>>>> the thing? Do you not test the size of the array.
>>>>>>>>>>
>>>>>>>>>>> This is not the best way to do because the check is only in
>>>>>>>>>>> one direction but for this test it is ok. Somehow the second
>>>>>>>>>>> assert fails and I have to check what is going on here.
>>>>>>>>>>
>>>>>>>>>> Yeah, my mistake. Sorry. The elements may be differently
>>>>>>>>>> ordered. Would a asSortedCollection help?
>>>>>>>>>>
>>>>>>>>>> I have now granted you an access to the repository. You  
>>>>>>>>>> should
>>>>>>>>>> be able to directly commit in it.
>>>>>>>>>>
>>>>>>>>>> Jaayer, what is your Squeaksource account?
>>>>>>>>>>
>>>>>>>>>> Cheers,
>>>>>>>>>> Alexandre
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On 28.02.2010, at 02:01, Alexandre Bergel wrote:
>>>>>>>>>>>
>>>>>>>>>>>>> thanks for now. I did a first merge attempt. It will be
>>>>>>>>>>>>> quite a bit of work. For me the xml parser is an important
>>>>>>>>>>>>> component. With the newest changes it became biased  
>>>>>>>>>>>>> towards
>>>>>>>>>>>>> pharo. There are things like ClassTestCase, Unicode
>>>>>>>>>>>>> CharacterSet. These are for sure improvements/changes in
>>>>>>>>>>>>> pharo you like to use. But they make porting a lot more
>>>>>>>>>>>>> difficult. I would be glad if we could find some way to
>>>>>>>>>>>>> lower the porting barrier. The necessary class I could put
>>>>>>>>>>>>> in the squeak compat package in gemstone. But then the xml
>>>>>>>>>>>>> parser will depend on the squeak package which I don't  
>>>>>>>>>>>>> like.
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Hi Norbert,
>>>>>>>>>>>>
>>>>>>>>>>>> XMLParser effectively depends on Squeak specific classes. I
>>>>>>>>>>>> wrote a small script that identify the squeak classes  
>>>>>>>>>>>> used in
>>>>>>>>>>>> XML-Support. Here is the list: LanguageEnvironment,  
>>>>>>>>>>>> Unicode,
>>>>>>>>>>>> LocaleID, CharacterSet
>>>>>>>>>>>>
>>>>>>>>>>>> I guess that porting the whole multilingual support may not
>>>>>>>>>>>> be that easy. The tag xml:lang is used to select the proper
>>>>>>>>>>>> support. It should be easy for you to ignore it I guess.
>>>>>>>>>>>>
>>>>>>>>>>>> CharacterSet seems to be one that has to be ported. It is  
>>>>>>>>>>>> not
>>>>>>>>>>>> a big class. It depends on WideCharacterSet. I am not sure
>>>>>>>>>>>> whether this is useful in your case however.
>>>>>>>>>>>>
>>>>>>>>>>>> Cheers,
>>>>>>>>>>>> Alexandre
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>>>>>>>>>>>> Alexandre Bergel http://www.bergel.eu
>>>>>>>>>>>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>>>>>>>>>> Alexandre Bergel http://www.bergel.eu
>>>>>>>>>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>>>>>>>> Alexandre Bergel http://www.bergel.eu
>>>>>>>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>> --
>>>>>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>>>>>> Alexandre Bergel http://www.bergel.eu
>>>>>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>> --
>>>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>>>> Alexandre Bergel http://www.bergel.eu
>>>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>>> _______________________________________________
>>> Moose-dev mailing list
>>> [hidden email]
>>> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>>
>> --
>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>> Alexandre Bergel http://www.bergel.eu
>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>>
>>
>>
>>
>>
>> _______________________________________________
>> Moose-dev mailing list
>> [hidden email]
>> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
> _______________________________________________
> Moose-dev mailing list
> [hidden email]
> https://www.iam.unibe.ch/mailman/listinfo/moose-dev

--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.






_______________________________________________
Pharo-project mailing list
[hidden email]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project