El mié, 30-09-2009 a las 04:39 +0000, commits@source.squeak.org escribió:
Andreas Raab uploaded a new version of Monticello to project The Trunk: http://source.squeak.org/trunk/Monticello-ar.323.mcz
Doesn't Monticello has its master repository on the wiresong site?
==================== Summary ====================
Name: Monticello-ar.323 Author: ar Time: 29 September 2009, 9:38:50 am UUID: 927bef84-8215-0443-afe4-c8575b3a300c Ancestors: Monticello-cwp.322
A small improvement to MC loading. New rules are:
- Pass 1: Load class changes first
- Pass 2: Compile new / changed methods
- Pass 3: Install new / changed methods
- Pass 4: Remove old methods
This should provide a bit more stability to the loading process.
=============== Diff against Monticello-cwp.322 ===============
Item was added:
- ----- Method: MCMethodDefinition>>asMethodAddition (in category 'accessing') -----
- asMethodAddition
- ^MethodAddition new
compile: source
classified: category
withStamp: timeStamp
notifying: (SyntaxError new category: category)
logSource: true
inClass: self actualClass.!
Item was changed: ----- Method: MCPackageLoader>>basicLoad (in category 'private') ----- basicLoad errorDefinitions := OrderedCollection new.
- [["Pass 1: Load everything but the methods, which are collected in methodAdditions."
- additions do: [:ea |
[ea isMethodDefinition
ifTrue:[methodAdditions add: ea asMethodAddition]
ifFalse:[ea load]]on: Error do: [errorDefinitions add: ea].
- ] displayingProgress: 'Reshaping classes...'.
- "Pass 2: We compile new / changed methods"
- methodAdditions do:[:ea| ea createCompiledMethod] displayingProgress: 'Compiling...'.
- [[
- "FIXME. Do a separate pass on loading class definitions as the very first thing.
- This is a workaround for a problem with the so-called 'atomic' loading (you wish!!)
- which isn't atomic at all but mixes compilation of methods with reshapes of classes.
- Since the method is not installed until later, any class reshape in the middle *will*
- affect methods in subclasses that have been compiled before. There is probably
- a better way of dealing with this by ensuring that the sort order of the definition lists
- superclass definitions before methods for subclasses but I need this NOW, and adding
- an extra pass ensures that methods are compiled against their new class definitions."
- "Pass 3: Install the new / changed methods
- (this is a separate pass to allow compiler changes to be loaded)"
- methodAdditions do:[:ea| ea installMethod] displayingProgress: 'Installing...'.
- "Pass 4: Remove the obsolete methods"
- removals do:[:ea| ea unload] displayingProgress: 'Cleaning up ...'.
- "Try again any delayed definitions"
- additions do: [:ea | self loadClassDefinition: ea] displayingProgress: 'Loading classes...'.
- additions do: [:ea | self tryToLoad: ea] displayingProgress: 'Compiling methods...'.
- removals do: [:ea | ea unload] displayingProgress: 'Cleaning up...'. self shouldWarnAboutErrors ifTrue: [self warnAboutErrors].
- errorDefinitions do: [:ea | ea load] displayingProgress: 'Reloading...'.
- "Finally, notify observers for the method additions"
- errorDefinitions do: [:ea | ea addMethodAdditionTo: methodAdditions] displayingProgress: 'Reloading...'.
- methodAdditions do: [:each | each installMethod]. methodAdditions do: [:each | each notifyObservers].
- additions do: [:ea | ea postloadOver: (self obsoletionFor: ea)] displayingProgress: 'Initializing...'
- ] on: InMidstOfFileinNotification do: [:n | n resume: true]
- ] ensure: [self flushChangesFile]!
- additions do: [:ea | ea postloadOver: (self obsoletionFor: ea)] displayingProgress: 'Initializing...']
on: InMidstOfFileinNotification
do: [:n | n resume: true]]
ensure: [self flushChangesFile]!
Miguel Enrique Cobá Martinez wrote:
El mié, 30-09-2009 a las 04:39 +0000, commits@source.squeak.org escribió:
Andreas Raab uploaded a new version of Monticello to project The Trunk: http://source.squeak.org/trunk/Monticello-ar.323.mcz
Doesn't Monticello has its master repository on the wiresong site?
It does, but this is an interim experiment with the only purpose of trying to improve our local situation a little. Plus I have no commit rights to the upstream repository. Plus I need that now ;-)
There is always an interesting tension between upstream and downstream usage and we haven't really found out how to realistically deal with that tension in a sustained manner. If anyone has ideas, I'm all ears.
Cheers, - Andreas
==================== Summary ====================
Name: Monticello-ar.323 Author: ar Time: 29 September 2009, 9:38:50 am UUID: 927bef84-8215-0443-afe4-c8575b3a300c Ancestors: Monticello-cwp.322
A small improvement to MC loading. New rules are:
- Pass 1: Load class changes first
- Pass 2: Compile new / changed methods
- Pass 3: Install new / changed methods
- Pass 4: Remove old methods
This should provide a bit more stability to the loading process.
=============== Diff against Monticello-cwp.322 ===============
Item was added:
- ----- Method: MCMethodDefinition>>asMethodAddition (in category 'accessing') -----
- asMethodAddition
- ^MethodAddition new
compile: source
classified: category
withStamp: timeStamp
notifying: (SyntaxError new category: category)
logSource: true
inClass: self actualClass.!
Item was changed: ----- Method: MCPackageLoader>>basicLoad (in category 'private') ----- basicLoad errorDefinitions := OrderedCollection new.
- [["Pass 1: Load everything but the methods, which are collected in methodAdditions."
- additions do: [:ea |
[ea isMethodDefinition
ifTrue:[methodAdditions add: ea asMethodAddition]
ifFalse:[ea load]]on: Error do: [errorDefinitions add: ea].
- ] displayingProgress: 'Reshaping classes...'.
- "Pass 2: We compile new / changed methods"
- methodAdditions do:[:ea| ea createCompiledMethod] displayingProgress: 'Compiling...'.
- [[
- "FIXME. Do a separate pass on loading class definitions as the very first thing.
- This is a workaround for a problem with the so-called 'atomic' loading (you wish!!)
- which isn't atomic at all but mixes compilation of methods with reshapes of classes.
- Since the method is not installed until later, any class reshape in the middle *will*
- affect methods in subclasses that have been compiled before. There is probably
- a better way of dealing with this by ensuring that the sort order of the definition lists
- superclass definitions before methods for subclasses but I need this NOW, and adding
- an extra pass ensures that methods are compiled against their new class definitions."
- "Pass 3: Install the new / changed methods
- (this is a separate pass to allow compiler changes to be loaded)"
- methodAdditions do:[:ea| ea installMethod] displayingProgress: 'Installing...'.
- "Pass 4: Remove the obsolete methods"
- removals do:[:ea| ea unload] displayingProgress: 'Cleaning up ...'.
- "Try again any delayed definitions"
- additions do: [:ea | self loadClassDefinition: ea] displayingProgress: 'Loading classes...'.
- additions do: [:ea | self tryToLoad: ea] displayingProgress: 'Compiling methods...'.
- removals do: [:ea | ea unload] displayingProgress: 'Cleaning up...'. self shouldWarnAboutErrors ifTrue: [self warnAboutErrors].
- errorDefinitions do: [:ea | ea load] displayingProgress: 'Reloading...'.
- "Finally, notify observers for the method additions"
- errorDefinitions do: [:ea | ea addMethodAdditionTo: methodAdditions] displayingProgress: 'Reloading...'.
- methodAdditions do: [:each | each installMethod]. methodAdditions do: [:each | each notifyObservers].
- additions do: [:ea | ea postloadOver: (self obsoletionFor: ea)] displayingProgress: 'Initializing...'
- ] on: InMidstOfFileinNotification do: [:n | n resume: true]
- ] ensure: [self flushChangesFile]!
- additions do: [:ea | ea postloadOver: (self obsoletionFor: ea)] displayingProgress: 'Initializing...']
on: InMidstOfFileinNotification
do: [:n | n resume: true]]
ensure: [self flushChangesFile]!
On 30-Sep-09, at 7:31 AM, Miguel Enrique Cobá Martinez wrote:
El mié, 30-09-2009 a las 04:39 +0000, commits@source.squeak.org escribió:
Andreas Raab uploaded a new version of Monticello to project The Trunk: http://source.squeak.org/trunk/Monticello-ar.323.mcz
Doesn't Monticello has its master repository on the wiresong site?
Not really.
A lot of the historical versions of Monticello are available there, but these days lots of people have customized versions floating around. There's quite a few versions on SqueakSource, for example. The trunk is the right place for the version that ships with Squeak.
Colin
squeak-dev@lists.squeakfoundation.org