[#43077] problems committing — Aaron Patterson <tenderlove@...>
It seems like the disk might be full on the svn server:
5 messages
2012/03/05
[#43090] "\\".gsub("\\", "\\\\") == "\\" ?!!! — Rodrigo Rosenfeld Rosas <rr.rosas@...>
Please, help me understand what is happening here.
6 messages
2012/03/06
[#43094] Re: "\\".gsub("\\", "\\\\") == "\\" ?!!!
— Xavier Noria <fxn@...>
2012/03/06
A literal passed as second argument to gsub goes over two
[#43120] [ruby-trunk - Bug #6124][Open] What is the purpose of "fake" gems in Ruby — Vit Ondruch <v.ondruch@...>
27 messages
2012/03/07
[#43142] Questions about thread performance (with benchmark included) — Rodrigo Rosenfeld Rosas <rr.rosas@...>
A while ago I've written an article entitled "How Nokogiri and JRuby
10 messages
2012/03/08
[#43785] Re: Questions about thread performance (with benchmark included)
— Tomoyuki Chikanaga <nagachika00@...>
2012/03/28
Hello, Rodrigo.
[#43797] Re: Questions about thread performance (with benchmark included)
— Rodrigo Rosenfeld Rosas <rr.rosas@...>
2012/03/28
Em 27-03-2012 23:22, Tomoyuki Chikanaga escreveu:
[#44213] Re: Questions about thread performance (with benchmark included)
— SASADA Koichi <ko1@...>
2012/04/09
Hi,
[#44214] Re: Questions about thread performance (with benchmark included)
— Urabe Shyouhei <shyouhei@...>
2012/04/09
#### MRI threads myths and facts #####
[#44220] Re: Questions about thread performance (with benchmark included)
— Rodrigo Rosenfeld Rosas <rr.rosas@...>
2012/04/09
Hi Urabe, thank you for your input, but I think you have
[#43163] Help w/ some C to create NullClass — trans <transfire@...>
I am trying to write a C extension for "NullClass" functionality. I've
3 messages
2012/03/10
[#43245] [ruby-trunk - Bug #6131][Open] Ctrl-C handler do not work from exec process (Windows) — Luis Lavena <luislavena@...>
10 messages
2012/03/12
[#43279] [ruby-trunk - Bug #6148][Open] ruby_1_9_3 revision conflict — Jon Forums <redmine@...>
4 messages
2012/03/14
[#43313] [ruby-trunk - Feature #6150][Open] add Enumerable#grep_v — Suraj Kurapati <sunaku@...>
17 messages
2012/03/15
[#43325] [ruby-trunk - Bug #6154][Open] Eliminate extending WaitReadable/Writable at runtime — Charles Nutter <headius@...>
25 messages
2012/03/16
[#43369] Re: [ruby-trunk - Bug #6154][Open] Eliminate extending WaitReadable/Writable at runtime
— Tanaka Akira <akr@...>
2012/03/17
2012/3/16 Charles Nutter <headius@headius.com>:
[#43326] [ruby-trunk - Bug #6154] Eliminate extending WaitReadable/Writable at runtime
— Charles Nutter <headius@...>
2012/03/16
[#43334] [ruby-trunk - Bug #6155][Open] Enumerable::Lazy#flat_map raises an exception when an element does not respond to #each — Dan Kubb <dan.kubb@...>
9 messages
2012/03/16
[#43345] [ruby-trunk - Bug #6159][Open] Enumerable::Lazy#inspect — Benoit Daloze <redmine@...>
10 messages
2012/03/16
[#43497] [ruby-trunk - Bug #6179][Open] File::pos broken in Windows 1.9.3p125 — "jmthomas (Jason Thomas)" <jmthomas@...>
24 messages
2012/03/20
[#43502] [ruby-trunk - Feature #6180][Open] to_b for converting objects to a boolean value — "AaronLasseigne (Aaron Lasseigne)" <aaron.lasseigne@...>
17 messages
2012/03/20
[#43529] [ruby-trunk - Bug #6183][Open] Enumerator::Lazy performance issue — "gregolsen (Innokenty Mikhailov)" <anotheroneman@...>
36 messages
2012/03/21
[#43814] [ruby-trunk - Feature #6219][Open] Return value of Hash#store — "MartinBosslet (Martin Bosslet)" <Martin.Bosslet@...>
20 messages
2012/03/28
[#43904] [ruby-trunk - Feature #6225][Open] Hash#+ — "trans (Thomas Sawyer)" <transfire@...>
36 messages
2012/03/29
[#43923] [ruby-trunk - Feature #6225] Hash#+
— "shyouhei (Shyouhei Urabe)" <shyouhei@...>
2012/03/30
[#43909] [ruby-trunk - Feature #6225][Assigned] Hash#+
— "mame (Yusuke Endoh)" <mame@...>
2012/03/29
[#43951] [ruby-trunk - Bug #6228][Open] [mingw] Errno::EBADF in ruby/test_io.rb on ruby_1_9_3 — "jonforums (Jon Forums)" <redmine@...>
28 messages
2012/03/30
[#43996] [ruby-trunk - Bug #6236][Open] WEBrick::HTTPServer swallows Exception — "regularfry (Alex Young)" <alex@...>
13 messages
2012/03/31
[#44015] [Ruby 1.8 - Bug #6239][Open] super Does Not Pass Modified Rest Args When Originally Empty — "mudge (Paul Mucur)" <mudge@...>
6 messages
2012/03/31
[ruby-core:43721] [ruby-trunk - Feature #5394][Feedback] Anonymous Symbols, Anonymous Methods
From:
"mame (Yusuke Endoh)" <mame@...>
Date:
2012-03-26 18:33:33 UTC
List:
ruby-core #43721
Issue #5394 has been updated by mame (Yusuke Endoh).
Status changed from Open to Feedback
----------------------------------------
Feature #5394: Anonymous Symbols, Anonymous Methods
https://bugs.ruby-lang.org/issues/5394#change-25223
Author: kstephens (Kurt Stephens)
Status: Feedback
Priority: Normal
Assignee:
Category:
Target version:
Proposal for Anonymous Symbols and Anonymous Methods
Anonymous Methods (AnonMeths) can be used for complex orthogonal behaviors that dispatch by receiver class without patching core or other sensitive classes in a globally visible manner.
AnonMeths are located by Anonymous Symbols (AnonSyms).
AnonSyms do not have parseable names, and can only be referenced by value, limiting namespace problems and promoting encapsulation.
AnonMeths are GCed once the AnonSym bound to them are GCed.
AnonMeths would not appear in Object#methods, thus will not confuse introspection.
Assume:
<pre><code class="ruby">
Symbol.new() => #<Symbol:123412> # an AnonSymbol than can never be parsed in ruby code.
anon_sym = Symbol.new() # an AnonSym in a variable that can be closed-over or passed by value.
</code></pre>
Optional Supporting Syntax:
<pre><code class="ruby">
a.*anon_sym(args...) # equiv. to a.send(anon_sym, args...)
class A
def *anon_sym(args...); body...; end
end
</code></pre>
equiv. to:
<pre><code class="ruby">
class A
define_method(anon_sym) {| args... | body... }
end
</code></pre>
AnonSyms are not added directly to a Module's internal symbol-to-method table.
Instead, each AnonSym has an internal module-to-method table that is GCed when the AnonSym is GCed.
<pre><code class="ruby">
rcvr.send(anon_sym, ...)
</code></pre>
will use anon_sym's module-to-method table to locate a method based on usual the receiver's module lookup chain.
Example Application:
Typical visitor pattern that pollutes Array and Object method namespaces:
<pre><code class="ruby">
class Array; def visit(visitor); each { | elem | elem.visit(visitor); } end; end
class Object; def visit(visitor); visitor.something(self); end; end
</code></pre>
Functional alternative using "case ...; when ...":
<pre><code class="ruby">
def visit(obj, visitor)
case obj
when Array
obj.each { | elem | visit(elem, visitor) }
else
visitor.something(obj)
end
end
</code></pre>
AnonMeth version:
<pre><code class="ruby">
def visit(obj, visitor)
sel = Symbol.new
class Array; def *sel(visitor); each { | elem | elem.*sel(visitor) }; end; end
class Object; def *sel(visitor); visitor.something(self); end; end
obj.*sel(visitor)
end
</code></pre>
Imagine that visit() needs dynamic hooks to visit different types:
<pre><code class="ruby">
def visit(obj, visitor)
sel = Symbol.new
class Array; def *sel(visitor); each { | elem | elem.*sel(visitor) }; end; end
class Object; def *sel(visitor); visitor.something(self); end; end
add_visit_methods!(sel)
obj.*sel(visitor)
end
def add_visit_methods!(sel)
class Hash; def *sel(visitor); each { | k, v | v.*sel(visitor); end; end
...
end
</code></pre>
The AnonSym send "rcvr.*sel(...)" dispatches, like a normal method send, directly to the appropriate AnonMeth for "*sel".
visit() can be extended dynamically by adding more AnonMeths bound to "*sel".
The functional "case ...; when..." version is difficult to extend and maintain and is likely to not perform as well as anon messages.
This is similar in style to Scheme letrecs, but is object-oriented.
This idea could be extended to Anonymous Ivars to resolve other namespacing and encapsulation issues for mixins that require state.
-- Kurt Stephens
--
http://bugs.ruby-lang.org/