Andreas Raab uploaded a new version of Monticello to project The Trunk:
http://source.squeak.org/trunk/Monticello-ar.323.mcz ==================== 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]! |
El mié, 30-09-2009 a las 04:39 +0000, [hidden email]
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 Cobá http://miguel.leugim.com.mx |
Miguel Enrique Cobá Martinez wrote:
> El mié, 30-09-2009 a las 04:39 +0000, [hidden email] > 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]! >> >> |
In reply to this post by Miguel Cobá
On 30-Sep-09, at 7:31 AM, Miguel Enrique Cobá Martinez wrote: > El mié, 30-09-2009 a las 04:39 +0000, [hidden email] > 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 |
Free forum by Nabble | Edit this page |