[squeak-dev] The Trunk: Environments-dtl.72.mcz

Eliot Miranda eliot.miranda at gmail.com
Tue Mar 20 17:39:39 UTC 2018


Hi Jacob,

On Tue, Mar 20, 2018 at 9:06 AM, Jakob Reschke <forums.jakob at resfarm.de>
wrote:

> Hi Eliot,
>
> ok, from your answers, it should access the declarations, not the
> bindings of an environment.
>
> With your requirement, that could be:
>    (self select: [:each | each isBehavior and: [each superclass isNil
> and: [each environment == self "not misplaced via at:put:"]]]) asSet
> asArray
>

I don't understand "each environment == self".  A comment as to how this
works would be good.  Further, is it not possible to declare a variable
whose value is a root class?


> I removed the #value sends because select: only iterates over the
> values of a dictionary(-like object).


Good point.


> I do not like the dependency on
> the names of things, but that could also be an overreaction as the
> result of my endeavor to make the tools work across environments. ;-)
>

However it works the issue is avoiding duplicates caused by defining
variables whose values are classes.  I used #name as that's the hammer I
know.  I hope there's a better way :-)  Further, I hope you'll find it :-)


>
> Kind regards,
> Jakob
>
>
> 2018-03-18 17:02 GMT+01:00 Eliot Miranda <eliot.miranda at gmail.com>:
> > Hi Jacob,
> >
> >> On Mar 18, 2018, at 3:40 AM, Jakob Reschke <forums.jakob at resfarm.de>
> wrote:
> >>
> >> Hi Eliot,
> >>
> >> Note that self bindings select: is not the same as self select: for an
> >> Environment, as the latter only enumerates the declarations (its "own"
> >> bindings).
> >>
> >> Seems like the only sender is Class rootsOfTheWorld, which itself is
> >> unsent. In that case, the Smalltalk "root" environment is hard-coded
> >> and the specifics of bindings vs. declarations do not really matter.
> >> But what should #rootClasses answer for other, possibly isolated
> >> environments? What does the sender want to know?
> >> - For an empty environment (no classes contained), should it answer an
> >> empty collection?
> >
> > Yes
> >
> >> - Should the answer change if the "root" environment is imported?
> >
> > No
> >
> >> - For an environment that a) does not contain ProtoObject or Object,
> >> but other classes deriving from them, and b) does not import the
> >> "root" environment, should it answer an empty collection,
> >> {ProtoObject} (although it is not imported) via superclass relations,
> >> or something else?
> >
> > Empty
> >
> >> - Should the answer change if the "root" environment is imported?
> >>
> >> By the way, would it work to have a second (different) ProtoObject
> >> class in the image (in a different environment or under a different
> >> name)?
> >
> > It should, right?
> >
> > the rootsOfTheWorld are easy to understand and hence to extend to
> environments.  Pre environments theRootsOfTheWorld are the classes that
> have no superclass (have nil as their superclass).  theRootsOfTheWorld is a
> set (has no duplicates) but can be a sequence.  Hence, given that Smalltalk
> can contain user defined variables, and the values of these variables can
> be anything, including classes, the computation of theRootsOfTheWorld
> should filter out variables that just happen to refer to root classes to
> ensure that a set is answered.
> >
> > Extending this to environments then is straight forward.
> theRootsOfTheWorld in an environment is a set of the classes defined in
> that environment that have no superclass. The computation should not be
> confusable by variables whose values just happen to be toot classes.
> >
> > Now, given that theRootsOfTheWorld are used as the roots of code search
> (allImplementosOf: et al) the notion of a pet-environment
> theRootsOfTheWorld is suspect, given that code search should be able to
> search all code.  But let's at least get the per-environment definition
> correct before we try and define a system-wide one.
> >
> >>
> >> Best regards,
> >> Jakob
> >>
> >> 2018-03-18 9:18 GMT+01:00 Eliot Miranda <eliot.miranda at gmail.com>:
> >>> Hi David,
> >>>
> >>>>> On Mar 17, 2018, at 8:19 PM, David T. Lewis <lewis at mail.msen.com>
> wrote:
> >>>>>
> >>>>> On Sat, Mar 17, 2018 at 04:54:36PM -0700, Eliot Miranda wrote:
> >>>>> Hi David,
> >>>>>
> >>>>>> On Sat, Mar 17, 2018 at 12:10 PM, <commits at source.squeak.org>
> wrote:
> >>>>>>
> >>>>>> David T. Lewis uploaded a new version of Environments to project
> The Trunk:
> >>>>>> http://source.squeak.org/trunk/Environments-dtl.72.mcz
> >>>>>>
> >>>>>> ==================== Summary ====================
> >>>>>>
> >>>>>> Name: Environments-dtl.72
> >>>>>> Author: dtl
> >>>>>> Time: 17 March 2018, 3:09:49.564301 pm
> >>>>>> UUID: e9aed004-8798-41c0-83f9-a04f5963dd55
> >>>>>> Ancestors: Environments-jr.71, Environments-fbs.27
> >>>>>>
> >>>>>> Merge Environments-fbs.27
> >>>>>>
> >>>>>> =============== Diff against Environments-jr.71 ===============
> >>>>>>
> >>>>>> Item was added:
> >>>>>> + ----- Method: Environment>>rootClasses (in category 'accessing')
> -----
> >>>>>> + rootClasses
> >>>>>> +       "return a collection of classes which have a nil superclass"
> >>>>>> +       ^ (self select: [:each | each isBehavior and: [each
> superclass
> >>>>>> isNil]]) asOrderedCollection.!
> >>>>>>
> >>>>>
> >>>>> At least for me this isn't quite good enough.  There's a possibility
> that
> >>>>> someone could establish a variable whose value is a root, e.g. by
> >>>>>
> >>>>> Smalltalk at: #MyRootClass put: ProtoObject
> >>>>>
> >>>>> and that would cause rootClasses to answer a duplicate.  So IMO it
> needs to
> >>>>> do one of
> >>>>> - convert to a set and then back to a collection
> >>>>> - answer a set
> >>>>> - enumerate over associations, selecting those classes whose key is
> the
> >>>>> same as their name
> >>>>>
> >>>>> _,,,^..^,,,_
> >>>>> best, Eliot
> >>>>
> >>>> Hi Eliot,
> >>>>
> >>>> Do you mean this?
> >>>>
> >>>> Environment>>rootClasses
> >>>>   "return a collection of classes which have a nil superclass"
> >>>>   ^ (self select: [:each | each isBehavior and: [each superclass
> isNil]]) asSet asOrderedCollection.
> >>>
> >>> That'll do but perhaps better is
> >>>
> >>>          self bindings select: [:each | each value isBehavior and:
> [each value superclass isNil and: [each value name == each key]]])
> collect:  [:each | each value]
> >>>
> >>>>
> >>>>
> >>>> Note, I am not the author here, just tending to the inbox :-)
> >>>>
> >>>> Thanks,
> >>>> Dave
> >>>>
> >>>>
> >>>
> >>
> >
>
>


-- 
_,,,^..^,,,_
best, Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20180320/1ef786a4/attachment.html>


More information about the Squeak-dev mailing list