Poll on Eval in Ruby

I am Lisp programmer and I write an article on
issues as macros, fexprs and eval. I want to
compare opinion of Ruby and Lisp programmers on eval.
Some readers might think that such post constitute
spam on Ruby newsgroup, but I believe that resulting
information will not be completely devoid of value

  • even for Ruby community.

If you want to contribute few seconds, the poll is
on my blog, on the top of the right column.

http://kazimirmajorinc.blogspot.com

Thanks,

On 9.10.2009 18:43, David M. wrote:

So… I avoid languages that don’t have eval. But I avoid using eval in the
languages I use. Does that make sense?

It has, David. I think it is, lets say,
developed form of “useful but overused”
opinion.

On Thursday 08 October 2009 08:15:06 am Kazimir Majorinc wrote:

I want to
compare opinion of Ruby and Lisp programmers on eval.

If you want to contribute few seconds, the poll is
on my blog, on the top of the right column.

http://kazimirmajorinc.blogspot.com

There wasn’t an option for “Absolutely essential for the one time out of
a
billion you actually need it. Otherwise, avoid it entirely.”

I can’t remember the last time I used eval directly in Ruby, and I’ve
seen it
maybe once or twice in library code. I’ve also seen it abused by people
who
really should know better. 90% of the time you find yourself reaching
for eval,
you’re Doing It Wrong. Another 9% of the time, you’re working around a
missing
language feature, and it’d be better to fix that feature, or at least
bury your
use of eval deep in a library.

But there was the time I used Javascript on HD-DVD, which had many
limitations, including not having eval. And many of its other
limitations
could’ve been worked around if there had been an eval. A simple example:
Downloading and executing code was complex and often disruptive – eval
would’ve made it trivial.

So… I avoid languages that don’t have eval. But I avoid using eval in
the
languages I use. Does that make sense?

On Friday 09 October 2009 01:10:07 pm Kazimir Majorinc wrote:

On 9.10.2009 18:43, David M. wrote:

So… I avoid languages that don’t have eval. But I avoid using eval in
the languages I use. Does that make sense?

It has, David. I think it is, lets say,
developed form of “useful but overused”
opinion.

Well, except that I’m not making any statement about how people use it,
because I don’t know. The few examples I’ve found don’t point to any
sort of
systemic overuse – if there’s a language feature, someone has found a
way to
abuse it.

If you want to contribute few seconds, the poll is
on my blog, on the top of the right column.

Are we talking about

a = 'foo'
b = 'a + "bar"'
eval "'yummy ' + #{b} * 2"

or about

class A
    def initialize
        @x = "foo"
    end
end

A.new.instance_eval {@x}

On Sat, Oct 10, 2009 at 7:10 AM, lith [email protected] wrote:

class A
def initialize
@x = “foo”
end
end

A.new.instance_eval {@x}

I thought we were talking about all eval version (eval, instance_eval,
class_eval, etc) so I answered the one that was “has it’s place” or
something like that.

If we are talking exclusively about pure eval, I agree with David, I
almost never use it.

Jesus.

Hi –

On Sat, 10 Oct 2009, Jesús Gabriel y Galán wrote:

or about
class_eval, etc) so I answered the one that was “has it’s place” or
something like that.

If we are talking exclusively about pure eval, I agree with David, I
almost never use it.

I make a distinction between *eval’ing a string, which always carries
all the dangers of regular eval, and the block forms of instance_eval
and class/module_eval, which are very different techniques and don’t
have the same dangers.

David


The Ruby training with D. Black, G. Brown, J.McAnally
Compleat Jan 22-23, 2010, Tampa, FL
Rubyist http://www.thecompleatrubyist.com

David A. Black/Ruby Power and Light, LLC (http://www.rubypal.com)

On Oct 10, 2009, at 9:55 AM, David A. Black wrote:

I make a distinction between *eval’ing a string, which always carries
all the dangers of regular eval…

I’m just not sure eval()ing a String or regular ole eval() are alway
dangerous. I wrote about that a little on my blog recently:

http://blog.grayproductions.net/articles/eval_isnt_quite_pure_evil

James Edward G. II

Hi –

On Sun, 11 Oct 2009, James Edward G. II wrote:

On Oct 10, 2009, at 9:55 AM, David A. Black wrote:

I make a distinction between *eval’ing a string, which always carries
all the dangers of regular eval…

I’m just not sure eval()ing a String or regular ole eval() are alway
dangerous. I wrote about that a little on my blog recently:

I don’t think so either; I only mean that all the string eval’ing
techniques are essentially the same as each other, while the block
ones are very different.

David


The Ruby training with D. Black, G. Brown, J.McAnally
Compleat Jan 22-23, 2010, Tampa, FL
Rubyist http://www.thecompleatrubyist.com

David A. Black/Ruby Power and Light, LLC (http://www.rubypal.com)

THE RESULTS OF THE POLLS
========================

. Lisp Python Ruby

Eval is evil,
harmful or at
least unnecessary 2 (4.9%) 7 (21.9%) 0 (0.0%)

Eval is useful
but overused 11 (26.8%) 6 (18.8%) 9 (29.0%)

Eval has just the
right place 16 (39.0%) 10 (31.3%) 19 (61.3%)

Eval is useful
but neglected 3 (7.3%) 4 (12.5%) 1 (3.2%)