The tooling around dynamic languages is almost laughably primitive and limited in comparison.
The tooling around dynamic languages is almost laughably primitive and limited in comparison.
Around most dynamic languages, there are exceptions like Smalltalk which has excellent tooling including the automated refactoring and the best development environment around. Let's not forget, tools such as automated refactoring and xUnit type test tools originated in Smalltalk.
Somethings just can't be done.
class Foo:
def foo():
pass
def bar(f):
f.foo
If you re-factor Foo.foo to Foo.renamed, there is no way to know if the call in bar should be re-named as well.Joking aside, your example brought the nature of the issue to life; thanks.
The analog would be driving to New York from Bangalore. Sure it can be done if I arrange a car; have money for the fuel, food and stay; have all the papers etc etc. But that doesn't mean it is in any way comparable to flying to New York while watching a movie and sipping wine.
Renaming a method in the public interface is always a pain - your test coverage and code tracing can numb down it a bit, but it's going to be there. Some of it is because public interfaces are a constant for all practical intent and purpose; most of it is because of the case I listed above.
The only gotcha is where you're eval'ing a string, but that's going to be nasty however you cut it.
Dynamic languages aren't conductive to re-factoring, and static languages are.
http://news.ycombinator.com/item?id=4057593
I don't see how it is a question of where to put the brains.
How come they invented it, then?
http://st-www.cs.illinois.edu/users/brant/Refactory/Refactor...
It seems strange to argue that what gave rise to a thing isn't "conducive" to it. Actually, it's more than strange, it's a contradiction in terms: http://dictionary.reference.com/browse/conducive.