It’s true that when you do a lot of cross-dialect development, such a method is 
often what you desire.
However, I think it’s better to do feature detection instead of dialect 
detection. So, something like:

((Smalltalk includesKey: #CharacterWriteStream) ifTrue:[
  stream := CharacterWriteStream on: (String new: 10)
] ifFalse:[
  stream := WriteStream on: (String new: 10)
]

And yes: use Grease where applicable. We try to maintain Grease across Pharo, 
Squeak and Gemstone. I also think it’s actively ported to VA.

cheers
Johan

On 05 Oct 2014, at 09:00, stepharo <steph...@free.fr> wrote:

> Hi jan
> 
> Thanks for the proposal.
> I thought about it and I'm against because it goes again the idea of dispatch.
> I prefer to have a class and some dispatch. Seaside with Grease is the way to 
> go from my perspective.
> Finally I do not want such methods in the systems because I spent my time 
> removing isXXXX because of bad design.
> Let us see what other people think.
> 
> Stef
> 
> On 4/10/14 22:14, Jan Vrany wrote:
>> Hi guys,
>> 
>> I've just opened:
>> 
>> https://pharo.fogbugz.com/f/cases/14160/Introduce-isXXX-dialect-testing-methods-to-SmalltalkImage-to-ease-cross-dialect-development
>> 
>> Introduce isXXX (isPharo, isVisualWorks, ...) dialect testing methods to
>> SmalltalkImage to ease multi-dialect development.
>> 
>> RATIONALE:
>> 
>> Commonly used approach to solve differences among dialect is to use a
>> sort of platform object and dispatch there for troublesome operations
>> that has to be specialized. This platform object is usually in platform
>> specific package.
>> Other option is to load some library like Grease or Sport.
>> 
>> The problem of the first approach is that brings to much (unnecessary)
>> burden when used for two, three things. The amount of of the code and
>> management is way to bigger then the amount of the code that has to be
>> specialized. Loading Grease/Sport on the other hand introduces a
>> dependency on an external package - not worth of for two or three
>> things.
>> 
>> The proposed dialect testing messages would allow for simple,
>> #ifdef-like idiom like:
>> 
>> | stream |
>> ...
>> ((Smalltalk respondsTo: #isSomeCoolDialect) and:[Smalltalk
>> isSomeCoolDialect]) ifTrue:[
>>   stream := CharacterWriteStream on: (String new: 10)
>> ] ifFalse:[
>>   stream := WriteStream on: (String new: 10)
>> ]
>> 
>> The #respondsTo: check, while not nice, is required as at the moment not
>> all dialects could be trusted to have these testing messages.
>> 
>> Putting these methods may not stick with Pharo standard (whatever it
>> is), but Smalltalk global is probably one of the
>> very few that are present in pretty much every Smalltalk implementation.
>> Other option would be to place them to the class side of an Object
>> (which is amost certainly present everywhere), however
>> 
>> Smalltalk isPharo
>> 
>> reads better than
>> 
>> Object isPharo.
>> 
>> Best, Jan
>> 
>> 
>> 
> 
> 


Reply via email to