[squeak-dev] Re: Metacello questions

Dale dale.henrichs at gemstone.com
Thu May 6 20:44:25 UTC 2010



Teleplacer wrote:
> 
> On 5/6/2010 9:55 AM, Dale wrote:
> <snip>
>> #includes is used quite extensively for Seaside30 where an expression
>> like
>> the following is used:
>>
>> 	spec for: #common do: [
>>                  spec
>> 			package: 'Javascript-Core'
>> 				with: [ spec requires: #('Seaside-Core' 'Seaside-Canvas' ). ];
>> 			package: 'JQuery-Core'
>> 				with: [ spec requires: #('Javascript-Core' ). ]].
>> 	spec for: #squeakCommon do: [
>> 		spec
>> 			package: 'Javascript-Core'
>> 				with: [ spec includes: #('Javascript-Pharo-Core' ) ]].
>>
> 
> <snip>
> 
>> Whereas if we only had the #requires: mechanism, we'd need to duplicate
>> every 'Javascript-Core'   #requires: with a #requires: for
>> 'Javascript-Pharo-Core'
> 
> How so? It seems to me, that the following should be equivalent, no?
> 
> 	spec for: #squeakCommon do:[
> 		"Javascript-Core-Top is a pseudo target"
> 		spec package: 'Javascript-Core-Top'
> 			with: [spec requires: #(JavaScript-Pharo-Core)]
> 		"And be explicit about load order"
> 		spec package: 'Javascript-Pharo-Core'
> 			with: [spec requires: #(JavaScript-Core)]
> 	].
> 
> 	spec for: #common do:[
> 		"Pseudo-top always depends on actual Javascript-Core"
> 		spec package: 'Javascript-Core-Top
> 			with: [spec requires: #(JavaScript-Core)]
> 
> 		"standard Javascript-Core dependencies"
> 		spec
> 			package: 'Javascript-Core'
> 				with: [ spec requires: #('Seaside-Core' 'Seaside-Canvas' ). ].
> 
> 		"Now make JQuery-Core depending on the pseudo package"
> 		spec package: 'JQuery-Core'
> 			with:[spec requires: #('Javascript-Core-Top')].
> 	].
> 
> Is there any difference?
> 
> 

Andreas,

The difference is that you introduced the package 'Javascript-Core-Top' and
that package doesn't exist:) So the #includes: directive means that you
don't have to introduce "artificial" targets that perform no other function
than act as a dependency target. 

Keep in mind that over time a project may evolve to the point where you need
to add a "new dependency target" and if you have to add a new target, other
projects that depend upon this project and may reference the "old dependency
target" and will not function correctly moving forward. 

The #includes: directive allows you to "add packages to the original
dependency target" without changing the structure of your project...

Dale
-- 
View this message in context: http://forum.world.st/Metacello-questions-tp2132073p2133346.html
Sent from the Squeak - Dev mailing list archive at Nabble.com.



More information about the Squeak-dev mailing list