Hi,

2010/12/2 Shugo Maeda <shugo / ruby-lang.org>:
> My proposal is to use modules as namespaces for refinements.  So
> indentation is a necessary evil.  Otherwise, we need syntax like Java
> packages and one file for each package.

I'm not against using modules as namespaces and refinement scope,
but I don't like to see the same module being used for refinement
and traditional use at the same time.
Modules for mix-in, modules for collection of helper methods, and
modules for refinement should be separated, at least, in casual
use.

We can clearly see that the following module FooExt is only for
refinement.  Thus I like this style.

  module FooExt
    refine Foo
    def ... end
  end


>> A longer (more "meta-programming-like") name would be appropriate to
>> the block style, such as Module#refine_class, #refine_class_eval,
>> #class_eval_with_refinement.
>
> Meta-programming means programming on programs, so the non-block style
> is also a meta-programming feature.  Why should only the block style
> be named more "meta-programming-like"?

I can call it "not for casual use" instead of "meta-programming-
like."


> Could you tell me why
>
>  refine Foo
>    def bar; end
>  end
>
> is good but
>
>  refine Foo do
>    def bar; end
>  end
>
> is not so good?

Because block includes method definition.  A block looks to me
"dynamic" behavior, while method definition (using `def' keyword)
looks "static" behavior.
Of course I know that both are also evaluated dynamically in
Ruby, but I don't think that Ruby encourages such a style so much.


> I don't know why meta-programming features should have long names.
> In Ruby, meta-programming is encouraged, and meta-programming features
> sometimes have a short name such as eval, but rarely have a keyword.

Ah, we found the perception gap between I and you.
I do NOT think that meta-programming is so encouraged even in Ruby.
It is like "a trick," and should be used only when it is appropriate.
If it was really so encouraged, Ruby would not provide many
syntax, such as `def' and `class.'

And I guess that "eval" just came from Perl.


>> The non-block style has a precedent (Module#include), so, if it is
>> adopted, I agree that any new keyword is not needed.  Otherwise, I
>> prefer a new keyword to a new weird (to me) coding style.
>
> Are precedents so important for innovations?

I like this feature as new OO paradigm, but syntax is another
matter.
I also like traditional syntax design principle --including
"syntax-like convention" such as Kernel#require and #include--
and I want this feature also to respect it.

-- 
Yusuke Endoh <mame / tsg.ne.jp>