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 >> >> >> > >