Bump… I really think this is something we should talk about… Otherwise I’ll open an issue on phogbugz.
> On 01 Apr 2015, at 22:58, stepharo <[email protected]> wrote: > > Please do not use Smalltalk at: > We will ban it for real! Good to know. I wasn’t aware of that. > > Stef > > Le 31/3/15 20:49, Max Leske a écrit : >> Hi >> >> Tommaso and I, while hacking on Fuel, today discovered that globals in Pharo >> can have very weird bindings (I guess some of you already know that). For >> example: >> >> class := Class new >> setName: 4; >> yourself. >> Smalltalk >> at: class name >> put: class. >> >> So we now have a class with name 4 (which is a SmallInteger): >> >> self assert: (Smalltalk at: 4) == class. >> >> >> There are basically two different issues: >> 1. SystemDictionary will store any kind of association, not only symbols / >> strings > > arghhhh Exactly the sound I made when we discovered that :) > >> 2. SystemDictionary is an IdentityDictionary and as such two equivalent but >> not identical keys will not resolve to the same object: >> >> class := Class new >> setName: (String streamContents: [ :s | s nextPutAll: >> 'someName']); >> yourself. >> Smalltalk >> at: class name >> put: class. >> >> Smalltalk >> at: (String streamContents: [ :s | s nextPutAll: 'someName’]) >> ifAbsent: [ false ]. “——> false” >> >> >> In Fuel we simply assume that any key to a global is either a ByteString or >> ByteSymbol. If that’s not the case bad things happen. >> It would help us a lot if we could clear up the semantics of bindings in >> SystemDictionary: >> 1. Are bindings with keys that are not ByteString or ByteSymbol valid? >> 2. Should we keep allowing ByteString as keys to globals (ByteSymbol >> guarantees identity)? >> 3. If we allow ByteString, do we also allow WideString? >> 4. Would “type checks” on SystemDictionary incur a big performance penalty? >> >> >> Any suggestions are welcome. >> >> Cheers, >> Max >> > >
