KCP looking for external reviewers
Stephane Ducasse
ducasse at iam.unibe.ch
Sat Apr 5 20:03:18 UTC 2003
Hi tim,
>> I was thinking that this was what the people wanted because having a
>> bigger granularity will help us to go faster but may make the
>> harvested
>> more difficult.
>> That's why we did it like that but we can change this.
> I suspect that we could handle larger granularity if there was some
> conversation during the process of making the changes.
Do you want us to send emails in the mailing-list about what we will do?
Basically we record all our ideas that emerge while reading the code in
the wiki
This is not that clear I know but this is really the way we do it.
> That way there
> would be some decent context for the decisions and changes made
> _already_ in the reviewer's head. You might even get some useful help
> out of it.
This is what we do here. We sit by two or three and read read the code.
Then we decide the simplest action that we could do and do it. Then
write tests...
so this is slooooooooooow.
> I know some people (perhaps most of us?) like to go away and hide, do
> magical things and then stagger out of their cave to present a
> miraculous artifact to us all, in the hope and expectation that we will
> all gasp in admiration.
That is not our goal. Else we would do it only for us and write smart
academic papers
we are so found of. Here the point is really basic software
engineering. no advanced cool feature. We learned the lessons of 3.3a.
> Sometimes that even works but to be honest when
> it is code we are all supposed to share and understand and use it's
> about as useful as a chocolate teaspoon. Conversations with as many
> people as possible with an interest in the subject usually results in
> something better in the end if only because there is a larger number
> of people cheering for the project. Isn't that one of the advantages of
> open software in the first place?
So please read the wiki even if this is not really well written and
tell us. Read the kernel code and comments on our comments.
Switching code browsing to edit this page is a pain but we try to do it.
Stef
Or propose any other means.
Here are parts of the web page http://minnow.cc.gatech.edu/squeak/3083
Currently we are focusing now on having the smallest core for Class,
Behaviour, ClassDescription, and Metaclasses. The idea is to move away
from the kernel the dependency to UI, to move methods in the place they
should be (for example, from class to method dictionary when this is
behavior of method). No magic no new features just cleaning code and
building layers around the core.
The first design changes introduced is the introduction of a class
named SystemNavigation that should contain all the navigation code
(browseAll...). Note that all the browse methods defined in the class
SystemDictionary should be moved into this class too to avoid
duplicated code and logic. But for now we will not touch
SystemDictionary (yet) which has far too much responsibility. For the
moment we focus on applying good OO practices on the core Class,
ClassDescription, Behavior and Metaclass
Major Next Tasks:
Always build a solide test suite
Look and clean the classBuilder
Look and clean the systemOrganization
Remove fileoutasHTML from the kernel
Move fileout functionality out of the kernel in another layer
Coherent and simple funnel for changes notification and access to
changes
Coherent and simple funnel for access to the compiler from the classes
(fixes classParser and classScanner as role always complained about
them been wrong)
Cleaning and splitting SystemDictionary (there are too much
responsibilities in SystemDictionary around 8 different. However some
parts of SystemDictionary are used in the VM so it will take more time
and we should be carefull about this one).
Add automatic initialization + introduction of allocate/initialize (as
lot of people will be afraid by this one we will have to prove it with
numbers and tutorial as andreas suggested long long time ago).
Major Next Tasks:
Always build a solide test suite
Look and clean the classBuilder
Look and clean the systemOrganization
Remove fileoutasHTML from the kernel
Move fileout functionality out of the kernel in another layer
Coherent and simple funnel for changes notification and access to
changes
Coherent and simple funnel for access to the compiler from the classes
(fixes classParser and classScanner as role always complained about
them been wrong)
Cleaning and splitting SystemDictionary (there are too much
responsibilities in SystemDictionary however some parts of
SystemDictionary are used in the VM so it will take more time).
Add automatic initialization + introduction of allocate/initialize
List of Suggestions (please sign so that we can ask you)
Look at the builder problem:
http://swiki.gsug.org:8080/sqbugs/751.html and the proposed fix
http://swiki.gsug.org:8080/sqfixes/3182.html
Would like to get rid of all the self inform: in the class classes
because this relies on having PopUpMenu in Object which is not really
good too if one day people decide to clean Object.
Would like to remove inspect call from the class because in the long
run we should do Inspector on: and not self inspect on Object.
Inspecting result of certain messages could be moved into
SystemNavigation.
Instead of removing #inform:, #inspect as above, make them throw
exceptions. These can be caught by morphic or mvc or seaside etc and
treated properly - but the kernel isn't coupled to a particular UI (avi)
Behavior>>whichClassIncludesSelector: and
Behavior>>whichClassIncludesSelector: are the identical (ab & sd)
Behavior>>defaultSelectorForMethod: should be moved in the
CompiledMethod class (sd & ab)
Behavior>>isObsolete has a strange definition (sd & ab) should check
senders.
Behavior>>typeOfClass contains a lot of magic numbers that are also
used in ClassBuilder. Should be defined in one place (ClassBuilder) and
not as magic number.
The way the code is saved 1 or 2 to indicate source or change is a
magic number that should be hidden and replace by method invocations.
Behavior>>sourceCodeTemplate (should be moved into browser or at least
in ClassDescription) (ab & sd)
Behavior>>confirmRemovalOf: (Should be in browser and others) (ab & sd)
Behavior methodDict iv should be renamed methodDictionary (ab & sd)
Behavior>>withAllSubclasses (is the order mentioned garanty?) (ab & sd)
Behavior>>changeRecordsAt: refers to VersionBrowser (ab & sd)
Behavior>>firstCommentAt: should be moved into compiled method or
method dictionary (ab & sd)
Behavior>>formalParametersAt: should be moved into compiled method or
method dictionary (ab & sd)
Behavior>>firstPrecodeCommentFor: should be moved into CompiledMethod
or MethodDictionary.
(MessageSet isPseudoSelector: selector)
ifTrue: ["Not really a selector"
^ nil].
...
What is really strange is that MessageSet isPseudoSelector just checks
whether the symbol is one of the symbol used by the browser to know in
which state it is #Comment, #Hierarchy,... (ab & sd)
Behavior>>kindOfSubclass should be pushed down as behavior should not
be aware of definition related information. (ab & sd)
Behavior>>allUnsentMessages should be moved into systemNavigation (ab
& sd)
Make the way easier for using Environment (Namespace) with the kernel
(ab)
Draw clear limits to "what is kernel" (dvf): Class, ClassDescription,
Metaclass, Behavior, SystemDictionary, eventually Object, a Bit of
Compiler, CompiledMethod.
Liberally use DVS convention to mark as "Class Extensions" methods
that shouldn't be in the kernel. This will soon allow SpT to let us
really know how much of a mess remains, and doesn't break anything (dvf)
fix and tests provided by the list BCCMTestCase.st to look at
run SmallLint (sd)
check the code in VW and in GNU Smalltalk (sd)
lot of Behavior methods are using class/classDescription (sd)
remove fileOutAsHTML -> HtmlClassWriter (sd)
remove reference to Transcript (sd)
Utilities noteMethodSubmission: #Comment forClass: self
theNonMetaClass (sd)
Make sure notification of all kinds of code changes are noted, and
complete information provided, to make sure computed models of code can
be cached. And this doesn't belong in Utilities. (dvf) Exact we should
have a simple and single funnel to arrive to changes logs.
remove all the method ClassDescription>>ChoosePopUpMenu references (sd)
create a class for all the navigation queries and move browse code
there. (sd)
Do we want to have all these references to FileStream (sd)
Code formatting, return inside ifTrue... (sd)
Check all the fixes nathanael did for the traits (sd)
Redefine classOrganization as nathanael did for the traits (sd)
Move functionality that are defined in the browser into the kernel
classes and vice versa (PopUpMenu...)
Recompilation of Array breaks: ArrayedCollection variableSubclass:
#Array instanceVariableNames: '' classVariableNames: ''
poolDictionaries: ''category: 'Collections-Arrayed'
>
> tim
> --
> Tim Rowledge, tim at sumeru.stanford.edu, http://sumeru.stanford.edu/tim
> Choose variable names that will not be confused.
>
>
Prof. Dr. Stéphane DUCASSE
http://www.iam.unibe.ch/~ducasse/
"if you knew today was your last day on earth, what would you do
different? ... especially if,
by doing something different, today might not be your last day on
earth" Calvin&Hobbes
"The best way to predict the future is to invent it..." Alan Kay.
Open Source Smalltalks: http://www.squeak.org,
http://www.gnu.org/software/smalltalk/smalltalk.html
Free books for Universities at
http://www.esug.org/sponsoring/promotionProgram.html
Free Online Book at
http://www.iam.unibe.ch/~ducasse/WebPages/FreeBooks.html
More information about the Squeak-dev
mailing list
|