ruby-dev summary 28206-28273

M

Minero Aoki

Hi all,

This is a summary of ruby-dev ML in these days.

[ruby-dev:28211] GC.stress

TANAKA Akira proposed a new method GC.stress, which dispatches garbage
collection more eagerly. This method is useful to debug GC related
problems.

Matz agreed to him and this patch is committed in 1.9 branch.

[ruby-dev:28217] ANDCALL operator

Nobuyoshi Nakada suggested a new operator `&?' (this notation is temporary)
which evaluates left-hand-side expression, and if it is true then call
right-hand-side method. For example:

if a[1] and a[1].strip.empty?
||
if a[1] &? strip.empty?

h["key"] and h["key"].dispatch
||
h["key"] &? dispatch

The motivation of this operator is to avoid duplication of expression.

Takaaki Tateishi proposed another idea, Object#nil? with block
(again, this name is temporary).

a[1].nil? {|str| str.strip.empty? }
h["key"].nil? {|h| h.dispatch }

This issue is still open.

[ruby-dev:28233] 1.8.5 release plan?

URABE Shyouhei proposed a rough release plan of Ruby 1.8.5,
assuming the release date is 1st Apr.

Week 0 (2/4) : Decide a plan.
Week 1 (2/11): Prohibit any feature changes on 1.8 branch.
Week 2 (2/18): Fixing bugs on 1.8 branch.
Week 3 (2/25): Preview 1; Prohibit non-critical bug fixes.
Week 4 (3/4) : Validate preview 1.
Week 5 (3/11): Preview 2; Prohibit non-critical bug fixes without release engineer.
Week 6 (3/18): Validate preview 2.
Week 7 (3/25): Preview 3; Prohibit any changes without release engineer.
Week 8 (4/1) : 1.8.5 release

[ruby-dev:28234] coding pragma

In 1.9 branch, you can use "coding pragma" to tell the ruby interpreter
the encoding of program file:

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

KIMURA Koichi asked when this pragma is backported from 1.9 to 1.8.
Nobuyoshi Nakada said that is difficult because current implementation
calls ungetc() many times, which is not assured in C standards. Ruby
1.9 does not depend on stdio, multiple ungetc() call is not a problem.

For details of coding pragma, see the thread from [ruby-core:04881].


-- Minero Aoki
ruby-dev summary index: http://i.loveruby.net/en/ruby-dev-summary.html
 
M

Martin DeMello

Minero Aoki said:
[ruby-dev:28217] ANDCALL operator

Nobuyoshi Nakada suggested a new operator `&?' (this notation is temporary)
which evaluates left-hand-side expression, and if it is true then call
right-hand-side method. For example:

if a[1] and a[1].strip.empty?
||
if a[1] &? strip.empty?

h["key"] and h["key"].dispatch
||
h["key"] &? dispatch

The motivation of this operator is to avoid duplication of expression.

Takaaki Tateishi proposed another idea, Object#nil? with block
(again, this name is temporary).

a[1].nil? {|str| str.strip.empty? }
h["key"].nil? {|h| h.dispatch }

This issue is still open.

Syntactically, a method might look better than an operator:

a[1].if?.strip.empty?
a[1].maybe.strip.empty?
a[1].and.strip.empty?

martin
 
A

ara.t.howard

[ruby-dev:28217] ANDCALL operator

Nobuyoshi Nakada suggested a new operator `&?' (this notation is temporary)
which evaluates left-hand-side expression, and if it is true then call
right-hand-side method. For example:

if a[1] and a[1].strip.empty?
||
if a[1] &? strip.empty?

h["key"] and h["key"].dispatch
||
h["key"] &? dispatch

The motivation of this operator is to avoid duplication of expression.

Takaaki Tateishi proposed another idea, Object#nil? with block
(again, this name is temporary).

a[1].nil? {|str| str.strip.empty? }
h["key"].nil? {|h| h.dispatch }

This issue is still open.


suggestion:


harp:~ > cat a.rb
#
# predicate methods to avoid double evaluation of expr
#
module Kernel
def iff?(a, &b) a.instance_eval &b if a end
alias_method "if?", "iff?"
def iff!(a, &b) a.instance_eval &b unless a end
alias_method "if!", "iff!"
end

a = [ 42 ]
b = [ false ]

#
# if, and only if
#

iff?(a.first){ p self }

#
# if, and only if not
#

iff!(b.first){ p self }



harp:~ > ruby a.rb
42
false


kind regards.

-a
 
L

Luc Heinrich

a[1].if?.strip.empty?
a[1].maybe.strip.empty?
a[1].and.strip.empty?

How about replacing '.' by something else in those cases ? Something =20
with a slightly different semantic, like "send message only if the =20
receiver is not nil".

For example, using ':'

if a[1] and a[1].strip.empty? =3D=3D> if a[1]:strip.empty?
h["key"] and h["key"].dispatch =3D=3D> h['key']:dispatch

(I've tried with various other characters, ':' is the one which looks =20=

the best imho)

--=20
Luc Heinrich - (e-mail address removed) - http://www.honk-honk.com
 
D

Daniel Berger

[ruby-dev:28217] ANDCALL operator

Nobuyoshi Nakada suggested a new operator `&?' (this notation is
temporary)
which evaluates left-hand-side expression, and if it is true then call
right-hand-side method. For example:

if a[1] and a[1].strip.empty?
||
if a[1] &? strip.empty?

h["key"] and h["key"].dispatch
||
h["key"] &? dispatch

The motivation of this operator is to avoid duplication of expression.

Takaaki Tateishi proposed another idea, Object#nil? with block
(again, this name is temporary).

a[1].nil? {|str| str.strip.empty? }
h["key"].nil? {|h| h.dispatch }

This issue is still open.



suggestion:


harp:~ > cat a.rb
#
# predicate methods to avoid double evaluation of expr
#
module Kernel
def iff?(a, &b) a.instance_eval &b if a end
alias_method "if?", "iff?"
def iff!(a, &b) a.instance_eval &b unless a end
alias_method "if!", "iff!"
end

a = [ 42 ]
b = [ false ]

#
# if, and only if
#

iff?(a.first){ p self }

#
# if, and only if not
#

iff!(b.first){ p self }



harp:~ > ruby a.rb
42
false


kind regards.

-a

(Reposted to ruby-talk)

Nice. If only "if" were a Kernel method that we could tie it to back to
"if/else" constructs somehow:

iff a.first
...
else
...
end

Cue the Smalltalk weenies...

Regards,

Dan
 
D

Daniel Berger

(e-mail address removed) wrote:

suggestion:


harp:~ > cat a.rb
#
# predicate methods to avoid double evaluation of expr
#
module Kernel
def iff?(a, &b) a.instance_eval &b if a end
alias_method "if?", "iff?"
def iff!(a, &b) a.instance_eval &b unless a end
alias_method "if!", "iff!"
end

<snip>

a = nil

iff?(a.length > 2){ puts "yep" }

undefined method `length' for nil:NilClass (NoMethodError)

I guess we need delayed evaluation. Would Nobu's UDelegator help here?

http://tinyurl.com/7zhzb

Regards,

Dan
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,583
Members
45,075
Latest member
MakersCBDBloodSupport

Latest Threads

Top