[#61171] Re: [ruby-changes:33145] normal:r45224 (trunk): gc.c: fix build for testing w/o RGenGC — SASADA Koichi <ko1@...>
(2014/03/01 16:15), normal wrote:
[#61243] [ruby-trunk - Feature #9425] [PATCH] st: use power-of-two sizes to avoid slow modulo ops — normalperson@...
Issue #9425 has been updated by Eric Wong.
[#61359] [ruby-trunk - Bug #9609] [Open] [PATCH] vm_eval.c: fix misplaced RB_GC_GUARDs — normalperson@...
Issue #9609 has been reported by Eric Wong.
(2014/03/07 19:09), normalperson@yhbt.net wrote:
SASADA Koichi <ko1@atdot.net> wrote:
[#61424] [REJECT?] xmalloc/xfree: reduce atomic ops w/ thread-locals — Eric Wong <normalperson@...>
I'm unsure about this. I _hate_ the extra branches this adds;
Hi Eric,
SASADA Koichi <ko1@atdot.net> wrote:
(2014/03/14 2:12), Eric Wong wrote:
SASADA Koichi <ko1@atdot.net> wrote:
[#61452] [ruby-trunk - Feature #9632] [Open] [PATCH 0/2] speedup IO#close with linked-list from ccan — normalperson@...
Issue #9632 has been reported by Eric Wong.
[#61496] [ruby-trunk - Feature #9638] [Open] [PATCH] limit IDs to 32-bits on 64-bit systems — normalperson@...
Issue #9638 has been reported by Eric Wong.
[#61568] hash function for global method cache — Eric Wong <normalperson@...>
I came upon this because I noticed existing st numtable worked poorly
(2014/03/18 8:03), Eric Wong wrote:
SASADA Koichi <ko1@atdot.net> wrote:
what's the profit from using binary tree in place of hash?
Юрий Соколов <funny.falcon@gmail.com> wrote:
[#61687] [ruby-trunk - Bug #9606] Ocassional SIGSEGV inTestException#test_machine_stackoverflow on OpenBSD — normalperson@...
Issue #9606 has been updated by Eric Wong.
[#61760] [ruby-trunk - Feature #9632] [PATCH 0/2] speedup IO#close with linked-list from ccan — normalperson@...
Issue #9632 has been updated by Eric Wong.
[ruby-core:61388] [ruby-trunk - Feature #9548] Module curry
Issue #9548 has been updated by Boris Stitnicky.
Indeed, there is much less use for currying than for chaining in the functional world. (In #9552, I now prefer `#chain` to `#map!`.) Yet there is already `Proc#curry` in Ruby (whose present behavior is horrible, imo), therefore it is fair consider giving the same convenience to the functions employed in modules as methods.
As for the name, in this particular case, I would still argue in favor of `Module#curry`. My list of possibilities would be:
`#curry --- 5`
`#partial_application --- 1 --- too long`
`#partial_apply --- 1`
`#partially_apply --- 0`
`#partial` --- 2`
`#filter` --- 0 --- means too many things`
In my opinion, `curry` is by far the best, and I woul like to pretty please you to give your nod to misuse the word in this way, should it be decided that such feature on `Module` is desirable at all.
As for the usecases, again, there are less of them than for chaining, but let me make up some real-world example which would be of use in my code:
```ruby
class Simulation
def initialize( initial_marking: {},
marking_clamps: {},
method: :pseudo_euler,
step: 1.0,
target_time: 60.0,
sampling: 5.0,
guarded: false )
# object initialization
end
# class assets
end
class Net
def initialize *args
# net initialization
end
def Simulation
# creates a parametrized subclass of Simulation
@Simulation ||= Simulation.parametrize( net: self )
end
def simulation **named_args
Simulation.new **named_args
end
curry euler simulation( method: :euler, ** )
curry pseudo_euler simulation( method: :pseudo_euler, ** )
curry runge_kutta simulation( method: :runge_kutta, ** )
curry gillespie simulation( method: :gillespie, step: nil, ** )
# Gillespie method computes its own step length.
end
net = Net.new
# And then, instead of
sim = net.simulation( method: :gillespie,
initial_marking: { A: 100, B: 200 },
# etc.
)
# one could just type
sim = net.gillespie( initial_marking: { A: 1, B: 2 },
# etc.
)
```
----------------------------------------
Feature #9548: Module curry
https://bugs.ruby-lang.org/issues/9548#change-45699
* Author: Boris Stitnicky
* Status: Feedback
* Priority: Normal
* Assignee:
* Category:
* Target version:
----------------------------------------
I would like to beg for either `Module#curry` method with syntax
```ruby
module Foo
curry( :sym2, :sym1, 0 => 42, 1 => 43, 3 => 44, foo: "bar" )
end
```
or `curry` directive similar to the existing `alias` directive
```ruby
module Foo
curry sym2 sym1( 42, 43, *, 44, foo: "bar )
end
```
Example usage:
```ruby
module MyMath
def power a, b
a ** b
end
curry square power( *, 2 )
curry square_root power( *, 0.5 )
curry cube( *, 3 )
curry pow2 power( 2, * )
curry pow_e power( Math::E, * )
curry pow10 power( 10, * )
end
```
--
http://bugs.ruby-lang.org/