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>