From: Yukihiro Matsumoto Date: 2011-10-03T06:38:13+09:00 Subject: [ruby-core:39844] Re: Discussion results Hi, In message "Re: [ruby-core:39840] Re: Discussion results" on Mon, 3 Oct 2011 03:36:02 +0900, Intransition writes: |I did not have the fortune of attending the discussion, but I would |like to put forth some notions I've had/seen for Ruby 2.0: | |1) Go through ActiveSupport core extensions and Ruby Facets to find |most popular and useful methods and port them over. Good examples are |String #indent, #tab, #tabto, #to_h/#to_hash methods, Hash#rekey, |#blank, those have been useful to me. I'm sure others have their own |favorites too --take a poll or do some code analysis to figure out |which ones. Activesupport is just fine by itself. I am not that positive to merge anything from Activesupport, unless there is some very specific reason to merge to the core. I have merged Symbol#to_proc from Activesupport in the past, but slight behavioral difference caused problems. |2) Make toplevel a self extended module instead of a weak proxy of |Object. Besides being conceptually easier to understand, it would |allow DSL scripts to run at toplevel without worry of infecting |Object. This would have been a huge boon for me in couple of my |projects, such as my test framework --instead I had to write my own |toplevel-like proxy to fake it, which is inevitably imperfect and just |pain to have to do. I don't understand what would satisfy you. Could elaborate rather than forcing me to guess your intention? |3) Add margin literal, e.g. | | > %L|This is | | margin | | controlled. | => "This is\n margin\n controlled." | |Nothing sucks more for readability than having to flush a literal |string to the left margin in the middle of indented code. Use here documents. At least above syntax requires huge overhaul of the lexer/parser, that I don't think worth it. |4) Treat `@` as a hash object, so @['foo'] is the same as @foo. This |would make it much easier to work with instance variables, e.g. |@.each{ |k,v| ... } I am not positive about this proposal. It is not intuitive. |5) Better support for lazy and differed processing, e.g. lazy.rb and |denumerable.rb. I agree. I like lazy. That would be a good candidate to be merged in. I know little about denumerable. I will investigate later. |6) Add High-order Function to language but more tightly integrated to |remove inefficiencies of pure-Ruby implementation. This is great |device for making robust fluent notations. Be more specific. What would code look like by using it? |7) Lastly, I think serious consideration should be given to removing |the distinction between class and module. The distinction is purely a |conceptual one that has built artificial limitations and undo |complications into the language. What difference does it make to Bar |if we include Bar, subclass Bar or instantiate Bar? Bar shouldn't have |to care --it's just an encapsulation. I am sorry but I'd have to say no. Distinction between class and module is very important for the fundamental OO design policy of Ruby language. I really like the simplicity of Ruby's mix-in system. Removing the distinction would mean going back to multiple inheritance, which I hate. Of course I know multiple inheritance works just fine for many cases, but this is my language, so it will follow my preference. In message "Re: [ruby-core:39842] Re: Discussion results" on Mon, 3 Oct 2011 03:44:14 +0900, Intransition writes: | |Oh, how could I forget: | |8) Open up access to the internal methods for looking up scripts used |to find files in the $LOAD_PATH. Use of this is plugin file loaders. It is under discussion. Even though I am not positive about disclosing internals of #require, it might be useful for some cases. |9) autoload needs use an overridable require method of some sort. I |use a custom load manager for developement, but since I can't get hold |of autoload's require I can't use autoload in my projects, which |majorly sucks!!! I hate autoload. autoload is one of things I regret. I'm not positive about enhancing something that I hate. matz.