[#380721] Can you search in REXML by attributes? — "Kyle X." <haebooty@...>

Hello and thank you to all the wonderful and helpful people at this

19 messages 2011/04/01
[#380737] Re: Can you search in REXML by attributes? — Robert Klemme <shortcutter@...> 2011/04/01

On Fri, Apr 1, 2011 at 2:53 AM, Kyle X. <haebooty@yahoo.com> wrote:

[#380755] Re: Can you search in REXML by attributes? — "Kyle X." <haebooty@...> 2011/04/01

Robert K. wrote in post #990336:

[#380762] Searching a CSV file - beginner seeking help — Simon Harrison <simon@...>

Hi all. I've written a little script to search a csv file for films. It

10 messages 2011/04/01

[#380843] Using grep on subarrays - help! — Simon Harrison <simon@...>

Can anyone help with this? I thought grep would find any element that

12 messages 2011/04/03

[#380849] Splitting each_cons? — Simon Harrison <simon@...>

I'm not sure if each_cons can do what I'm trying to achieve:

13 messages 2011/04/03

[#380883] pipe question — wolf volpi <wolf_volpi@...>

What does the pipe in this example do?

15 messages 2011/04/04

[#380949] functional languages -- any recommendations? — 7stud -- <bbxx789_05ss@...>

Haskell, Scala, or Erlang? Which one is the best?

18 messages 2011/04/05

[#380977] Separate new lines from an output — "Leo M." <leo.mmcm@...>

Hello!

12 messages 2011/04/05

[#381015] Match a pattern multiple times, returning matches, captures and offset? — Markus Fischer <markus@...>

Hi,

10 messages 2011/04/05

[#381035] capture the output of a grandchild — Chandan Bansal <chandan89@...>

hi

12 messages 2011/04/06

[#381075] Hello — Moises Montenegro <moemonty@...>

Hello,

43 messages 2011/04/06
[#381086] Re: Hello — James Nathan <badlands_2004@...> 2011/04/07

hello I am trying to get it stated myself, but I am not sure if I am setting Ruby up right.

[#381155] Re: Hello — James Nathan <badlands_2004@...> 2011/04/08

I am having a hard time to get it up and running. that is Ruby and Ruby on Rails. it seems that no one is willing to help so that we can enjoy this porgram. If their anyway that I can get it downloaded to me, some help to make sure that have the right porgrams.

[#381263] Re: Hello — James Nathan <badlands_2004@...> 2011/04/10

does the Free Ride program for Ruby the command program that I need to run and write my program?

[#381308] Re: Hello — James Nathan <badlands_2004@...> 2011/04/11

is there a disk that we can seen off and use. so that we can all the parts of ruby and ruby on rails. I would like this disk.

[#381313] Re: Hello — jake kaiden <jakekaiden@...> 2011/04/11

James Nathan wrote in post #992175:

[#381314] Re: Hello — Vincent Manis <vmanis@...> 2011/04/11

On 2011-04-11, at 16:50, jake kaiden wrote:

[#381322] Re: Hello — James Nathan <badlands_2004@...> 2011/04/12

I will just give up on Ruby and Ruby on Rails for now=20

[#381347] Re: Hello — James Nathan <badlands_2004@...> 2011/04/12

No, I will try another program to learn to write a program. Ruby is just to=

[#381351] Re: Hello — Phillip Gawlowski <cmdjackryan@...> 2011/04/12

On Tue, Apr 12, 2011 at 3:27 PM, James Nathan <badlands_2004@yahoo.com> wrote:

[#381358] Re: Hello — Martin DeMello <martindemello@...> 2011/04/12

On Tue, Apr 12, 2011 at 7:59 PM, Phillip Gawlowski

[#381087] Hash Surprises with Fixnum, #hash, and #eql? — Clifford Heath <no@...>

Folk,

44 messages 2011/04/07
[#381099] Re: Hash Surprises with Fixnum, #hash, and #eql? — Robert Klemme <shortcutter@...> 2011/04/07

On Thu, Apr 7, 2011 at 6:05 AM, Clifford Heath <no@spam.please.net> wrote:

[#381107] Re: Hash Surprises with Fixnum, #hash, and #eql? — Phillip Gawlowski <cmdjackryan@...> 2011/04/07

On Thu, Apr 7, 2011 at 11:19 AM, Robert Klemme

[#381109] Re: Hash Surprises with Fixnum, #hash, and #eql? — Robert Klemme <shortcutter@...> 2011/04/07

On Thu, Apr 7, 2011 at 1:20 PM, Phillip Gawlowski

[#381115] Re: Hash Surprises with Fixnum, #hash, and #eql? — Phillip Gawlowski <cmdjackryan@...> 2011/04/07

On Thu, Apr 7, 2011 at 1:53 PM, Robert Klemme

[#381182] Re: Hash Surprises with Fixnum, #hash, and #eql? — Clifford Heath <no@...> 2011/04/08

On 04/07/11 19:19, Robert Klemme wrote:

[#381187] Re: Hash Surprises with Fixnum, #hash, and #eql? — Robert Klemme <shortcutter@...> 2011/04/08

On Fri, Apr 8, 2011 at 9:30 AM, Clifford Heath <no@spam.please.net> wrote:

[#381233] Re: Hash Surprises with Fixnum, #hash, and #eql? — Clifford Heath <no@...> 2011/04/09

On 04/08/11 20:12, Robert Klemme wrote:

[#381269] Re: Hash Surprises with Fixnum, #hash, and #eql? — Charles Oliver Nutter <headius@...> 2011/04/11

Top-replying with a general observation: you can't please everyone all the =

[#381274] Re: Hash Surprises with Fixnum, #hash, and #eql? — Clifford Heath <no@...> 2011/04/11

On 04/11/11 10:02, Charles Oliver Nutter wrote:

[#381337] Re: Hash Surprises with Fixnum, #hash, and #eql? — Robert Klemme <shortcutter@...> 2011/04/12

On Mon, Apr 11, 2011 at 5:20 AM, Clifford Heath <no@spam.please.net> wrote:

[#381393] Re: Hash Surprises with Fixnum, #hash, and #eql? — Clifford Heath <no@...> 2011/04/13

On 04/12/11 19:09, Robert Klemme wrote:

[#381399] Re: Hash Surprises with Fixnum, #hash, and #eql? — Charles Oliver Nutter <headius@...> 2011/04/13

On Tue, Apr 12, 2011 at 9:05 PM, Clifford Heath <no@spam.please.net> wrote:

[#381402] Re: Hash Surprises with Fixnum, #hash, and #eql? — Clifford Heath <no@...> 2011/04/13

On 04/13/11 15:51, Charles Oliver Nutter wrote:

[#381416] Re: Hash Surprises with Fixnum, #hash, and #eql? — Charles Oliver Nutter <headius@...> 2011/04/13

On Wed, Apr 13, 2011 at 1:35 AM, Clifford Heath <no@spam.please.net> wrote:

[#381469] Re: Hash Surprises with Fixnum, #hash, and #eql? — Clifford Heath <no@...> 2011/04/13

On 04/13/11 22:23, Charles Oliver Nutter wrote:

[#381506] Re: Hash Surprises with Fixnum, #hash, and #eql? — Charles Oliver Nutter <headius@...> 2011/04/14

On Wed, Apr 13, 2011 at 4:40 PM, Clifford Heath <no@spam.please.net> wrote:

[#381510] Re: Hash Surprises with Fixnum, #hash, and #eql? — Clifford Heath <no@...> 2011/04/14

On 04/14/11 15:36, Charles Oliver Nutter wrote:

[#381876] Re: Hash Surprises with Fixnum, #hash, and #eql? — Charles Oliver Nutter <headius@...> 2011/04/19

On Thu, Apr 14, 2011 at 12:55 AM, Clifford Heath <no@spam.please.net> wrote=

[#381970] Re: Hash Surprises with Fixnum, #hash, and #eql? — Clifford Heath <no@...> 2011/04/21

Charles,

[#381090] can we use direct ruby instaed of javascript ? — Sniper Abandon <sathish.salem.1984@...>

Hi Ninjas,

29 messages 2011/04/07
[#381113] Re: can we use direct ruby instaed of javascript ? — Peter Zotov <whitequark@...> 2011/04/07

On Thu, 7 Apr 2011 15:44:50 +0900, Sniper Abandon wrote:

[#381136] Re: can we use direct ruby instaed of javascript ? — Chad Perrin <code@...> 2011/04/07

On Thu, Apr 07, 2011 at 09:50:14PM +0900, Peter Zotov wrote:

[#381147] Re: can we use direct ruby instaed of javascript ? — Peter Zotov <whitequark@...> 2011/04/07

On Fri, 8 Apr 2011 01:48:58 +0900, Chad Perrin wrote:

[#381160] Re: can we use direct ruby instaed of javascript ? — Chad Perrin <code@...> 2011/04/08

On Fri, Apr 08, 2011 at 05:37:49AM +0900, Peter Zotov wrote:

[#381167] Re: can we use direct ruby instaed of javascript ? — Julian Leviston <julian@...> 2011/04/08

I think it might be actually quite interesting for the original poster =

[#381195] Re: can we use direct ruby instaed of javascript ? — Josh Cheek <josh.cheek@...> 2011/04/08

On Thu, Apr 7, 2011 at 11:46 PM, Julian Leviston <julian@coretech.net.au>wrote:

[#381125] String.gsub with regex and block — Alexey Petrushin <axyd80@...>

Probably a stupid question, but is there a way to use :gsub replacement

12 messages 2011/04/07

[#381210] Calling to_enum on a MatchData object — Vahagn Hayrapetyan <vahagnh@...>

Hi, I have the following snippet of code:

15 messages 2011/04/08

[#381281] Copying parameters to singleton class — Lars Olsson <lasso@...>

Hi list!

23 messages 2011/04/11

[#381306] Creating a full application with Ruby — Fily Salas <fs_tigre@...>

Hi,

22 messages 2011/04/11

[#381355] Ruby for beginners (was: Re: Hello) — Phillip Gawlowski <cmdjackryan@...>

On Tue, Apr 12, 2011 at 5:08 PM, Vincent Manis <vmanis@telus.net> wrote:

37 messages 2011/04/12
[#381365] Re: Ruby for beginners (was: Re: Hello) — andrew mcelroy <sophrinix@...> 2011/04/12

On Tue, Apr 12, 2011 at 10:30 AM, Phillip Gawlowski <

[#381373] Re: Ruby for beginners (was: Re: Hello) — Phillip Gawlowski <cmdjackryan@...> 2011/04/12

On Tue, Apr 12, 2011 at 7:48 PM, andrew mcelroy <sophrinix@gmail.com> wrote:

[#381388] Re: Ruby for beginners (was: Re: Hello) — Vincent Manis <vmanis@...> 2011/04/13

OK, so here's another kick at the can.=20

[#381420] Re: Ruby for beginners (was: Re: Hello) — Josh Cheek <josh.cheek@...> 2011/04/13

On Tue, Apr 12, 2011 at 8:30 PM, Vincent Manis <vmanis@telus.net> wrote:

[#381430] Re: Ruby for beginners (was: Re: Hello) — Vincent Manis <vmanis@...> 2011/04/13

On 2011-04-13, at 05:59, Josh Cheek wrote:

[#381434] Re: Ruby for beginners (was: Re: Hello) — Phillip Gawlowski <cmdjackryan@...> 2011/04/13

On Wed, Apr 13, 2011 at 4:48 PM, Vincent Manis <vmanis@telus.net> wrote:

[#381487] Re: Ruby for beginners (was: Re: Hello) — Vincent Manis <vmanis@...> 2011/04/14

On 2011-04-13, at 08:03, Phillip Gawlowski wrote:

[#381495] Re: Ruby for beginners (was: Re: Hello) — Chad Perrin <code@...> 2011/04/14

On Thu, Apr 14, 2011 at 10:35:42AM +0900, Vincent Manis wrote:

[#381530] Re: Ruby for beginners (was: Re: Hello) — Phillip Gawlowski <cmdjackryan@...> 2011/04/14

On Thu, Apr 14, 2011 at 5:03 AM, Chad Perrin <code@apotheon.net> wrote:

[#381423] so, who's writing a dedicated ruby ide? — Martin DeMello <martindemello@...>

The recent thread on newbie-friendliness and a "ruby in a box" IDE

11 messages 2011/04/13

[#381444] Tk : non blocking Tk.mainloop — Juju SL <jujusl@...>

Hi all,

21 messages 2011/04/13

[#381547] Running Ruby script in emacs — duke <sidney.reilley.ii@...>

Hey ...

14 messages 2011/04/14

[#381548] To Yield or Not to Yield: An Inferable Question — Michael Edgar <adgar@...>

Hi Rubyists,

14 messages 2011/04/14

[#381562] What do you do when you need to attach data to an object instance? — "Aaron D. Gifford" <astounding@...>

What do you do when you see a need to be able to attach some data to

17 messages 2011/04/14
[#381566] Re: What do you do when you need to attach data to an object instance? — Kevin Mahler <kevin.mahler@...> 2011/04/14

Aaron D. Gifford wrote in post #992841:

[#381573] Re: What do you do when you need to attach data to an object instance? — "Aaron D. Gifford" <astounding@...> 2011/04/14

On Thu, Apr 14, 2011 at 3:11 PM, Kevin Mahler <kevin.mahler@yahoo.com> wrot=

[#381582] Re: What do you do when you need to attach data to an object instance? — "Aaron D. Gifford" <astounding@...> 2011/04/14

> On Thu, Apr 14, 2011 at 3:11 PM, Kevin Mahler <kevin.mahler@yahoo.com> wrote:

[#381596] Re: What do you do when you need to attach data to an object instance? — Kevin Mahler <kevin.mahler@...> 2011/04/15

Aaron D. Gifford wrote in post #992887:

[#381567] Re: Chad Perrin — Everett L Williams II <rett@...>

*Hasn't anybody in the management of this forum the guts to either quiet

16 messages 2011/04/14

[#381605] looking for an "inversion" pattern — Fearless Fool <r@...>

I'm sure there's a clean way to do this in Ruby, but I haven't figured

13 messages 2011/04/15

[#381622] Get the real object in a Hash key — Iñaki Baz Castillo <ibc@...>

Hi, let's suppose this simple code in which I add internal attributes

14 messages 2011/04/15
[#381623] Re: Get the real object in a Hash key — Robert Klemme <shortcutter@...> 2011/04/15

On Fri, Apr 15, 2011 at 2:50 PM, I=F1aki Baz Castillo <ibc@aliax.net> wrote=

[#381626] Re: Get the real object in a Hash key — Iñaki Baz Castillo <ibc@...> 2011/04/15

2011/4/15 Robert Klemme <shortcutter@googlemail.com>:

[#381644] Extract a range i.e. svr[100..130] ? — Richard Sandoval <skolopen@...>

What best method could extract the range of a given list of servers?

13 messages 2011/04/15

[#381742] Telnet "More?" — "Eric T." <erictetz@...>

I'm trying to use the telnet library. I don't know Ruby AT ALL

15 messages 2011/04/17

[#381768] Tail Call Optimization (Tail Recursion) — Terry Michaels <cmhoward@...>

I did some googling to find out if Ruby supports tail call optimization,

18 messages 2011/04/18

[#381781] Need for speed -> a C extension? — Martin Hansen <mail@...>

Hello all,

28 messages 2011/04/18
[#381788] Re: Need for speed -> a C extension? — "WJ" <w_a_x_man@...> 2011/04/18

Martin Hansen wrote:

[#381792] Re: Need for speed -> a C extension? — Martin Hansen <mail@...> 2011/04/18

WJ wrote in post #993576:

[#381794] Re: Need for speed -> a C extension? — Ryan Davis <ryand-ruby@...> 2011/04/18

[#381836] Re: Need for speed -> a C extension? — Martin Hansen <mail@...> 2011/04/19

>> def match?(char1, char2)

[#381849] Re: Need for speed -> a C extension? — brabuhr@... 2011/04/19

On Tue, Apr 19, 2011 at 6:30 AM, Martin Hansen <mail@maasha.dk> wrote:

[#381853] Re: Need for speed -> a C extension? — Martin Hansen <mail@...> 2011/04/19

unknown wrote in post #993757:

[#381822] anonymous closures with Proc,new, lambda and -> — Stu <stu@...>

I am new to the study of functional paradigm. If this question is academic

32 messages 2011/04/19
[#381829] Re: anonymous closures with Proc,new, lambda and -> — Brian Candler <b.candler@...> 2011/04/19

Stu wrote in post #993687:

[#381830] Re: anonymous closures with Proc,new, lambda and -> — Brian Candler <b.candler@...> 2011/04/19

Brian Candler wrote in post #993704:

[#381875] Re: anonymous closures with Proc,new, lambda and -> — Stu <stu@...> 2011/04/19

how would i break it down to two functions?

[#381884] Re: anonymous closures with Proc,new, lambda and -> — 7stud -- <bbxx789_05ss@...> 2011/04/20

Stu wrote in post #993854:

[#381890] Re: anonymous closures with Proc,new, lambda and -> — Stu <stu@...> 2011/04/20

Lots of helpful information in this thread. Thank you all for helping me.

[#381942] Re: anonymous closures with Proc,new, lambda and -> — 7stud -- <bbxx789_05ss@...> 2011/04/20

Stu wrote in post #993922:

[#381946] Re: anonymous closures with Proc,new, lambda and -> — Steve Klabnik <steve@...> 2011/04/20

Naw, monads are actually really, really easy. They're just poorly

[#381952] Re: anonymous closures with Proc,new, lambda and -> — Brian Candler <b.candler@...> 2011/04/20

Steve Klabnik wrote in post #994098:

[#381958] On the Capitalization of Project Files — Intransition <transfire@...>

I have noticed a trend with regards to the case of project files. In

10 messages 2011/04/20

[#382043] Reversing a string without using array, classes and reverse function — Rubist Rohit <passionate_programmer@...>

I am trying this:

20 messages 2011/04/22

[#382092] How to split dot “.” only before equal “=” — Sira PS <ploy.sukachai@...>

I need to split dot only before equal to assign to hash

10 messages 2011/04/23

[#382156] Replace any multiple whitespaces with single white space — Michelle Pace <michelle@...>

Hello, I need to make the first string below into the second string.

10 messages 2011/04/25

[#382264] File position and buffers — Cee Joe <cyril_jose@...>

Hi all,

22 messages 2011/04/27

[#382292] Is everything object ? — "amir e." <aef1370@...>

Hi

35 messages 2011/04/28
[#382296] Re: Is everything object ? — Josh Cheek <josh.cheek@...> 2011/04/28

On Thu, Apr 28, 2011 at 4:48 AM, amir e. <aef1370@gmail.com> wrote:

[#382306] Re: Is everything object ? — Chad Perrin <code@...> 2011/04/28

On Thu, Apr 28, 2011 at 08:52:35PM +0900, Josh Cheek wrote:

[#382318] Re: Is everything object ? — Josh Cheek <josh.cheek@...> 2011/04/28

On Thu, Apr 28, 2011 at 10:12 AM, Chad Perrin <code@apotheon.net> wrote:

[#382334] Re: Is everything object ? — Chad Perrin <code@...> 2011/04/28

On Fri, Apr 29, 2011 at 02:23:32AM +0900, Josh Cheek wrote:

[#382347] Re: Is everything object ? — Josh Cheek <josh.cheek@...> 2011/04/28

On Thu, Apr 28, 2011 at 3:22 PM, Chad Perrin <code@apotheon.net> wrote:

[#382356] Re: Is everything object ? — Chad Perrin <code@...> 2011/04/29

On Fri, Apr 29, 2011 at 08:39:14AM +0900, Josh Cheek wrote:

[#382361] Re: Is everything object ? — Josh Cheek <josh.cheek@...> 2011/04/29

On Thu, Apr 28, 2011 at 10:40 PM, Chad Perrin <code@apotheon.net> wrote:

[#382395] Re: Is everything object ? — Chad Perrin <code@...> 2011/04/29

On Fri, Apr 29, 2011 at 01:09:25PM +0900, Josh Cheek wrote:

[#382416] Re: Is everything object ? — Josh Cheek <josh.cheek@...> 2011/04/29

On Fri, Apr 29, 2011 at 2:37 PM, Chad Perrin <code@apotheon.net> wrote:

[#382429] Re: Is everything object ? — Chad Perrin <code@...> 2011/04/30

On Sat, Apr 30, 2011 at 08:01:48AM +0900, Josh Cheek wrote:

[#382310] Initialize Struct from Hash — Brian Candler <b.candler@...>

I just want to check I've not missed something here. Is there a built-in

10 messages 2011/04/28

[#382312] calling methods, beginner help — Ronnie Aa <liquid98@...>

Hello Guys,

13 messages 2011/04/28

[#382350] Ruby Beginner Need Help.. — Didin Ibnu Sarnan <didinna@...>

Hi,

18 messages 2011/04/29
[#382352] Re: Ruby Beginner Need Help.. — 7stud -- <bbxx789_05ss@...> 2011/04/29

Didin Ibnu Sarnan wrote in post #995669:

[#382354] Re: Ruby Beginner Need Help.. — Didin Ibnu Sarnan <didinna@...> 2011/04/29

Hi,

[#382401] How do I read HTTP POST XML sent to CGI? — Ting Chang <aumart@...>

Hello Ruby Masters,

14 messages 2011/04/29

[#382452] Why defining a constant in a method is not allowed but using self.class.const_set is allowed? — Iñaki Baz Castillo <ibc@...>

Hi, assinging a value to a constant within a method is not allowed

14 messages 2011/04/30
[#382454] Re: Why defining a constant in a method is not allowed but using self.class.const_set is allowed? — Robert Klemme <shortcutter@...> 2011/04/30

On 30.04.2011 21:25, I=F1aki Baz Castillo wrote:

[#382456] Re: Why defining a constant in a method is not allowed but using self.class.const_set is allowed? — Iñaki Baz Castillo <ibc@...> 2011/04/30

2011/4/30 Robert Klemme <shortcutter@googlemail.com>:

[#382465] Re: Why defining a constant in a method is not allowed but using self.class.const_set is allowed? — Christopher Dicely <cmdicely@...> 2011/04/30

On Sat, Apr 30, 2011 at 12:58 PM, I=C3=B1aki Baz Castillo <ibc@aliax.net> w=

[#382466] Re: Why defining a constant in a method is not allowed but using self.class.const_set is allowed? — Iñaki Baz Castillo <ibc@...> 2011/04/30

2011/5/1 Christopher Dicely <cmdicely@gmail.com>:

Re: To Yield or Not to Yield: An Inferable Question

From: Michael Edgar <adgar@...>
Date: 2011-04-17 21:40:56 UTC
List: ruby-talk #381754
Hi Brian =96 Thanks for sharing your thoughts!  Since much of what you =
note
is commonly accepted about Ruby, I am happy that my research is
subtle enough to warrant such discussion (and interesting enough to get
an e-mail or two!)=20

If you don't mind, I'd like to write a blog post sharing your concerns
(anonymized, naturally) and my responses. Would that be okay?

> Points I'd raise:
>=20
> 1. In my experience, very little real-world Ruby code uses=20
> 'block_given?'. If it needs to yield, it just yields. I'd consider =
this=20
> to be a case of duck-typing.

This seems to suggest Rubyists rarely write methods that take blocks
optionally. Of this, I am highly skeptical. Luckily, doing this work in =
my
thesis will allow me to study statistics of how block_given? is used.

> With yield you get a run-time error if no block was passed, but that's=20=

> only one of a much larger set of method call errors (such as calling a=20=

> method with argument of the wrong type).

Correct, but my work intends to show that improper block use, when using =
yield,
is a far more easily determined method call error in Ruby than a type =
error.
What makes this research fascinating is that Ruby is rich enough to =
allow for
such nuance! For a typical language which permits closures as arguments,
one must use careful alias analysis and escape analysis. `yield` as =
syntactic
sugar makes it a much simpler case to analyze, which is why I tackled it =
first.

> Consider also that very little code tests 'a.respond_to? :foo' before=20=

> calling 'a.foo'.

This does not reflect the intent of this analysis - please see below.

> 2. If a method uses &blk or Proc.new or yield, I'd say it's fairly =
safe=20
> to assume that the block *may* be called (at least from the point of=20=

> view of automated documentation). Since it's unprovable in general =
even=20
> whether the method returns or not, it seems like hard work (for little=20=

> benefit) to try to decide whether=20

Nearly everything about a program is undecidable to determine in
practice - see Rice's Theorem. [1]  Luckily, compiler writers and PL =
theorists
have been studying forms of analysis for decades to try to get around
this and discover the patterns that we know can be analyzed. To address
your example, of course termination is unprovable, but the class
of functions for which termination is provable includes many, many
real-world functions. [2] [3]

> a method which accepts a block *never* actually calls it.


Here's why this issue is worth tackling: ALL methods accept a block,
and no matter how trivial, no tools will tell you that passing a block =
to
that method was foolish, let alone statically:

2.+(4) { |x, y| x ** y }  #=3D> 6

Additionally, no tool can tell you that a block is *required* by a =
method,
even if it is obvious:

# No tool currently documents that a block is required here
def tap
  yield self
end

My work does not try to determine each and every case which
triggers a yield, but merely to develop a coarse classification system =
for
a method based on its overall approach to blocks: required, optional,
or ignored. As I showed in my blog post (and as I will prove in my =
Thesis),
this classification can be determined precisely when the result of
`block_given?` is stored only in simple constants (this includes =
temporaries)
when `yield` is used.

If one peruses the Ruby standard library, one will find that just in the =
Ruby
code alone, block_given? occurs 265 times, in *every single case* is =
used
to execute yield conditionally, and in every single case, the result is =
used
only as a simple constant. [4]

>=20
> 3. As you're undoubtedly aware, Ruby is so dynamic that you can't=20
> analyse a method in isolation anyway. You can decide that a bareword=20=

> like 'foo' is a method call, but you don't know what that method will=20=

> actually do when the program is run - it could be redefined =
dynamically,=20
> either within a class or on single objects (in their singleton class).
>=20

Yes, this is one of the difficulties inherent in statically analyzing a =
dynamic
language. Luckily, Laser does not analyze single methods, it works on
a set of input files and traverses requires/loads by using constant =
propagation to
handle changes to $LOAD_PATH and $LOADED_FEATURES. As you note,
a na=EFve approach doesn't work, and having access to all input files is =
very
important. There is code that will be very hard to handle: see =
SortedSet.setup's
code as an example for which I haven't figured out an approach just yet.

Dynamic method creation is, in my opinion, what challenges static =
analysis
in Ruby the most. Naturally, in the general case, it makes all analysis =
impossible.
What tool could figure out much about a program containing this code?

def Object.inherited(klass)
  def klass.inherited(some_class)
    some_class.class_eval(gets)
  end
  klass.class_eval(gets)
end

My belief, whose validity my research hopes to support (but may =
ultimately
reject, or somewhere in the middle) is that such pathological code is =
less
of an issue in real-world application code. I do not expect a library =
like
RSpec, whose internals are full of dynamic magic, to get as much out of
my research. This is the biggest challenge ahead of me. Luckily, =
existing
work has seen success analyzing real-world code without even touching
on this issue. [5]

Thanks again for your interest! I hope my work continues to interest you
as I continue over the coming months.

References (sorry, I've only got Bibtex for some of these for now):

[1] http://en.wikipedia.org/wiki/Rice's_theorem

[2] @article{cook2006termination,
  title=3D{{Termination proofs for systems code}},
  author=3D{Cook, B. and Podelski, A. and Rybalchenko, A.},
  journal=3D{ACM SIGPLAN Notices},
  volume=3D{41},
  number=3D{6},
  pages=3D{415--426},
  issn=3D{0362-1340},
  year=3D{2006},
  publisher=3D{ACM}
}

[3] @article{andreas6terminator,
  title=3D{{Terminator: Beyond safety}},
  author=3D{Andreas, R.C. and Cook, B. and Podelski, A. and Rybalchenko, =
A.},
  journal=3D{In CAV=9206, LNCS},
  volume=3D{4144},
  pages=3D{415--418}
}

[4] ack --ruby -c "block_given\\?" | grep -e ':[^0]$' | cut -d':' -f2 | =
awk '{s+=3D$1} END {print s}'
gives the quantity, and using a context-ful grep is enough to see the =
usage patterns of
each call. Almost every single call lies in an "if" or "unless" =
condition, or the condition of
the ternary operator, and the result is not stored to a variable. =
lib/time.rb:264 has an example
justifying my analysis of where block_given? is called once, its result =
stored in a variable,
and then that variable is used as a constant to conditionally yield.

[5] @article{ecstatic,
  title=3D{{Ecstatic--Type Inference for Ruby Using the Cartesian =
Product Algorithm}},
  author=3D{Kristensen, K.},
  journal=3D{Master's thesis, Aalborg University},
  year=3D{2007}
}

Michael Edgar
adgar@carboni.ca
http://carboni.ca/

In This Thread