I want to start a discussion about two things that Matz talked about at 
the rubycon. Dave Thomas suggested that we could get Matz' anonymous 
function by using "def" without a name. Others suggested that if def 
returned a method object, then annotations could be applied to that 
object. So here goes my suggestions. As they stand, they are not even 
parseable by Ruby, but lets start talking about it anyway.

Anonymous functions:

x = def (a=1,b=2) { ... }
y = def(a,b=3) begin
    .....
end

Annotated functions:

class A
    def foo(a, b)
    .visibility   :private      # how can this be parsed? (the above 
line has no trailing marker to signal it as one expression
    .returns Integer
    begin
        ....
    end

    def foo2(a, b).visibility(private).returns(Integer) { ... }

    f3 = def foo3(a,b)
    end
   
    f3.visibility(:private).returns(Integer)

Anonymous, Annotated functions

x = def (a, b).visibility(private).returns(Integer) { ... }
y = def (a, b) { ... }
y.visibility(:private)      # apply annotations later
y.returns(:integer)

where for anonation examples:

class Method
    def visibility(v)
       @annotations[:visibility] = v
       return self
    end

    def returns(r)
       @annotations[:returns] = v
       return self
    end
end

Please rake me over the coals because I am so ignorant ;-)

Steve Tuckner