[#8566] Visions for 2001/1.7.x development? — Robert Feldt <feldt@...>

Hi matz and other Ruby developers,

18 messages 2001/01/03
[#8645] Re: Visions for 2001/1.7.x development? — matz@... (Yukihiro Matsumoto) 2001/01/04

Hi,

[#8580] bug?? — jmichel@... (Jean Michel)

I don't understand the following behaviour:

19 messages 2001/01/03

[#8633] Interesting Language performance comparisons - Ruby, OCAML etc — "g forever" <g24ever@...>

13 messages 2001/01/04

[#8774] No :<, :>, etc. methods for Array — "Brian F. Feldman" <green@...>

So, why not include Comparable in Array by default? It shouldn't have any

28 messages 2001/01/07
[#8779] Re: No :<, :>, etc. methods for Array — matz@... (Yukihiro Matsumoto) 2001/01/07

Hi,

[#8780] Re: No :<, :>, etc. methods for Array — "Brian F. Feldman" <green@...> 2001/01/07

matz@zetabits.com (Yukihiro Matsumoto) wrote:

[#8781] Re: No :<, :>, etc. methods for Array — gotoken@... (GOTO Kentaro) 2001/01/07

In message "[ruby-talk:8780] Re: No :<, :>, etc. methods for Array"

[#8782] Re: No :<, :>, etc. methods for Array — "Brian F. Feldman" <green@...> 2001/01/07

gotoken@math.sci.hokudai.ac.jp (GOTO Kentaro) wrote:

[#8829] Sandbox (again) — wys@... (Clemens Wyss)

Hi,

20 messages 2001/01/08
[#8864] Re: Sandbox (again) — Clemens Hintze <c.hintze@...> 2001/01/08

On 8 Jan, Clemens Wyss wrote:

[#8931] String confusion — Anders Bengtsson <ndrsbngtssn@...>

Hello everyone,

21 messages 2001/01/09
[#8937] Re: String confusion — matz@... (Yukihiro Matsumoto) 2001/01/09

Hi,

[#8953] Please remove account from files — "Thomas Daniels" <westernporter@...>

Please take my e-mail address from your files and "CANCEL" my =

14 messages 2001/01/09
[#8983] Re: Please remove account from files — John Rubinubi <rubinubi@...> 2001/01/10

On Wed, 10 Jan 2001, Thomas Daniels wrote:

[#9020] time to divide -talk? (was: Please remove account from files) — Yasushi Shoji <yashi@...> 2001/01/10

At Wed, 10 Jan 2001 14:23:30 +0900,

[#9047] Re: time to divide -talk? (was: Please remov e account from files) — Aleksi Niemel<aleksi.niemela@...>

Yasushi Shoji:

27 messages 2001/01/10
[#9049] Re: time to divide -talk? — Yasushi Shoji <yashi@...> 2001/01/10

At Thu, 11 Jan 2001 00:20:45 +0900,

[#9153] what about this begin? — Anders Strandl Elkj誡 <ase@...> 2001/01/11

[#9195] Re: Redefining singleton methods — ts <decoux@...>

>>>>> "H" == Horst Duch=EAne?= <iso-8859-1> writes:

10 messages 2001/01/12

[#9242] polymorphism — Maurice Szmurlo <maurice@...>

hello

73 messages 2001/01/13

[#9279] Can ruby replace php? — Jim Freeze <jim@...>

When I read that ruby could be used to replace PHP I got really

15 messages 2001/01/14

[#9411] The Ruby Way — "Conrad Schneiker" <schneiker@...>

As a member of the "Big 8" newsgroups, "The Ruby Way" (of posting) is to

15 messages 2001/01/17

[#9462] Re: reading an entire file as a string — ts <decoux@...>

>>>>> "R" == Raja S <raja@cs.indiana.edu> writes:

35 messages 2001/01/17
[#9465] Re: reading an entire file as a string — Dave Thomas <Dave@...> 2001/01/17

raja@cs.indiana.edu (Raja S.) writes:

[#9521] Larry Wall INterview — ianm74@...

Larry was interviewed at the Perl/Ruby conference in Koyoto:

20 messages 2001/01/18
[#10583] Re: Larry Wall INterview — "greg strockbine" <gstrock@...> 2001/02/08

Larry Wall's interview is how I found out

[#9610] Re: 101 Misconceptions About Dynamic Languages — "Ben Tilly" <ben_tilly@...>

"Christian" <christians@syd.microforte.com.au> wrote:

13 messages 2001/01/20

[#9761] Re: 101 Misconceptions About Dynamic Languages — ts <decoux@...>

>>>>> "C" == Christoph Rippel <crippel@primenet.com> writes:

16 messages 2001/01/23

[#9792] Ruby 162 installer available — Dave Thomas <Dave@...>

15 messages 2001/01/24

[#9958] Re: Vim syntax files again. — "Conrad Schneiker" <schneik@...>

Hugh Sasse wrote:

14 messages 2001/01/26
[#10065] Re: Vim syntax files again. — Hugh Sasse Staff Elec Eng <hgs@...> 2001/01/29

On Sat, 27 Jan 2001, Conrad Schneiker wrote:

[#9975] line continuation — "David Ruby" <ruby_david@...>

can a ruby statement break into multiple lines?

18 messages 2001/01/27
[#9976] Re: line continuation — Michael Neumann <neumann@...> 2001/01/27

On Sat, 27 Jan 2001, David Ruby wrote:

[#9988] Re: line continuation — harryo@... (Harry Ohlsen) 2001/01/28

>A statement break into mutliple lines if it is not complete,

[ruby-talk:9919] ANN: AspectR 0.2

From: Robert Feldt <feldt@...>
Date: 2001-01-26 09:43:54 UTC
List: ruby-talk #9919
Hi,

Avi Bryant and me joined forces and merged our two Aspect-oriented
Programming (AOP) hacks into AspectR. (Avi will submit to RAA in a couple
of hours or so in the mean time you can find it at
www.ce.chalmers.se/~feldt/ruby/extensions/aspectr/aspectr-0-2.rb) It's
still a hack/pre-alpha release but IOHO it is useable. Be warned that
there are probably bugs, though...

Below you'll find an excerpt from the readme/header. Would be great if
some of you AOP-gurus out there can comment or have some ideas. Thanks.

If you wonder what AOP is you can take a look at
http://www.parc.xerox.com/csl/projects/aop/. On the more pragmatic side
(;-)) you might appreciate the following code for adding logging/tracing 
to all classes in your project:

require 'aspectr'
include AspectR
module Logger; extend Aspect
  def tick; "#{Time.now}"; end
  def log_enter(method, exitstatus, *args)
    $stderr.puts "#{tick} #{self.class}##{method}: args = #{args.inspect}"
  end	
  def log_exit(method, exitstatus, *args)
    $stderr.print "#{tick} #{self.class}##{method}: exited "
    if exitstatus.kind_of?(Array)
      $stderr.puts "normally returning #{exitstatus[0].inspect}"
    elsif exitstatus == true
      $stderr.puts "with exception '#{$!}'"
    else
      $stderr.puts "normally"
    end
  end
end
AspectR.wrap_classes(Logger, :log_enter, :log_exit, classes, methodregexp)

where classes is array with your classes and methodregexp is a regexp for
the methods to add logging/tracing to.

Regards,

Robert

# AspectR - simple Aspect-Oriented Programming (AOP) in Ruby.
# Version 0.2, 2001-01-26.
#
# AspectR lets a module wrap any number of methods in other classes 
# (or objects) with the "advice" methods (in the lingo of Aspect/J) 
# of the module.
# Usage:
#  require 'aspectr'
#  module MyAspect
#  	extend Aspect
#	def someAdviceMethod(method, exception, *args)
#	     ...
#       end
#	... some other advice methods ...
#  end
#  MyAspect.wrap(someClass, :preAdvice, :postAdvice, ... methods to
wrap...)
#  or
#  MyAspect.wrap(someClass, :preAdvice, :postAdvice, /patternToWrap/)
#  or
#  AspectR.wrap_classes(someAspect, :predAdvice, :postAdvice,
#                       [Class1, Class2], ...methods to wrap...)
#
# Advice methods are passed a variable number of parameters:
# the first is the name of the method currently being wrapped
# the second is the exit/return status:
#	Array with return value(s) if the method exited normally
#	true if the method exited with an exception
# 	nil if the method hasn't yet exited (for preAdvice)
# the rest are the arguments that were passed to the wrapped method.
# 
# Main features of AspectR (in AspectJ lingo):
#   * Join points: 
#       object receives method/constructor call, and field 
#       accessed (if access is via getter/setter meth)
#   * Advices: before (pre), after returning and after throwing (post)
#   * Aspects: declared as modules extending (top-level) module
Aspect. This
#       supports "abstract" Aspects and overriding between advices.
#   * Wildcards (really regexps) can be used in pointcut designators, ie.
#       to specify classes and methods to wrap advice's to.
#   * Pointcut parameters: advices can access object and method receiving 
#       call, arguments to call, exception raised and return values.
#
# AspectJ feature that AspectR is missing (AOP gurus out there: Any need
for
# these features? Are they meaningful in Ruby?):
#   * Join points: method/constructor called, method/constructor executes
(?),
#       exception handler executes
#   * Most of the pointcut designator primitives
#   * Composition of pointcut designators (well you can of course specify 
#       several method calls in different classes and objects)
#   * 'around' advices (should be pretty easy to add if there's a benefit)
#   * precedence/specificity among advices/aspects
#   * reflection by sending joinpoint object to advices with context of
join
#       point etc (easily added but why?)
#   * control-flow based crosscutting (might be possible if we locally
attach
#       a trace func but are they needed?)
#
# TODO/WishList for AspectR:
#   * FIX: generate_syntax must handle all special method names. Apply to
#          Ruby std classes to find the problematic ones.
#   * FIX: Since Advice's are included their method names might clash with
#          method names in wrapped classes/objects.
#   * FIX: Advice methods shouldn't be "renamed" (aliased) when called in
#          classes since we cannot change them dynamically afterwards...
#          Or how should it work? What is AOP state-of-the-art?
#   * Move examples into test file and extend the tests.
#   * Move stuff from this painstakingly long header into some README ;-)
#   * Adding method call join points by setting a trace_function in the
#     dispatch code?! But the perfomrance penalty with trace funcs is
#     severe...
#   * Some way to match regexp to methods when wrapping object? Should we
#     simply match to methods in objects class and then make them
singletons?
#     Probably...
#   * Find out if it is possible to dynamically control if the aspect will
be
#     called. Would it be a good thing to be able to turn advice dispatch
off
#     when in an advice method?
#     return #{call} if @@__aop_disabled at the first row of the
dispatcher?
#     Or more complex expressions? Control for each aspect? (Possible
#     implementation is to have flags in a hash in Advice)
#   * Check into RAA under lib/Meta?
#   * Encapsulate all join point information (method name, args, return
val,
#     context, exception etc) into one object (JoinPoint??) that is sent
to 
#     advice's? Performance penalty? Maybe you should be able to choose
#     the kind of data returned? But there will be a lot of params so we'd
#     really need some keyword args. Matz, are you listening? ;-)
#   * Add examples: type/error checking, synch, fault tolerance, profiling
#   * Thread safety?!
#   * Check what is in AspectJ or other AOP-project/papers and see what we
#     could/should add:
#     * Check out the paper Aspect Oriented Programming: A Critical
Analysis 
#       of a New Programming Paradigm (1999) Timothy Highley, Michael
Lack, 
#       Perry Myers
#

In This Thread

Prev Next