Hi,

2010/11/30 Yusuke ENDOH <mame / tsg.ne.jp>:
>>> Because it requires less indentation, I thought.
>>
>> I see.     >> different from refine with a block.
>
> Maybe another name is needed?
>
> I think that the short name `refine' is more appropriate to the non-
> block style than the block style because I believe the non-block
> style is more suitable for casual use.    
> and it complies with traditional style (like Module#include).

It doesn't make sense because Module#include is a very different
feature from refine.

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.

> 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 guess that most of these constructs have reasons why they need
>>>> keywords and special syntax.
>>>
>>> I don't think so. class Foo; end" can be written as "Foo =
>>> Class.new { }" (though there are indeed subtle differences between
>>> them).
>>
>> "refine Foo do end" is different from "Foo = Class.new {}" because
>> "refine Foo do end" looks good, but "Foo = Class.new {}" doesn't.
>> I think how it looks is more important than whether it uses keywords or not.
>
> "refine Foo do def ... end end" looks not so good to me.

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?

They look similar for me.  The latter has "do", but it seems a good
word in this context.
# I'm not sure because I'm not a good English writer.

>>> The API design that "def" statements are put in a Ruby's block,
>>> is slightly weird (for me).      
>>> such a style in Ruby's embedded featues, except meta programming
>>> (such as Class.new and class_eval).
>>> From now on, does Ruby encourage such a style in casual use?
>>
>> I think Module#refine is a meta programming feature like class_eval,
>> and most application programmers need not use it directly.
>
> I guess you think so because we are not used to the feature yet.
> If it is really just a meta-programming feature, the name should be
> more "meta-programming-like".

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.

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

Are precedents so important for innovations?

-- 
Shugo Maeda