default convention

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
24 messages Options
12
Reply | Threaded
Open this post in threaded view
|

Re: default convention

stephane ducasse-2
look at the postscript in a cs.

There are not methodDefinition, classDefinition...
With methodDefinition, class defintion we could imagine that we can sort them compare them eliminate them.
They represent our vocabulary

Now post script are plain smalltalk expressions so everything can happen. Then suddenly you have black holes in your analysis possibilities

stef

On Oct 5, 2010, at 6:54 PM, Mariano Martinez Peck wrote:

>
>
> On Thu, Sep 30, 2010 at 4:19 PM, Alexandre Bergel <[hidden email]> wrote:
> > mariano the problem with methods and behavior overwritting is that you will not be able to build analysis.
> > This the difference between a declarative model and an imperative executable one.
>
>
> I still don't understand. Can someone explain me?
> thanks
>
> mariano
>  
> +1
>
> Alexandre
>
> >
> > On Sep 29, 2010, at 7:34 PM, Mariano Martinez Peck wrote:
> >
> >>
> >>
> >> On Wed, Sep 29, 2010 at 7:31 PM, Dale Henrichs <[hidden email]> wrote:
> >> Doru,
> >>
> >> I was wondering if you have been following the symbolic version discussion?
> >>
> >> In my mind I have imagined that the symbolic versions will address your desire to have a convention for what has come to be known as the #bleedingEdgeVersion.
> >>
> >> Earlier today, Mariano made a good argument against having a default behavior for #stableVersion, but I think that there is a case for having  default behaviors defined for #developmentVersin and #bleedingEdge, so that we would move from a convention into being able to depend upon there being a definition for #bleedingEdge...
> >>
> >>
> >> :)   My ideal would be: no default in Metacello, but Metacello be flexible enough so that a Configuration can define a default if wanted :)   like Moose here
> >> This is why maybe having the methods is worth it since they can be overridden.
> >>
> >> If we do have a default behavior for #bleedingEdge, it should be implemented as a standard method in the config which is consistent with the lookup/message send pattern I am proposing ...
> >>
> >> Regardless, I am interested to hear your thoughts on the directions we are going with symbolic versions as it relates to your desire for a 'default convention'.
> >>
> >> Dale
> >>
> >>
> >> Tudor Girba wrote:
> >> Hi,
> >>
> >> I would like to propose the convention of a default baseline in every  configuration. This is particularly useful from a development point of  view. We use this in all Moose projects with success.
> >>
> >> The scenario is like this:
> >> - default is a baseline (i.e., without explicit versions)
> >> - it represents the current development configuration
> >> - that means that we only work on the default
> >> - every time we want to create an explicit version, we copy default to  a corresponding baseline and we create the version
> >>
> >> The benefit of this convention is that it provides a simple way to  depend on a configuration for development without needing to update  for every new version.
> >>
> >> For example, now we have ConfigurationOfGlamourSeaside and we want to  depend on ConfigurationOfSeaside. In the current form, we can only  depend on version "3.0.0-alpha5.15". However, for development purposes  we would need access to the latest fixes which are not yet in a  version. If there would be a default, we could just have our default  depend on that one.
> >>
> >> What do you think?
> >>
> >> Cheers,
> >> Doru
> >>
> >> --
> >> www.tudorgirba.com
> >>
> >> "No matter how many recipes we know, we still value a chef."
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >>
>
> --
> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
> Alexandre Bergel  http://www.bergel.eu
> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>
>
>
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: default convention

Dale Henrichs
In reply to this post by Tudor Girba
On 08/06/2010 01:11 PM, Tudor Girba wrote:

> Hi,
>
> I would like to propose the convention of a default baseline in every
> configuration. This is particularly useful from a development point of
> view. We use this in all Moose projects with success.
>
> The scenario is like this:
> - default is a baseline (i.e., without explicit versions)
> - it represents the current development configuration
> - that means that we only work on the default
> - every time we want to create an explicit version, we copy default to
> a corresponding baseline and we create the version
>
> The benefit of this convention is that it provides a simple way to
> depend on a configuration for development without needing to update
> for every new version.
>
> For example, now we have ConfigurationOfGlamourSeaside and we want to
> depend on ConfigurationOfSeaside. In the current form, we can only
> depend on version "3.0.0-alpha5.15". However, for development purposes
> we would need access to the latest fixes which are not yet in a
> version. If there would be a default, we could just have our default
> depend on that one.
>
> What do you think?

Doru,

I am still wondering if you and I are on the same page with
symbolicVersions and the 'default' convention. With symbolicVersions we
have the notion of a #bleedingEdgeVersion by default defined as the
latest #baseline version:

     bleedingEdgeVersion
       <symbolicVersion: #bleedingEdge>

       versions := self map values versions select: [ :version |
           '*baseline*' match: version name ].
       ^ baselines detectMax: [ :version | version ].

  the #bleedingEdgeVersion can be explicitly defined as follows (which
then supercedes the default definition):

     bleedingEdgeVersion:spec
       <symbolicVersion: #bleedingEdge>

       spec for: #'common' version: 'baseline-1.0'.

Soooo, instead of having a sliding definition of the 'default' version
you would use #bleedingEdge instead of 'default' and when you add a new
baseline version you just update the #bleedingEdge spec:

     bleedingEdgeVersion:spec
       <symbolicVersion: #bleedingEdge>

       spec for: #'common' version: 'baseline-1.0.1'.

If I'm not mistaken this matches your proposed scenario, so I think
(other than names) that symbolicVersions do address your needs...

Dale


Reply | Threaded
Open this post in threaded view
|

Re: default convention

Tudor Girba
Hi Dale,

Thanks for taking the time to re-explain the situation. I think I got it the first time, and I think that it would serve our purpose.

However, as I mentioned before I do not really understand the difference between symbolicVersion and version. To my mind, you could achieve the same thing with just the concept of version.

bleedingEdgeVersion: spec
        <version: 'bleedingEdgeVersion'>
        self baseline10: spec

Or maybe there is something else I do not see.

One thing I am not sure I understand is that you say that there will be a default #bleedingEdgeVersion. Will this imply that I have to subclass from somewhere, or will it be provided by the engine in a hardcoded way?

And another thing: until we have a strong tool support, the problem is how to document what a developer should change. If you depend on the latest baseline, it means that you should find the latest baseline and then modify it. With default, we always know that we can modify it in place, and whenever we are happy with something we snapshot. However, it probably would be nice if every version would be immutable, but that requires tool support.

Cheers,
Doru


On 8 Oct 2010, at 20:02, Dale Henrichs wrote:

> On 08/06/2010 01:11 PM, Tudor Girba wrote:
>> Hi,
>>
>> I would like to propose the convention of a default baseline in every
>> configuration. This is particularly useful from a development point of
>> view. We use this in all Moose projects with success.
>>
>> The scenario is like this:
>> - default is a baseline (i.e., without explicit versions)
>> - it represents the current development configuration
>> - that means that we only work on the default
>> - every time we want to create an explicit version, we copy default to
>> a corresponding baseline and we create the version
>>
>> The benefit of this convention is that it provides a simple way to
>> depend on a configuration for development without needing to update
>> for every new version.
>>
>> For example, now we have ConfigurationOfGlamourSeaside and we want to
>> depend on ConfigurationOfSeaside. In the current form, we can only
>> depend on version "3.0.0-alpha5.15". However, for development purposes
>> we would need access to the latest fixes which are not yet in a
>> version. If there would be a default, we could just have our default
>> depend on that one.
>>
>> What do you think?
>
> Doru,
>
> I am still wondering if you and I are on the same page with symbolicVersions and the 'default' convention. With symbolicVersions we have the notion of a #bleedingEdgeVersion by default defined as the latest #baseline version:
>
>    bleedingEdgeVersion
>      <symbolicVersion: #bleedingEdge>
>
>      versions := self map values versions select: [ :version |
>          '*baseline*' match: version name ].
>      ^ baselines detectMax: [ :version | version ].
>
> the #bleedingEdgeVersion can be explicitly defined as follows (which then supercedes the default definition):
>
>    bleedingEdgeVersion:spec
>      <symbolicVersion: #bleedingEdge>
>
>      spec for: #'common' version: 'baseline-1.0'.
>
> Soooo, instead of having a sliding definition of the 'default' version you would use #bleedingEdge instead of 'default' and when you add a new baseline version you just update the #bleedingEdge spec:
>
>    bleedingEdgeVersion:spec
>      <symbolicVersion: #bleedingEdge>
>
>      spec for: #'common' version: 'baseline-1.0.1'.
>
> If I'm not mistaken this matches your proposed scenario, so I think (other than names) that symbolicVersions do address your needs...
>
> Dale
>
>

--
www.tudorgirba.com

"One cannot do more than one can do."



Reply | Threaded
Open this post in threaded view
|

Re: default convention

Dale Henrichs
On 10/10/2010 04:07 AM, Tudor Girba wrote:
> Hi Dale,
>
> Thanks for taking the time to re-explain the situation. I think I got
> it the first time, and I think that it would serve our purpose.

No problem. It was unfortunate that you couldn't participate in the
discussions at ESUG, so it is worth taking the time now to try to make
sure that you understand the rationale.

>
> However, as I mentioned before I do not really understand the
> difference between symbolicVersion and version. To my mind, you could
> achieve the same thing with just the concept of version.
>
> bleedingEdgeVersion: spec <version: 'bleedingEdgeVersion'> self
> baseline10: spec
>
> Or maybe there is something else I do not see.

Ah yes. One thing that symbolicVersions provides (and the primary reason
for it's existence) is the ability to specify a #stableVersion that is
platform-dependent:

    stableVersion: spec
        <symbolicVersion: #stableVersion>
       
        spec for: #'common' version: '4.3'.
        spec for: #'pharo1.x' version: '4.0'.
        spec for: #'pharo1.0.x' version: '4.1'.
        spec for: #'pharo1.1.x' version: '4.2'.
        spec for: #'pharo1.2.x' version: '4.3'.

The version #stableVersion can then be used to load the "known stable
version" for a particular platform. Configs or load instructions can
just tell folks to load the #stableVersion. This is superior to using
#loadLatest because the latest version is not always the #stableVersion
on a platform basis also there is no way to _specify_ #loadLatest in a
configuration ... symbolicVersions makes it possible to specify the
"latest stable version" in a configuration.

The version #stableVersion can be used for projects like Seaside 3.0 and
allow one to pick up the latest stable version of 3.0 ... meaning that
configs that reference Seaside 3.0 wouldn't have to change just to pick
up the latest stable version of Seaside3.0.

Finally, I agree that you _could_ use a 'bleedingEdge' literalVersion,
but doesn't this bring us back to your original post? If 'bleedingEdge'
is a literalVersion then everyone would have to define a 'bleedingEdge'
literal version which is not done today and probably wouldn't be done in
the future (except for those projects that used the bleeding edge notion
in development as is done in Moose). To me it is worth defining a
default #bleedingEdge version (load the latest baseline version), since
there don't have to be many interpretations of bleeding edge:

   "If you load the #bleedingEdgeVersion you may get unexpected behavior
   no matter what platform you load it on."

Using #symbolicVersions for 'bleedingEdge' means that a definition will
exist in every project and there is no need to call for a convention...

>
> One thing I am not sure I understand is that you say that there will
> be a default #bleedingEdgeVersion. Will this imply that I have to
> subclass from somewhere, or will it be provided by the engine in a
> hardcoded way?

This is yet to be determined. In fact, the notion of having any default
behavior at all is still under discussion ...

>
> And another thing: until we have a strong tool support, the problem
> is how to document what a developer should change. If you depend on
> the latest baseline, it means that you should find the latest
> baseline and then modify it. With default, we always know that we can
> modify it in place, and whenever we are happy with something we
> snapshot. However, it probably would be nice if every version would
> be immutable, but that requires tool support.

If you are actively using #bleedingEdgeVersion you _should_ have a
#bleedingEdge: method in your config:

    bleedingEdgeVersion: spec
        <symbolicVersion: #bleedingEdgeVersion>
       
        spec for: #'common' version: '4.3-baseline'.

Which you update when you add a new baseline ... very similar to using
the 'default' version. the main exception is that #bleedingEdgeVersion
is not just a convention, but part of the system and the
#bleedingEdgeVersion can be used for external projects with confidence.

BTW, using #symbolicVersions preserves the notion that literal versions
are immutable (except for #developmentVersion which is mutable by
definition)

Dale
12