[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Problems with Passive Arguments and refactoring

Esteban Manchado Velázquez

1/18/2005 12:08:00 AM

Hi all,

Sorry for breaking the thread, I mistakenly deleted the old message.

The problem was: I did some code refactoring, and changed the number of
arguments of some methods. I changed all the method calls.... except one or
two. The thing is, the interpreter ate it up just fine, but the program
crashed from time to time, and I had no idea why.

Some hours later, I realized I had _not_ changed a couple of method calls,
so the method was receiving undefined arguments, and doing some silly random
thing until it crashed.

That's it. Probably there are more problems, but that is what I recall it
has happened to me (several times already, in fact), and one of the reasons
I'm not particularly fond of Perl programming :-)

Regards,

--
Esteban Manchado Velázquez <zoso@foton.es> - http://ww...
EuropeSwPatentFree - http://EuropeSwPatentFree.his...


5 Answers

T. Onoma

1/18/2005 2:09:00 AM

0

On Monday 17 January 2005 07:08 pm, Esteban Manchado Velázquez wrote:
| Hi all,
|
| Sorry for breaking the thread, I mistakenly deleted the old message.
|
| The problem was: I did some code refactoring, and changed the number of
| arguments of some methods. I changed all the method calls.... except one or
| two. The thing is, the interpreter ate it up just fine, but the program
| crashed from time to time, and I had no idea why.
|
| Some hours later, I realized I had _not_ changed a couple of method
| calls, so the method was receiving undefined arguments, and doing some
| silly random thing until it crashed.
|
| That's it. Probably there are more problems, but that is what I recall
| it has happened to me (several times already, in fact), and one of the
| reasons I'm not particularly fond of Perl programming :-)

Not that you don't have a point. You do. But a number of things would catch
errors "earlier" too, like static typing for example. But that's not Ruby's
way. In general Ruby's philosophy is test first ( not that any of us do this
most of the time, but we go back and pretend ;) In so doing these kinds of
errors will usually get caught. So while you have an argument, (IMHO) I don't
consider it a strong one.

Thanks for the explanation,
T.



T. Onoma

1/18/2005 2:17:00 AM

0

On Monday 17 January 2005 07:08 pm, Esteban Manchado Velázquez wrote:
| Hi all,
|
| Sorry for breaking the thread, I mistakenly deleted the old message.
|
| The problem was: I did some code refactoring, and changed the number of
| arguments of some methods. I changed all the method calls.... except one or
| two. The thing is, the interpreter ate it up just fine, but the program
| crashed from time to time, and I had no idea why.
|
| Some hours later, I realized I had _not_ changed a couple of method
| calls, so the method was receiving undefined arguments, and doing some
| silly random thing until it crashed.

Oh, BTW, I know the feeling. Those days are hair pullers indeed!

T.



Robert Klemme

1/18/2005 8:03:00 AM

0


"trans. (T. Onoma)" <transami@runbox.com> schrieb im Newsbeitrag
news:200501172116.25496.transami@runbox.com...
> On Monday 17 January 2005 07:08 pm, Esteban Manchado Velázquez wrote:
> | Hi all,
> |
> | Sorry for breaking the thread, I mistakenly deleted the old message.
> |
> | The problem was: I did some code refactoring, and changed the number
> of
> | arguments of some methods. I changed all the method calls.... except one
> or
> | two. The thing is, the interpreter ate it up just fine, but the program
> | crashed from time to time, and I had no idea why.
> |
> | Some hours later, I realized I had _not_ changed a couple of method
> | calls, so the method was receiving undefined arguments, and doing some
> | silly random thing until it crashed.
>
> Oh, BTW, I know the feeling. Those days are hair pullers indeed!
>
> T.

LOL - No problem for me, I'm nearly bald. :-))

robert

Esteban Manchado Velázquez

1/18/2005 11:03:00 AM

0

Hi T,

On Tue, Jan 18, 2005 at 11:09:16AM +0900, trans. (T. Onoma) wrote:
> [...]
> | Some hours later, I realized I had _not_ changed a couple of method
> | calls, so the method was receiving undefined arguments, and doing some
> | silly random thing until it crashed.
> [...]
> Not that you don't have a point. You do. But a number of things would catch
> errors "earlier" too, like static typing for example.

Yes, but I don't find parameter number checking slows you down, while
static typing obviously does (at least in the short term).

And I simply don't see the _advantage_ of not checking. If you need a
variable arguments method, simply declare it as that.

Also, IMHO if you push the dynamic philosophy too much, it stops being
practical, because you put too much of a burden in the programmer (why the
_need_ of testing for almost anything?). My _personal_ balance is having the
language do things like parameter number checking, but allow more dynamic
behaviour in other things (like parameter type checking).

Regards,

--
Esteban Manchado Velázquez <zoso@foton.es> - http://ww...
EuropeSwPatentFree - http://EuropeSwPatentFree.his...

T. Onoma

1/18/2005 1:45:00 PM

0

On Tuesday 18 January 2005 06:02 am, Esteban Manchado Velázquez wrote:
| Hi T,
|
| On Tue, Jan 18, 2005 at 11:09:16AM +0900, trans. (T. Onoma) wrote:
| > [...]
| >
| > | Some hours later, I realized I had _not_ changed a couple of method
| > | calls, so the method was receiving undefined arguments, and doing some
| > | silly random thing until it crashed.
| >
| > [...]
| > Not that you don't have a point. You do. But a number of things would
| > catch errors "earlier" too, like static typing for example.
|
| Yes, but I don't find parameter number checking slows you down, while
| static typing obviously does (at least in the short term).

Okay, maybe a little. I don't think it slows people down too much. But I take
your point. OTOH, having to use *args can slow one down too.

| And I simply don't see the _advantage_ of not checking. If you need a
| variable arguments method, simply declare it as that.

The advantages are 1) greater polymorphism and 2) when doing AOP-style
wrapping of multiple methods.

| Also, IMHO if you push the dynamic philosophy too much, it stops being
| practical, because you put too much of a burden in the programmer (why the
| _need_ of testing for almost anything?). My _personal_ balance is having
| the language do things like parameter number checking, but allow more
| dynamic behaviour in other things (like parameter type checking).

Sure. That's a fair opinion. But, in this case at least, I'm not of that
opinion. I look at it as simple matter of duck quaking. For instance if I
have:

class A
def a(x)
"#{x}"
end
end

class B
def a(x,y)
"#{x}#{y}"
end
end

class C
def puta(n,x,y)
puts n.a(x,y)
end
end

C.new.puta(B.new,"1","2") #=> 12
C.new.puta(A.new,"1","2") #=> Error

I don't think A#a should blow-up here --which it will. And to fix it one has
to either put in a _dummy_ y parameter or use the less friendly *args.

Wouldn't a special togglable warning be enough to catch'em if you did want to
work this way? OTOH, mayb being able to simply specify a method as
parameter-indeterminate, like:

def *a(x,y)
end

Might do as well.

T.