AspectS 0.4.1 ---
There is an updated version of AspectS (0.4.1).
Besides several small fixes and enhancements, there is a new example that illustrates how to use AspectS to introduce different perspectives on the system, depending on different contexts. The example implements the AspectS tool support, previously done via subclassing of existing browser and support classes, now as an additional layer on top of the browser and support classes. The tools aspect is, amongst other characteristics, sensitive to projects as its context:
To create a tools aspect instance:-
aspect _ AsAspectToolsAspect new.
To install an aspect:-
aspect install.
To make the tools aspect aware of a certain project:-
aspect addProject: (Project named: 'Test'). aspect addProject: Project current.
To make the tools aspect unaware of a certain project:-
aspect removeProject: Project current. aspect removeProject: (Project named: 'Test').
To uninstall the aspect:-
aspect uninstall. aspect _ nil.
The new version (a change set and pre-configured image) is available at http://www.prakinf.tu-ilmenau.de/~hirsch/Projects/Squeak/AspectS/
Comments are welcome.
Best, -Robert
I forgot to mention: Thanks to Ned Konz for fixing parts of the tools support.
Best, -Robert
Robert Hirschfeld wrote:
AspectS 0.4.1
There is an updated version of AspectS (0.4.1).
Besides several small fixes and enhancements, there is a new example that illustrates how to use AspectS to introduce different perspectives on the system, depending on different contexts. The example implements the AspectS tool support, previously done via subclassing of existing browser and support classes, now as an additional layer on top of the browser and support classes. The tools aspect is, amongst other characteristics, sensitive to projects as its context:
To create a tools aspect instance:-
aspect _ AsAspectToolsAspect new.
To install an aspect:-
aspect install.
To make the tools aspect aware of a certain project:-
aspect addProject: (Project named: 'Test'). aspect addProject: Project current.
To make the tools aspect unaware of a certain project:-
aspect removeProject: Project current. aspect removeProject: (Project named: 'Test').
To uninstall the aspect:-
aspect uninstall. aspect _ nil.
The new version (a change set and pre-configured image) is available at http://www.prakinf.tu-ilmenau.de/~hirsch/Projects/Squeak/AspectS/
Comments are welcome.
Best, -Robert
Hi Robert,
Thanks for your AspectS. I have not used it for anything yet, but I have a feeling that this is a very powerful and precise tool.
It was mentioned on this list that AspectS can be an excellent tool for modularizing Squeak, would you like to comment on this suggestion ?
In your paper, you said 'crosscutting is inherent to complex systems [Kicz+97].'
Do you think that AspectS itself is a complex system ?
If so, do you think that AspectS can be improved if you use AspectS to 'aspectize' AspectS itself ?
This brings to the question, how would you bootstrap AspectS with some builtin features in Squeak to make AspectS itself more modular (?) or bringing the benefit of Aspect to earlier objects. BTW, do you plan to support module, make AspectS module aware ?
In your document you said:
'in its current implementation, AspectS is realized without changing neither Smalltalk's syntax nor its virtual machine. AspectS shows great flexibility by not relying on code transformations (neither source nor byte code) but making use of metaobject composition instead.'
Does this imply that AspectS can be implemented differently by modification in Squeak's syntax and/or its virtual machine.
I can see the power and elegance of AspectS based on an existing image. Say, if the GNU Smalltalk people want to add support for AspectS, what would be the best approach they should take as far as the compiler and builtin primitives are concerned. Is 'MethodWrapper' the core of AspectS ?
I am learning AspectS and enjoying it. Please keep up with your work on AspectS.
Cheers,
PhiHo.
-----Original Message----- From: squeak-dev-admin@lists.squeakfoundation.org [mailto:squeak-dev-admin@lists.squeakfoundation.org] On Behalf Of Robert Hirschfeld Sent: Thursday, April 11, 2002 3:42 AM To: Squeak-Dev Subject: [ANN] AspectS (0.4.1)
AspectS 0.4.1 ---
There is an updated version of AspectS (0.4.1).
Besides several small fixes and enhancements, there is a new example that illustrates how to use AspectS to introduce different perspectives on the system, depending on different contexts. The example implements the AspectS tool support, previously done via subclassing of existing browser and support classes, now as an additional layer on top of the browser and support classes. The tools aspect is, amongst other characteristics, sensitive to projects as its context:
To create a tools aspect instance:-
aspect _ AsAspectToolsAspect new.
To install an aspect:-
aspect install.
To make the tools aspect aware of a certain project:-
aspect addProject: (Project named: 'Test'). aspect addProject: Project current.
To make the tools aspect unaware of a certain project:-
aspect removeProject: Project current. aspect removeProject: (Project named: 'Test').
To uninstall the aspect:-
aspect uninstall. aspect _ nil.
The new version (a change set and pre-configured image) is available at http://www.prakinf.tu-ilmenau.de/~hirsch/Projects/Squeak/AspectS/
Comments are welcome.
Best, -Robert
Hi PhiHo,
It was mentioned on this list that AspectS can be an excellent tool for modularizing Squeak, would you like to comment on this suggestion ?
AspectS supports 'aspects' as units of modularity to localize implementations of crosscutting concerns. With that, AspectS would be of use to modularize tangled code that crosscuts several modules of a system but should belong to a specific/dedicated one.
In your paper, you said 'crosscutting is inherent to complex
systems [Kicz+97].'
Do you think that AspectS itself is a complex system ? If so, do you think that AspectS can be improved if you use
AspectS to 'aspectize' AspectS itself ?
I don't think of AspectS as a complex system, and applying AspectS to itself would require a bootstrapping mechanism I haven't thought about yet.
This brings to the question, how would you bootstrap AspectS
with some builtin features in Squeak to make AspectS itself more modular (?) or bringing the benefit of Aspect to earlier objects. BTW, do you plan to support module, make AspectS module aware ?
I haven't had a closer look at our new modules work and so I can't really say anything about that. What would you expect from aspects that are module aware?
In your document you said: 'in its current implementation, AspectS is realized
without changing neither Smalltalk's syntax nor its virtual machine. AspectS shows great flexibility by not relying on code transformations (neither source nor byte code) but making use of metaobject composition instead.'
Does this imply that AspectS can be implemented differently by
modification in Squeak's syntax and/or its virtual machine.
In an advice, one states what code (via a block) has to be executed where (via the pointcut) and when (via the advice qualifier). Of course there are a couple of ways to compose such an advice into the system. Examples are lightweight classes (see AOP/ST by Kai Boellert), LMP (see Andrew by Kris Gybels), source or byte code transformations etc.
After experimenting with different approaches, I found John Brant's MethodWrappers a very elegant approach that solved most of my problems. With them, code composition is almost entirely reduced to meta object composition :)
I can see the power and elegance of AspectS based on an existing
image. Say, if the GNU Smalltalk people want to add support for AspectS, what would be the best approach they should take as far as the compiler and builtin primitives are concerned. Is 'MethodWrapper' the core of AspectS ?
I have to admit that I'm not familiar with GNU Smalltalk...
Best, -Robert
squeak-dev@lists.squeakfoundation.org