Hi,
We made a discuss tonight, the last day of RubyConf 2011 about 2.0
features and several conclusion.
I send a memo of discussion. I hope it will boost a process toward 2.0.
* Module#prepend and Module#mix
- Module#mix => rejected
- Module#prepend
# Sorry, I can't write the discussion why we decide this specification.
class C0;
def foo; :C0; end
end
module M
def foo; :m; end
end
class C1 < C0
prepend M
def foo; :C1; end
end
C.ancestors #=> [M, C1, C0, Object]
C.new.foo
C1.new.foo #=> :m
C1.remove_method(:foo)
C1.new.foo #=> :m
C1.new.foo #=> C0
* Allow duplication in same module in ancestor tree
module M0; end
module M1; include M0; end
module M2; prepend M0; end
class C
include M0
prepend M1
include M2
prepend M0
end
# Mx@My means Mx module included/prepended by My
C.ancestors #=> [M0, M1, M0@M1, C, M0@M2, M2, M0, Object]
* Object#confirm_to?([an array of symbols])
It is same as:
[an array of symbols].all?{|sym|
obj.respond_to? sym
}
* %s(foo bar) or %S(foo bar) notation
Same as [:foo, :bar]. %s and %S is same as %w and %W?
* Method#source_location
Return also begin and end position in file. You can get source code
using it. We don't decide how to return this location.
def m; end
p method(:m).source_location
#=> [file, line, beg, end]
# or
#=> [file, line, (beg .. end)]
# or others?
* Float literal (1.0 or 3.2 or something) should return Rational object
or not?
ex) 1.3 #=> Rational(3, 10)
1/2 #=> 0 (not changed integer division)
1/2.0 #=> Rational
1.fdiv(2) #=> 0.5
Matz like this idea. But it has compatibility issue?
(not concluded)
* nonblocking I/O
not concluded.
- Exception (EEOF etc) is too heavy for Rails app.
- We need more lightweight exception object creation.
* Threading (remove GVL or GIL)
We don't remove GVL on 2.0.
--
// SASADA Koichi at atdot dot net