[#396148] Facebook Group — Moses Aronov <mosesaro@...>

There is a facebook group that was recently created so we could all communicate with other fellow developers

13 messages 2012/06/05
[#396178] Re: Facebook Group — Chad Perrin <code@...> 2012/06/06

On Wed, Jun 06, 2012 at 01:55:48AM +0900, Moses Aronov wrote:

[#396186] Inexplicable Argument Error — Doug Jolley <lists@...>

I am encountering a very strange argument error. I simplified my code

12 messages 2012/06/06

[#396229] Thread#kill is not rescued by "rescue Exception" — Iñaki Baz Castillo <ibc@...>

Hi, let me show this easy code:

13 messages 2012/06/07

[#396333] Is "a,b=c,d" atomic? or do I need a Mutex? — Iñaki Baz Castillo <ibc@...>

Hi, I have two methods that could be called by different threads and

10 messages 2012/06/10

[#396357] ffi - Popping image on top of the screen — "Damián M. González" <lists@...>

Ey guys, how are you? I`m developing an application in Ruby, using

12 messages 2012/06/11

[#396373] Why should I learn ruby? — Kasper Steensig <lists@...>

I have wondered whether I should learn ruby or python hence they are

16 messages 2012/06/11

[#396503] Syntax Highlighter — Intransition <transfire@...>

Would you agree that Ruby shouldn't lack for a syntax highlighting library

18 messages 2012/06/14

[#396589] Unsubcripe — Suresh Rajkumar <sureshrajchennai@...>

Unsubcipe my mail address from the group.

13 messages 2012/06/18

[#396615] Symbols and Strings... — Hal Fulton <rubyhacker@...>

Hello, all...

29 messages 2012/06/18
[#396620] Re: Symbols and Strings... — Eric Hodel <drbrain@...7.net> 2012/06/18

On Jun 18, 2012, at 15:09, Hal Fulton wrote:

[#396641] Re: Symbols and Strings... — Robert Klemme <shortcutter@...> 2012/06/19

On Tue, Jun 19, 2012 at 12:31 AM, Eric Hodel <drbrain@segment7.net> wrote:

[#396643] Re: Symbols and Strings... — Hal Fulton <rubyhacker@...> 2012/06/19

Personally, I don't have a problem with "reducing the contract"

[#396646] Re: Symbols and Strings... — Robert Klemme <shortcutter@...> 2012/06/19

On Tue, Jun 19, 2012 at 5:17 PM, Hal Fulton <rubyhacker@gmail.com> wrote:

[#396659] Re: Symbols and Strings... — Hal Fulton <rubyhacker@...> 2012/06/19

> > Freezing an object also reduces its contract.

[#396678] Re: Symbols and Strings... — Robert Klemme <shortcutter@...> 2012/06/20

On Tue, Jun 19, 2012 at 10:12 PM, Hal Fulton <rubyhacker@gmail.com> wrote:

[#396701] Re: Symbols and Strings... — Henry Maddocks <hmaddocks@...> 2012/06/20

[#396702] Re: Symbols and Strings... — Bartosz Dziewoński <matma.rex@...> 2012/06/20

2012/6/20 Henry Maddocks <hmaddocks@me.com>:

[#396703] Re: Symbols and Strings... — Henry Maddocks <hmaddocks@...> 2012/06/20

[#396710] Re: Symbols and Strings... — Jeremy Bopp <jeremy@...> 2012/06/20

On 06/20/2012 03:58 PM, Henry Maddocks wrote:

[#396627] Does ERB have recursive template support? — Todd Wei <lists@...>

I want to use ERB template library to do some code generation. It

10 messages 2012/06/19

[#396649] Looking for a better way to add a method to a core class than monkey patching — Iain Barnett <iainspeed@...>

Hi all,

17 messages 2012/06/19
[#396670] Re: Looking for a better way to add a method to a core class than monkey patching — Avdi Grimm <groups@...> 2012/06/20

Please do not monkey patch core libraries in gems, unless the *purpose* of

[#396685] Benchmark obsession? — "Jan E." <lists@...>

Hi,

23 messages 2012/06/20
[#396709] Re: Benchmark obsession? — Ryan Davis <ryand-ruby@...> 2012/06/20

[#396815] Array#sample is Set#sample and not Array#sample ! — Michel Demazure <lists@...>

Arrays are ordered, sets are not. Sampling an array should give random

11 messages 2012/06/25

[#396877] CSV.open problem, help please — Kaye Ng <lists@...>

This code doesn't seem to work

21 messages 2012/06/27

[#396896] Copying text from MS Word and wrapping in HTML - help please — Adam Holloway <lists@...>

Hi,

11 messages 2012/06/27

[#396966] Interactions between 'new' and 'initialize' ? — Cees Zeelenberg <lists@...>

In JRuby, I am extending an existing Java Class with a Ruby initialising

9 messages 2012/06/28

[#396975] stack level too deep for quicksort code — bei zhao <lists@...>

Hi, below is my quicksort implementation in ruby(using the first element

12 messages 2012/06/28

[#396996] Accessor Methods with a Twist — Doug Jolley <lists@...>

I am surprised that the code shown below returns, 'Doug'. I would

15 messages 2012/06/29

[#397001] ruby performance — anaray anaray <lists@...>

Hi,

33 messages 2012/06/29
[#397007] Re: ruby performance — Bartosz Dziewoński <matma.rex@...> 2012/06/29

The MRI is, unfortunately, slow as balls, and there's not much you can

[#397008] Re: ruby performance — Hans Mackowiak <lists@...> 2012/06/29

Bartosz Dziewoナгki wrote in post #1066673:

[#397010] Re: ruby performance — Bartosz Dziewoński <matma.rex@...> 2012/06/29

2012/6/29 Hans Mackowiak <lists@ruby-forum.com>:

[#397011] Re: ruby performance — Bartosz Dziewoński <matma.rex@...> 2012/06/29

2012/6/29 Hans Mackowiak <lists@ruby-forum.com>:

[#397047] Re: ruby performance — "Andreas S." <lists@...> 2012/07/01

Bartosz Dziewoński wrote in post #1066681:

[#397048] Re: ruby performance — Bartosz Dziewoński <matma.rex@...> 2012/07/01

2012/7/1 Andreas S. <lists@ruby-forum.com>:

[#397068] Re: ruby performance — Robert Klemme <shortcutter@...> 2012/07/02

On Sun, Jul 1, 2012 at 1:42 PM, Bartosz Dziewoナгki <matma.rex@gmail.com> wrote:

[#397086] Re: ruby performance — Dan Connelly <lists@...> 2012/07/02

Here's my contribution:

Enumerable#every, the Functor and Ruby support for HOM

From: Intransition <transfire@...>
Date: 2012-06-16 22:47:34 UTC
List: ruby-talk #396569
Have you heard of `Enumerable#every`? It lets you apply a method call to 
all elements of an enumerable. Check it out...

  [1,2,3].every + 3  #=> [4,5,6]

  [1,2,3].every * 3  #=> [3,6,9]

  words = ["hello", "world"]
  words.every.upcase!
  words  #=> ["HELLO", "WORLD"]

Essentially every is a convenient and nicely readable "fluent notation" 
alternative to using a map/collect block.

Now you might be wondering how this bit of magic is achieved? Here is the 
definition.

    module Enumerable
       def every
          Functor.new do |op,*args|
            map{ |a| a.send(op,*args) }
          end
       end
    end

As you can see it works via something called a "Functor". Generally 
speaking, a "functor" is simply an object that encapsulates a function. In 
this case I have used the term as a concise reference to a specialized form 
of such to achieve <a href="
http://en.wikipedia.org/wiki/Higher_order_message">Higher Order 
Messaging</a>. The basic definition of this class is:

  class Functor
    def initialize(&function)
      @function = function
    end
    def method_missing(op, *args, &blk)
      @function.call(op, *args, &blk)
    end
  end

This Functor class can be used in many many ways. Enumerable#every is just 
one of many examples. In fact, Ruby's own Enumerator class is actually just 
a highly specialized type of Functor.

As useful as a Functor can be, it does however have two downsides. First it 
depends on #method_missing. This means public Object methods 
can interfere with its usefulness. This can be worked around by making 
Functor a subclass of BasicObject. Though a few public methods remain, this 
is good enough for all practical purposes. A more problematic issue is the 
fact that it requires the creation of an indeterminate object every time 
the a method using a Functor is called. This is pretty inefficient, slows 
things down and requires us to be memory conscious. Caching can be used in 
some cases, but rarely is it an ideal fix.

Recently I came up with an idea that would allow these issues to be 
circumvented entirely. I realized that since this is a higher order 
*message*, then really it would be best handled as a messaging issue 
--hence via the definition of a "higher order method". In other words if 
Ruby had built-in support for the concept, the intermediate object would 
not be necessary and consequently interfering public methods would not 
exist. To facilitate this, I came up with a potential notation. Here's how 
it would be used to define Enumerable#every:

    module Enumerable
      def every => op, *args
        map{ |a| a.send(op,*args) }
      end
    end

(Hmm... as I typed this it occurs to me that maybe `=>` would be more 
intuitive if it pointed the other way using `<=`.) Regardless of the actual 
notation used, the idea is to allow Ruby to handle higher-order-messages 
internally as a special type of method.

For reference here are a few other examples of using Functor:
* 
https://github.com/rubyworks/facets/blob/master/lib/core/facets/string/file.rb
* 
https://github.com/rubyworks/facets/blob/master/lib/core/facets/kernel/ergo.rb
* 
https://github.com/rubyworks/facets/blob/master/lib/core/facets/kernel/not.rb

P.S. There is also a functor gem out there, but it is not the Functor as 
defined above. The functor gem came along well after the one described here 
(which is included with Ruby Facets). The gems's implementation is 
basically a kind of struct that supports multiple dispatch capabilities. 
The above is much more generic and actually can even be used to create the 
functor gem's more specialized kind with just a bit of extra code.

In This Thread

Prev Next