What programming environments provide the level of navigation, analysis, and refactoring power for their languages that Eclipse does for Java?
April 29, 2012 6:00 PM   Subscribe

What programming environments provide the level of navigation, analysis, and refactoring power for their languages that Eclipse does for Java?

I am a software developer. I use a refactoring-heavy programming style that focuses on minimizing duplication. I'd give the name of it, but it doesn't have a name; it's just my style. I find that I need certain features in a programming environment, or my style won't work well; and I'm interested in learning about more language-and-editor combinations that provide these features, because I only know a couple (mainly Java with Eclipse), and it is dangerous to be so limited.

The features are:

A "find usages" feature that almost always works--and preferably, one that performs deep, interactive searches, as Eclipse's Call Hierarchy view does.
A "renaming" refactoring on anything that can be named.
Quick navigation to the definition of an identifier (especially of a function or class).
A context-sensitive system for suggesting available functions (methods on the object you just typed a dot after, or whatever).
Syntax highlighting, especially of errors.
A friendly, clickable view of all errors in a project.
Fast compilation (or no compilation), so that change-run-change-run feedback loops are small (even if it's the whole program being run, as opposed to something small like a unit test).

There may be a few others I'm not thinking of, but I think that's a pretty good list. What programming environments provide these features, and for what languages?
posted by Koray to Computers & Internet (20 answers total) 9 users marked this as a favorite
 
Visual Studio does all of this for C#, VB, C++, F#...
posted by crazycanuck at 6:13 PM on April 29, 2012 [2 favorites]


Eclipse, Xcode, Visual Studio... They all do this to some extent. How good it is and specific features vary. VS is pretty good for MSFT languages. XCode is frustratingly slow and sometimes misses things.
posted by jeffamaphone at 6:20 PM on April 29, 2012


One thing to keep in mind is that a lot of times this sort of development goes into plugins for Eclipse itself, extending the features of Eclipse for new languages. PyDev is particularly noted for that, which (as the name suggests) supports Python, but there's others as well.
posted by CrystalDave at 6:23 PM on April 29, 2012


Response by poster: Visual Studio does for C++? Does the "find usages" feature work very reliably in spite of template use, complicated class hierarchies involving multiple inheritance, and other C++ weirdness? Is compilation always fast, even if one's project is very large?
posted by Koray at 6:23 PM on April 29, 2012


Response by poster: Does PyDev provide the features I list?
posted by Koray at 6:24 PM on April 29, 2012


Netbeans does those things. I use it for Java programming but it also supports PHP and C/C++.
posted by axiom at 6:28 PM on April 29, 2012


I only dabble with Python, but yes, PyDev scores fairly well on your list. I don't do nearly the layers on layers of OO with Python that I've done with Java, so I'm not asking much from things like "find usages", but I found it a comfortable place to get work done in Python.
posted by jmcmurry at 6:49 PM on April 29, 2012


Tangentially, your coding style sounds a lot like DRY (Don't Repeat Yourself).

More on topic, TextMate is the very popular editor for Ruby on the Mac that everyone loves which delivers many of your features.
posted by jpeacock at 7:00 PM on April 29, 2012


Response by poster: I'm not very experienced with dynamically typed languages, but I have the impression that pretty much all of them would be incompatible with my requirement of a "find usages" feature that almost always works.
posted by Koray at 7:04 PM on April 29, 2012 [1 favorite]


For C, I believe Emacs with CEDET mode provides everything you describe except the automated refactoring (and I say "except" not because I know that feature is missing but rather because I don't know that it's available).

Vim with the appropriate plugins will also, but the plugins will take some coaxing and I actually do know that you're not likely to find any automatic refactoring.
posted by d. z. wang at 7:07 PM on April 29, 2012


Visual Studio does all of this for C#, VB, C++, F#...
Only if you pay for it. I used the free version of VS for C# extensively and it was absolutely crippled compared to eclipse.
posted by ch1x0r at 8:21 PM on April 29, 2012


No dynamically typed language will give you the kind of autocomplete stuff you get in Eclipse. It hurts especially bad inside function bodies, where the types of the arguments are unknown.

C++ compilers are slow. I think it's mainly because of the header file system, but it's also because C++ has a more complicated grammar that is slower to parse.

I think you would be pleasantly surprised with C# in the $$$ version of Visual Studio. The language and IDE are both similar to Eclipse, but the performance feels quite a bit snappier. C# as a language is very similar to Java - the main difference is between .NET and the Java library. Although, delegates in C# are quite useful and have no Java equivalent.

Why are you asking this question? Are you mainly concerned with hire-ability or with expanding your mind? If it's the latter, I suggest you spend more time with a dynamic language. The loss of IDE features will be balanced by an increase in expressive power that you probably can't anticipate from an Java background. You could check out Clojure - it's a Lisp dialect that runs on the JVM and can interface with Java classes and the Java library.
posted by scose at 9:11 PM on April 29, 2012


I'm not very experienced with dynamically typed languages, but I have the impression that pretty much all of them would be incompatible with my requirement of a "find usages" feature that almost always works.

It often depends on the programmer's style for dynamic languages. If they avoid dynamic features (i.e., eval), the static analysis that figures out things like "find usages" might produce useful results, even though it is neither sound nor complete. But the lack of strong typing is definitely a hindrance.
posted by qxntpqbbbqxl at 9:31 PM on April 29, 2012


Response by poster: Yes, I've used and liked C#. It fits my criteria well (especially with help from ReSharper), except maybe the fast compilation one.

I suggest you spend more time with a dynamic language. The loss of IDE features will be balanced by an increase in expressive power that you probably can't anticipate from an Java background.

I feel like I have almost enough expressive power with Java, and gaining more, even a lot more, wouldn't be worth becoming crippled in another essential way. Can one efficiently develop complex software without frequently invoking a "find usages" feature? I don't know how. But a lot of people use dynamic languages, so maybe they know how.

If they avoid dynamic features (i.e., eval), the static analysis that figures out things like "find usages" might produce useful results, even though it is neither sound nor complete.

That could be good enough or not good enough, depending on just how unsound or incomplete the results were. Is there a way to get usage finding that's almost completely reliable, while using a dynamically typed language, by choosing the right editor and language and programming in a specially limited style? Or is it always pretty sketchy?
posted by Koray at 9:58 PM on April 29, 2012


IntelliJ does these things and often does them better than Eclipse. JetBrains, the company which makes IntelliJ, has a bunch of other language-specific IDEs. The only one I've tried was PyCharm, which was then in beta, and although it was nice to use in a lot of ways, the both dynamic typing and python's whitespace-based structure seemed to limit the IDE in comparison to IntelliJ. I did not, however, use PyCharm on a big project, nor have I used it since it was officially released, so it has probably improved.
posted by beerbajay at 3:33 AM on April 30, 2012


Wingware Python IDE does most (maybe all) of what you ask for Python. I've only used the Pro version - I'm not sure how much is missing from the 'Personal' and '101' versions.

It's probably worth saying that some of that too support you *need* to work with Java (and not go mad) is not necessary for other languages (such as Python).

Regarding free versions of Visual Studio. Some posters mentioned that the free versions are not comparable with Eclipse. This may be so (I've never used Eclipse) but I wouldn't want people to put off them - they are far from useless and many programmers could work for a long time in, say, C# and never find anything they were missing from the free versions.

The worst aspect of using them (as with any other MS tool) is that every two years in order to sell the next version of VS there's some sort of change to the config files which means using the old version becomes boring (what you might call the "Office syndrome"). Of course in some ways this doesn't matter as upgrading is free but I still find it pretty boring.
posted by southof40 at 4:31 AM on April 30, 2012


It's probably worth saying that some of that too support you *need* to work with Java...
should read
It's probably worth saying that some of the support you *need* to work with Java...
posted by southof40 at 4:33 AM on April 30, 2012


every two years in order to sell the next version of VS there's some sort of change to the config files
I use different versions of VC (at different locations).
The newer VC will convert older config files ( the *.vcproj files), but 'downconverting' must be done by hand:
Change the line (very near the top of the .vcproj)
Version="9.00" (or whatever) to Version="8.00" (or whatever else)
(the above numbers move VC2008 to VC2005)
posted by hexatron at 4:49 AM on April 30, 2012


Using Eclipse makes me fondly remember Genera.
posted by kjs3 at 9:50 AM on April 30, 2012


Can one efficiently develop complex software without frequently invoking a "find usages" feature?

While refactoring/analysis can be done somewhat more "reliably" in a statically-typed language (although not entirely... reflection breaks this and so Java is not immune to problems), I don't find this a hindrance in Python very often.

Some Python refactoring tools try to do coverage and other techniques, but really if you're working with a single codebase good naming and style conventions plus a good editor is all you need. I do all my Python development in emacs Python-mode with various utility functions written by both me and other coworkers.

This can definitely work for large projects -- all of YouTube is written in Python, for example.
posted by wildcrdj at 3:37 PM on April 30, 2012


« Older Home based business tax write offs when you don't...   |   This won't end well and it's really not helping... Newer »
This thread is closed to new comments.