[#383997] CORE - Alternative Variable Substitution — Ilias Lazaridis <ilias@...>

ruby 1.9

21 messages 2011/06/01

[#384051] CORE - Replace "if __FILE__ == $0" with "executed?" — Ilias Lazaridis <ilias@...>

The construct to detect execution of the file (in order to launch main

12 messages 2011/06/02

[#384104] CORE - Altering Behaviour of "each do" (default param "item") — Ilias Lazaridis <ilias@...>

1.9

76 messages 2011/06/04
[#384111] Re: CORE - Altering Behaviour of "each do" (default param "item") — James Gray <james@...> 2011/06/04

On Sat, Jun 4, 2011 at 6:50 AM, Ilias Lazaridis <ilias@lazaridis.com> wrote:

[#384154] Re: CORE - Altering Behaviour of "each do" (default param "item") — Yukihiro Matsumoto <matz@...> 2011/06/05

Hi,

[#384168] Re: CORE - Altering Behaviour of "each do" (default param "item") — Ilias Lazaridis <ilias@...> 2011/06/06

On 6 =C9=EF=FD=ED, 01:11, Yukihiro Matsumoto <m...@ruby-lang.org> wrote:

[#384228] a little challenge - reproduce this error — Intransition <transfire@...>

Want to see a really amazing error I got this week? Okay... but to

24 messages 2011/06/08
[#384230] Re: a little challenge - reproduce this error — Steve Klabnik <steve@...> 2011/06/08

throw NameError.new("uninitialized constant X::Foo::X")

[#384231] Re: a little challenge - reproduce this error — John Feminella <johnf@...> 2011/06/08

This is a pretty trivial error to generate. Just reference the

[#384232] Re: a little challenge - reproduce this error — Intransition <transfire@...> 2011/06/08

[#384235] Re: a little challenge - reproduce this error — Christopher Dicely <cmdicely@...> 2011/06/08

On Wed, Jun 8, 2011 at 6:43 AM, Intransition <transfire@gmail.com> wrote:

[#384279] CORE - Literal Instantiation breaks Object Model — Ilias Lazaridis <ilias@...>

class String

14 messages 2011/06/09

[#384280] BARRIER - require "rubygems" — Ilias Lazaridis <ilias@...>

ruby 1.9.2p180 Windows 7

30 messages 2011/06/09

[#384283] Classic Computer Science Books — Stu <stu@...>

I wanted to start a thread discussion on classic computer science

38 messages 2011/06/09
[#384288] Re: Classic Computer Science Books — Josh Cheek <josh.cheek@...> 2011/06/10

On Thu, Jun 9, 2011 at 5:18 PM, Stu <stu@rubyprogrammer.net> wrote:

[#384289] Re: Classic Computer Science Books — Chad Perrin <code@...> 2011/06/10

On Fri, Jun 10, 2011 at 09:22:58AM +0900, Josh Cheek wrote:

[#384291] Re: Classic Computer Science Books — Stu <stu@...> 2011/06/10

Thank you for the responses. I look forward to reading others.

[#384346] Re: Classic Computer Science Books — Anurag Priyam <anurag08priyam@...> 2011/06/11

> queue to read Meyers C++ books and Crockford's Javascript: The Good

[#384349] Re: Classic Computer Science Books — Stu <stu@...> 2011/06/11

Hello Anurag

[#384430] Re: Classic Computer Science Books — Anurag Priyam <anurag08priyam@...> 2011/06/13

Hey Stu,

[#384464] Re: Classic Computer Science Books — Vin兤ius <undvinicius@...> 2011/06/14

Wow, those are a lot of books, as a beginner programmer, I don't have

[#384322] PSA: Ilias is Crazy — Ryan Davis <ryand-ruby@...>

I guess I have to post this periodically since our population is growing =

18 messages 2011/06/10

[#384363] RFC - One word alias for require_relative — Ilias Lazaridis <ilias@...>

This is a simple Request for Comments.

161 messages 2011/06/11
[#384368] Re: RFC - One word alias for require_relative — Intransition <transfire@...> 2011/06/11

[#384633] Re: RFC - One word alias for require_relative — Ilias Lazaridis <ilias@...> 2011/06/17

On 17 =C9=EF=FD=ED, 21:17, Gary Wright <gwtm...@mac.com> wrote:

[#384654] Re: RFC - One word alias for require_relative — Ilias Lazaridis <ilias@...> 2011/06/17

On 11 =C9=EF=FD=ED, 20:35, Ilias Lazaridis <il...@lazaridis.com> wrote:

[#384676] Re: RFC - One word alias for require_relative — Yukihiro Matsumoto <matz@...> 2011/06/17

Hi,

[#384432] commit message conventions — Intransition <transfire@...>

When I write commit messages I add a "team" prefix to the message,

14 messages 2011/06/13
[#384433] Re: commit message conventions — John Feminella <johnf@...> 2011/06/13

I greatly dislike that style, to be frank. My commit messages usually

[#384467] A way to find out when a constant gets defined? — Josh Cheek <josh.cheek@...>

Hi, I'd like to be able to find out when a constant gets defined. I think I

14 messages 2011/06/14

[#384490] Messages to Ruby List/Forum/etc. not arriving equally? — Markus Fischer <markus@...>

Hi,

11 messages 2011/06/15

[#384500] CORE - Inconsistent Handling of Uninitialized Variables — Ilias Lazaridis <ilias@...>

puts "\n== Testin in MAIN Context =="

18 messages 2011/06/15

[#384617] get execution name of program — Chad Perrin <code@...>

Either $0 or __FILE__ will return a filename to give context for how a

13 messages 2011/06/17

[#384634] default config file location — Chad Perrin <code@...>

Is there a "better" way to specify a default config file location than

16 messages 2011/06/17
[#384637] Re: default config file location — "Matthew K. Williams" <matt@...> 2011/06/17

On Sat, 18 Jun 2011, Chad Perrin wrote:

[#384648] celluloid 0.0.3: a concurrent object framework for Ruby — Tony Arcieri <tony.arcieri@...>

Celluloid is a concurrent object framework for Ruby inspired by Erlang

12 messages 2011/06/17

[#384763] MIDASWAD - Matz is Dumb and so We are Dumb — Ilias Lazaridis <ilias@...>

(public draft)

46 messages 2011/06/20
[#384765] Re: MIDASWAD - Matz is Dumb and so We are Dumb — Chad Perrin <code@...> 2011/06/20

Before anyone engages this nonsense . . .

[#384772] Re: MIDASWAD - Matz is Dumb and so We are Dumb — Adam Prescott <adam@...> 2011/06/20

On 20 Jun 2011 20:32, "Chad Perrin" <code@apotheon.net> wrote:

[#384779] Re: MIDASWAD - Matz is Dumb and so We are Dumb — David Masover <ninja@...> 2011/06/20

A quick, lazy response, because I shouldn't feed trolls anyway, and I simply

[#384788] Re: MIDASWAD - Matz is Dumb and so We are Dumb — Nikolai Weibull <now@...> 2011/06/21

On Mon, Jun 20, 2011 at 23:52, David Masover <ninja@slaphack.com> wrote:

[#384790] Re: MIDASWAD - Matz is Dumb and so We are Dumb — Adam Prescott <adam@...> 2011/06/21

On Tue, Jun 21, 2011 at 11:06 AM, Nikolai Weibull <now@bitwi.se> wrote:

[#384792] Re: MIDASWAD - Matz is Dumb and so We are Dumb — Nikolai Weibull <now@...> 2011/06/21

On Tue, Jun 21, 2011 at 13:37, Adam Prescott <adam@aprescott.com> wrote:

[#384800] How to order a hash based on its keys? — Iñaki Baz Castillo <ibc@...>

Hi, I want to order a hash using itds keys:

35 messages 2011/06/21
[#384808] Re: How to order a hash based on its keys? — Robert Klemme <shortcutter@...> 2011/06/21

On Tue, Jun 21, 2011 at 4:34 PM, I=F1aki Baz Castillo <ibc@aliax.net> wrote=

[#384813] Re: How to order a hash based on its keys? — Iñaki Baz Castillo <ibc@...> 2011/06/21

2011/6/21 Robert Klemme <shortcutter@googlemail.com>:

[#384814] Re: How to order a hash based on its keys? — Iñaki Baz Castillo <ibc@...> 2011/06/21

2011/6/21 I=C3=B1aki Baz Castillo <ibc@aliax.net>:

[#384833] Re: How to order a hash based on its keys? — Robert Klemme <shortcutter@...> 2011/06/22

On Tue, Jun 21, 2011 at 6:34 PM, I=F1aki Baz Castillo <ibc@aliax.net> wrote=

[#384837] Re: How to order a hash based on its keys? — Iñaki Baz Castillo <ibc@...> 2011/06/22

2011/6/22 Robert Klemme <shortcutter@googlemail.com>:

[#384843] Re: How to order a hash based on its keys? — Robert Klemme <shortcutter@...> 2011/06/22

On Wed, Jun 22, 2011 at 11:50 AM, I=F1aki Baz Castillo <ibc@aliax.net> wrot=

[#384846] Re: How to order a hash based on its keys? — Iñaki Baz Castillo <ibc@...> 2011/06/22

2011/6/22 Robert Klemme <shortcutter@googlemail.com>:

[#384847] Re: How to order a hash based on its keys? — Robert Klemme <shortcutter@...> 2011/06/22

On Wed, Jun 22, 2011 at 3:47 PM, I=F1aki Baz Castillo <ibc@aliax.net> wrote=

[#384849] Re: How to order a hash based on its keys? — Iñaki Baz Castillo <ibc@...> 2011/06/22

2011/6/22 Robert Klemme <shortcutter@googlemail.com>:

[#384855] Re: How to order a hash based on its keys? — Robert Klemme <shortcutter@...> 2011/06/22

On Wed, Jun 22, 2011 at 4:19 PM, I=F1aki Baz Castillo <ibc@aliax.net> wrote=

[#384819] Gateway Shutting Down — James Gray <james@...>

Rubyists:

12 messages 2011/06/21

[#384873] Explicitly setting compiler to C++ in extconf.rb... — "Darryl L. Pierce" <mcpierce@...>

I'm trying to setup a Ruby gem that bundles the Swig-generated bindings

10 messages 2011/06/23

[#384907] SPDX (and the glazing of ones eyes) — Intransition <transfire@...>

Never ceases to amaze me how complicated "enterprisey" peoples can

17 messages 2011/06/25
[#384909] Re: SPDX (and the glazing of ones eyes) — Phillip Gawlowski <cmdjackryan@...> 2011/06/25

On Sat, Jun 25, 2011 at 5:00 PM, Intransition <transfire@gmail.com> wrote:

[#384996] A movie Renamer — Mayank Kohaley <mayank.kohaley@...>

Hello Guys,

20 messages 2011/06/29
[#385007] Re: A movie Renamer — Sam Duncan <sduncan@...> 2011/06/29

Please don't steal movies.

[#385010] Re: A movie Renamer — Chad Perrin <code@...> 2011/06/29

On Thu, Jun 30, 2011 at 06:17:55AM +0900, Sam Duncan wrote:

[#385011] Re: A movie Renamer — Sam Duncan <sduncan@...> 2011/06/29

*sigh*

[#385019] A File Renamer — Mayank Kohaley <mayank.kohaley@...>

I guess this thread has spawned another issue. Let me close this and say I

18 messages 2011/06/30
[#385021] Re: A File Renamer — Jeremy Heiler <jeremyheiler@...> 2011/06/30

On Thu, Jun 30, 2011 at 1:48 AM, Mayank Kohaley

[#385027] Re: A File Renamer — Johnny Morrice <spoon@...> 2011/06/30

> Is there a pattern to the file names you are working with? The key is

Re: [ANN] celluloid 0.0.3: a concurrent object framework for Ruby

From: Tony Arcieri <tony.arcieri@...>
Date: 2011-06-18 22:40:09 UTC
List: ruby-talk #384695
On Fri, Jun 17, 2011 at 6:25 PM, David Masover <ninja@slaphack.com> wrote:

> Still, I shouldn't have to create an entire new actor, link it to your
> actor,
> and have it trap errors in order to find the actual exception I caused
> which
> lead to the actor's death. Maybe it's appropriate for bang methods to
> return
> some object which can be used to retrieve an exception?
>

If you want that sort of behavior, you can use the built-in
Celluloid::Future functionality. It does exactly what you describe, calling
a block asynchronously, then letting you retrieve the exception (or value)
later. If an exception was raised in the block given to the future
originally, it will be re-raised when the value is requested every single
time.

If something goes wrong in an async call, you can either handle the error
within that method directly, or rely on the supervisor to restart the object
in a clean state. Really I think supervisors are going to be the de facto
way to handle errors in asynchronous calls. I don't think there's a lot of
good use cases for having callers handle errors in asynchronous calls that
aren't already covered by Celluloid::Future.

That's what I was trying to do, except I wasn't planning to deadlock. I was
> planning to allow the call... somehow. Basically, if you had any sort of
> pattern where two objects call methods on each other, it should work the
> way
> it does synchronously.
>
> I think this makes sense, semantically. After all, if an actor calls a
> method
> on itself, we don't get any sort of deadlock. If an actor calls a method on
> another object running in the same thread, which then calls a method on the
> actor, at least with my implementation, this also doesn't deadlock -- and
> in
> yours, if I pass 'self' around, we get the same result. Why should it be
> different if I call a method on another _actor_ which then calls a method
> on
> me?
>
> Still, it's tricky to come up with an efficient way to do this, and I never
> managed to get anything to work, no matter how inefficient.
>

Hmmmmmmmmmmm!

I think the best approach would be to wrap the dispatching of incoming calls
in a fiber. Whenever that fiber makes an outgoing call to another actor, it
defers back to the central receive loop which processes the mailbox. This
would let an actor continue processing incoming calls while waiting for a
response to a call.

You're actually the second person I've talked to who's proposed this in
regard to handling circular call chains, the other person was Steven Parkes
who created the Dramatis actor framework. At the time I had my head in
Reia/Erlang, where gen_server state is pure functional and immutable and
there would really be no way to implement this sort of approach. In a
language like Ruby, though, it's possible, and would actually be quite
similar to what you could do with plain old Ruby objects.

So, there is a way, but you probably won't like it...
>

You're right, I don't like that at all :)


> I was much more interested in getting the semantics right, to show that it
> can
> be done, rather than making it performant and immediately useful. Like you,
> I
> wanted to use this to sort of prototype those semantics, with the hope that
> they would get into something like Reia eventually. (I started this before
> I
> heard of Reia, and probably before Reia was in any way practical, so I
> wasn't
> deliberately reinventing the wheel.)
>

Well, now you definitely have me thinking. If I do allow an actor to process
multiple calls using fibers, I've definitely left the realm of what could be
done in a language like Reia. That sort of approach relies directly on
concurrent objects having mutable hidden state.

While this approach couldn't apply to Reia, I really like it's semantics,
and I think it solves the long-standing problem of circular calls. My answer
to this question for the past two years has been "circular calls are an
error", when really there should be a way to make them work.

Looking again, maybe the supervisor already does this?
>
>  supervisor = Sheen.supervise "Charlie Sheen"
>  charlie = supervisor.actor
>
> This would solve both problems, right? (Assuming the supervisor is itself
> threadsafe.) It could use some sugar, but I'm not entirely sure how.
>

The easiest way to add some sugar would be to have the supervisor create a
thread safe proxy object that always refers to the latest version of a given
actor. That way you could just use that object directly rather than always
having to call supervisor.actor to get to it.

-- 
Tony Arcieri

In This Thread