Yes, session management is cross-cutting concern, so it makes sense to have it in the system, and not just as a NB feature. Object new, is a cool workaround for the unique ID! Fernando On Mon, Oct 8, 2012 at 8:33 AM, Marcus Denker <marcus.denker@inria.fr> wrote:
Hello,
Yes, this sounds good.
Marcus
On Oct 8, 2012, at 5:11 AM, Igor Stasenko <siguctua@gmail.com> wrote:
I wanna have this:
SmalltalkImage>>snapshot: save andQuit: quit ... resuming ifTrue: [ session := self newSession ]. ...
(where session is additional instance variable of SmalltalkImage).
SmalltalkImage>>newSession "Just answer unique object, which never can be identical to any previous session object, this is all what we need for detecting session change. A session object don't needs to carry any state (we have plenty of other objects in image which can do this for us). it just needs to be unique"
^ Object new.
SmalltalkImage>>session ^ session
then, i can write in own code:
Smalltalk session == mySession ifFalse: [ self initForNewSession. mySession := Smalltalk session ]
So, basically, this little addition allows you to detect whether session changed or not between two different calls to your code (given that you remembered the previous session somewhere). Currently we don't have such feature, and looking how some existing code deals with session management, i see how it can be simplified. If you want to do something similar today, you will need to register in startup list.. which IMO stinks ;)
i don't like using startup lists, since you never know , what is the right order of resource initialization, and what inter-dependencies they may form, and changing dependencies over time will require changing startup order, again and again. Not fun. This technique allows you to lazily re-initialize any of your object(s) due to session change, once the control flow hits your code, but not before. (so you don't have to do all accounting at image startup time, you doing it only when it required/requested, which means shorter image startup time).
The notion of session is highly important for external resource management.
I using it in NativeBoost from very beginning, and wanna propose to use it globally.
-- Best regards, Igor Stasenko.
-- Marcus Denker -- http://marcusdenker.de