> Am 31.07.2018 um 06:57 schrieb Richard O'Keefe <rao...@gmail.com>:
> 
> Basically, what you are talking about is Software Transactional Memory.
> According to 
> https://en.wikipedia.org/wiki/Software_transactional_memory#Smalltalk
> there *is* STM support for Pharo at
> http://source.lukas-renggli.ch/transactional/
> although the last version there is from 2012, and there have been major 
> changes to Pharo
> since then, so it probably doesn't work any longer.
> 
> You could probably make a TransactionalObject class with a 'lastTransaction'
> instance variable, and a noteChange method that checks if lastTransaction ==
> Transaction current, and if not, pushes self -> self shallowCopy onto a stack
> inside Transaction and sets lastTransaction to Transaction current.  Then to
> roll back a transaction, peel back original -> backup records from the stack
> and do original copyFrom: backup for each of them.
> 
> Please don't ask me to think about combining this with concurrency.
> 
You could delegate the transaction list and other objects to a process specific 
variable. But the biggest problem with a copy approach is that all identity 
checks fail with the copied objects

Norbert
>> On 31 July 2018 at 01:16, Peter Uhnák <i.uh...@gmail.com> wrote:
>> Hi,
>> 
>> is there some library or approach how to do transactions in pharo?
>> And I don't mean database transactions, but directly in memory on Pharo 
>> objects... e.g.
>> 
>> p := Person new.
>> 
>> transaction do: [
>>     p name: 'Nobody'.
>>     p age: 70.
>> ] on: Error do: [
>>     transaction rollback.
>> ].
>> 
>> self assert: p name equals: 'Nobody'.
>> self assert: p age equals: 70.
>> 
>> transaction do: [
>>     p name: 'Somebody'.
>>     p age: 1 / 0.
>> ] on: Error do: [
>>     transaction rollback.
>> ].
>> 
>> self assert: p name equals: 'Nobody'.
>> self assert: p age equals: 70.
>> 
>> Any pointers appreciated.
>> 
>> Thanks,
>> Peter
> 

Reply via email to