mc semantics
Begin forwarded message: > From: Andreas Raab <[hidden email]> > Date: September 30, 2009 4:53:10 PM GMT+02:00 > To: The general-purpose Squeak developers list <[hidden email] > > > Subject: [squeak-dev] Re: The Trunk: Monticello-ar.323.mcz > Reply-To: The general-purpose Squeak developers list <[hidden email] > > > > 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]! >>> >>> > > _______________________________________________ Pharo-project mailing list [hidden email] http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project |
Free forum by Nabble | Edit this page |