CLion, the new C/C++ IDE from JetBrains
jetbrains.com
jetbrains.com
The only thing that I am not a big fan of though is having to install Java to run any of their IDEs. I'm not a Java developer, and have no need to install it on my system, so having to install it just to use my IDE is a bit of a pain. Small price to pay I guess for an otherwise great product.
Congrats to the team on another great-looking IDE.
Only Windows bundles its own JVM, same as other non-IJ IDEs.
On OSX the JRE installs on demand and requires very little from the user other than clicking OK and a password. On Linux package managers are there for you. In practice, I'd rather not have Java if I don't need it but it's fairly painless to get setup for this sort of thing.
Sidenote: JetBrains makes a great IDE, I always hear python programmers praising pycharm and java programmers praising intellij.
If you don't like writing it or working in it, then sure, we all have opinions on what makes a language good. Not wanting to install a piece of software because it runs applications written in that language just strikes me as a bit silly.
Maybe I just have Stockholm Syndrome after all of these years.
Of course, Jetbrains' products are a proof that you can use Java to build modern apps that are pretty good.
Specially because most developers couldn't bother to write proper Swing code, or reading blogs like "Filthy rich clients".
Its like having to install Ruby simply because these a single Gem that you want to install and there is no other way to go about it, even if you never use Ruby for any other purpose. More of an annoyance than anything else.
:-)
There's also the update manager, I don't know why but Java feels the need to update every other day or week, and then on top of annoying you by prompting a UAC (yes I know I can disable these) they add a toolbar into every update / install process, sometimes you just miss those check boxes and then all of a sudden you have toolbar hell.
I love Java, I hate the installer and the updater. I also hate the JDK itself, it's a horrible mess, try switching to C# for a year, then go back to Java. You'll hate it. I still love the capabilities of Java, but it needs a overhaul on a lot of things.
As for spyware, oh it is so easy to convince Joe user to install it, even on UNIX systems. Social engineering makes wonders.
http://www.oracle.com/technetwork/java/javase/downloads/inde...
Oh, I don't know, just bother to read what the dialog says.
I've mentioned elsewhere ( https://news.ycombinator.com/item?id=8285065 ) that I really don't mind Java, and FWIW I have liked the Jetbrains IDEs, but the consumer JRE installation and update process is really quite bothersome.
"This looks really different. Oh man it's asking you to auto-update. That's frustrating."
rpm -ivh jdk-<version>-linux-x64.rpm
~/.bashrc
export JAVA_HOME=/usr/java/default/
export PATH=$JAVA_HOME/bin:$PATH
Was that hard?Wise men choose the best tool and sometimes not having to bother too much about memory handling frees up a lot of mental bandwidth to deal with much bigger problems.
This is what good tools allow people to do.
my code works on every platform actually out of the box. no installs necessary. i consider that important so i just can't use JVM in general unless i sacrifice that...
i usually get disbelief until it is seen, but all of my large non trivial projects build out of the box in one step and run with one click. i really value that.
that being said, all my android projects use a JVM in the end. :)
That, or Oracle could do the right thing and a) remove the crapware installation from the public JRE installer and b) fix the JRE updater to work as silently and smoothly as, say FireFox or Chrome updaters. The latter has gotten much better of late, but could still use improvement.
When JetBrains releases an IDE as a service then I'll be excited.
I do admit that of all the IDE's I've used IntelliJ was definitely the least annoying. But it still doesn't hold a candle to Emacs in Evil Mode for me.
No, because IDE are more than just coding.
They offer an integration of services that one usually requires in large scale projects.
I want:
- semantic refactoring
- background compilation as I type
- static analysis
- integration with bug tracking software and source control
- visual debugging of data structures, threads
- ability to change code during debbuging sessions
- navigation of binary artifacts
- debugging unit tests
- semantic code navigation
- GUI designers
- XML build tools
- visual navigation of databases
- UML dual way generation
- ...
And above all, avoid trying to make Emacs or VIM do half of these features, every time I install them.
A great part of an IDE worflow is the visual experience. Having some kind of service, while forcing each client application to create their own UIs, kind of beats the purpose.
This is why on UNIX world the developer experience feels half-baked to those of us that could step a bit into the world as imagined by Xerox PARC.
Nothing about having a service prevents offering that visual experience. IntelliJ/Eclipse the IDE can still exist while consuming the same backend that my Emacs consumes. You get your visual experience that helps you achieve flow state. I get my highly configurable/optimized editor that helps me achieve flow state.
win/win
Sure, its learning curve is unusually high and Elisp knowledge is required for some edge cases, but it's definitely worth in the medium and the long run.
Did you miss the visual and semantic adjectives?
I know UNIX since Xenix and DG-UX days, before Linux was a thing and Emacs was my editor to go up to 2005.
Unless it has changed radically, no it cannot do all these features. Half of them, yes.
Sure you can program them yourself, to get as end result some text interface to ELisp functions.
But I no longer want to spend time doing that.
> For Lisp languages there is simply no other option.
Only if you don't want to pay for proper Common Lisp environments. They can do so much more.
It didn't. Emacs still tries to do most of those things and fails more often than not. I love Emacs and I use it daily, but between it's dated look, monstrous codebase, enormous feature set and limited resources dedicated to development it cannot hope to match programs written for a single purpose by a team of professionals.
Still, Emacs is great editor. I'm not going to dump Org Mode, for example, and calc is great, and scripting is absolutely awesome (Emacs is also great IDE for Elisp) and so on. It's great for many things, and it's even ok for programming, but it's never going to be as good as IDEs. And IDEs are not going to have mail & newsgroup clients built into them, I suppose.
I used Emacs on my UNIX projects between 1994 and 2005.
Pitching a new IDE is asking a programmer to throw away years of experience in their editor of choice (mine, for better or worse, is Emacs) for some shiny feature.
(I see above that people are arguing that this doesn't solve the issue of visual integration, but I don't see why separation of concerns in this way would make it harder to write a language-specific IDE--can anyone point to any examples?)
BTW I've recently tried omnisharp-emacs, but found dealing with larger C# source files was way too slow to be useful. But it's pretty great to be able to use Emacs for C# and get useful code completion, so I'll be continuing to make efforts to make this work.
[1] http://blog.jetbrains.com/blog/2013/09/18/upsource-a-platfor...
That said, it's disappointing that they have explicitly tied this into CMake. This limits it's usefulness / ease of adoption for anybody working on a larger project with some other build process. Hopefully more generic support gets added as this matures out of EAP.
other than that, CMake is ok for a start, but some kind of support for good-old makefiles will still be needed. most of the projects won't be bothered to switch to CMake just to be compatible with IDE
As for the other build-systems: http://youtrack.jetbrains.com/issue/CPP-274
Congrats, thought. C/C++ could use more powerful and cross platform IDEs.
IBM had a version of Visual Age for C++ that tried to offer Smalltalk like developer experience, but it used lots of memory back then, and it failed to get enough customers.
There was also another company selling a similar product, that used to sell Lisp Machine software, but I don't recall the name any longer.
C++ Builder is also quite good, but thanks to Borland/Inprise/Embarcadero mismanagement gets ignored outside big enterprise projects.
Currently QtCreator refactoring seems to be quite limited still.
Are you thinking of Lucid and their "Energize" environment? If you're interested, Richard Gabriel (founder of Lucid) published a set of essays about the failure of Lucid. You can get them here (linked from the author's site): http://dreamsongs.com/Files/PatternsOfSoftware.pdf The section on Lucid is called "Into the Ground".
I would love to see them implementing a C# (Mono/.Net) IDE for Linux and Mac. Monodevelop/Xamarin Studio is ok, but I love the power and flexibility of intellij idea.
Having said that, I wouldn't have expected them to put out AppCode, either but maybe it's because Xcode sucks so amazingly much whereas it seems everyone sings the praises of VS.
Apparently Resharper for C++ has been in public EAP for a little while already (first time I've heard of it). I'm definitely going to try both, but does anyone know the differences? It seems like CLion is more mature that Resharper for C++?
Edit: Does anyone know of a good way to convert a Visual Studio solution to cmake? The only thing I use C++ for anymore is VST plugin development, which is pretty Windows-centric, and everyone uses Visual Studio.
Caveat: apparently published under an "Early Access Program" as of now, where "EAP build doesn't require any license and can be used freely for 60 days.", and "Please note that the quality of EAP versions may at times be way below even usual beta standards."
Now, my most important question, that I couldn't find answer for on the pages, is: does it provide "Find all references", and one that would correctly resolve references in advanced templates? (i.e., better than Eclipse CDT's)
edit: argh, yes, now I see that it's mentioned in the original blogpost; haven't read it to the end :/ this->facepalm();
Only minor disappointment for me was that you can only use it on windows with gcc via msys, and you have to struggle through that install yourself. Given that there's a build of clang* out there for msys already that would have been nice to support... but I guess it's still EAP.
* http://sourceforge.net/projects/mingw-w64/files/Toolchains%2...
mingw-builds to install gcc:
http://sourceforge.net/projects/mingwbuilds/
msys2 to install the rest of the build environment:
(as well as a growing number of packages, managed with a port of pacman from Arch)
For the majority of programming languages/environments (e.g., IDEA) I suspect the community edition will be enough for me. But I would be happier if I could pay a reasonable price and get all JetBrains products in one install.
It might be worth learning a new environment if it makes this easier.
The fancy stuff they show you are in my opinion just short-comings of C++ [activate flame-war prevention system] or not THAT important in development. E.g.
- implementing getters/setters: just make the thing public, the whole private/public bullshit is too shallow
- implementing methods: inheritance is normally used with caution and is just a small part of your application (e.g. a core that uses it); you will think about getting this abstraction right (your inheritance tree) and the time it needs typing the text to implement the methods is often small in comparison to the thinking over inheritance.
- completion: IMHO there are different modes you are in, while coding: (0) prototyping (researching the problem, reading API documentation) and (1) implementing a robust solution; In the first case, again, the time it takes you is more constrained by the thinking you do, and in the second case you probably know the API and important functions already (from the previous step) so the auto-complete is not needed anymore.
The coolest thing is the renaming which really might help you tackle one of the hardest CS things (naming things). Furthermore I would not use the Shape example as it is too far fetched from reality. It's like the "let's implement fibonacci numbers" in the FP world. And how do they manage "Makefile" only projects?
You may be surprised at how much of a productivity boost it is (and yes, intelliJ can be slow; but it's nothing like as rubbish as visual studio).
Their autocomplete is second to none, however. And once that has parsed the codebase it is lightning fast. Definitely recommend giving it a try.
Deep inside I wonder if the ram usage isn't wasteful, but then I use "find usages" in a medium sized python codebase and I'm just happy pycharms saved me 30+ minutes of poking through code. I found it a big productivity boost.
As for the Eclipse we don't have such requests but may consider if it becomes popular.
Yeah, it's for people who doesn't ALREADY have a compelling solution to what it offers.
I don't know about you, but I don't memorize functions/classes when I program. I don't always remember proper capitalization (is it HttpClient or HTTPClient?)
I find in the first case, I can be much faster when I can just think. Instead of having to switch mental contexts between "What's my logical process" and "How does that translate specifically into this language/framework/whatever." A simple example is if I want to iterate through every item in a container, I'd like to just type 'for', tab, the first few letters of the container variable, tab, and have it all set up. Resharper does this, and will even name things appropriately for you (if the container is something like myInts or intList, it will name the item myInt).
I used to do most of my planning on paper, or in a text file for this reason. But it's much nicer to be able to merge planning and coding as early as possible.
In your second case, well (1), maybe this is true for you and others. But not for everyone, myself included. I have a pretty poor memory for specifics. Is it myList.length(), myList.length, myList.Count, len(myList), count(myList)? On top of this, every one of the previous examples is valid in a language or framework I use at least on a weekly basis, if not daily. I may be doing python and javascript all day at work, then go home to work on a game in C++. It leads to a lot of confusion. (And about 30 minutes until I remember I need to use brackets and double quotes again, haha).
Everyone has their own ideal purpose of an IDE, and JetBrain's goals are pretty much in line with what I want. I agree that many of the fancy features they show off are just getting around the short-comings of C++. But to me, that is the point. I like the IDE to remove the actual "coding" aspect as much as possible. Allow me to think through the logic and control flow. Not whether the current item has to be dereferenced or not. Let me think of the actual data structure, and not whether it needs to be called .push_back() or .append() or .add().
Yeah, but e.g. in C++ there are many styles of for-loops. How does the IDE find out what you want to do? Different projects adopt different for styles (size_t, iterators, etc.).
>Is it myList.length(), myList.length, myList.Count, len(myList), count(myList)?
That's a legitimate question, but how does your IDE help there? I solve the problem using a
"<language> get length of list"
web-search. Can your IDE answer this question? If I just type
myList.
I will get usually a drop-down menu of all the methods. But then I have to try "c" for count, "l" for length, etc. In particular I have to assume that the size function is a method which is the case in Java, C++, but e.g. not in Python. Or does JetBrains Python version (PyCharm I think) rewrite a.length to len(a)?
My main IDE complaint is that IDEs lock you into languages, libraries and workflows. If you work with a text editor your have to know
- the language
- the text editor
- your build system
- your version control system
If you work with an IDE you have to know - the language
- a text editor (e.g. remote sessions without X)
- the build system
- the version control software
- the ide
- probably a plugin that makes your ide editor behave like your text editor
- a plugin for your language
- a plugin for you build system
- in general: how does the IDE's plugin system work
So I like the idea of IDEs, but for me the abstraction always fails and I struggle with its plugins. I give them a try sometimes but most of them are locked into eco-systems: - qtcreator: QT, C++
- eclipse: Java
- netbeans: Java
- PyCharm: Python
- Clion: C/C++
If you work with different languages, libaries and workflows it is often not trivial to make the IDE adapt (in particular, most of them have their own definition of "projects" and scatter you directory trees with hidden files) and the whole dev-setup gets more complicated. What do you do if you have to use a language that's not supported by the IDE?The text editor abstraction feels more honest: "Look your project is a bunch of text files. I give you the following interface to explore/change this text blobs." Again, I like the idea, but good IDEs were always locked into eco-systems and these change so fast that the IDE seems always behind. I think Smalltalk had an advanced IDE but it locked you into ... Smalltalk.
Netbeans: Java, C, C++, PHP, Ruby, Groovy, ...
> I think Smalltalk had an advanced IDE but it locked you into ... Smalltalk.
Which shows you never used it.
Smalltalk is an environment. Workstation OS, IDE, REPL and programming language.
Only the whole experience is gratifying.
Same goes to Interlisp-D, Mesa/Cedar, Lisp Machines and Oberon systems. All Workstation OSs that mix all these concepts together.
UNIX developer experience might sound great, but only for those that never had the experience to touch such systems.
More seriously, I have made my employers buy most of their products over the years, and when I have no job I pay with my own money for their products to do personal stuff.
It's right here: http://support.apple.com/kb/DL1572
Installed on the latest Yosemite beta.
At any rate, given how happy I am with IntelliJ, I'll definitely buy it (if it won't be part of IntelliJ Ultimate).
Notwithstanding, I have been an happy IDE user for multiple languages since the early 90's.
Programmer editors only can do so much.
Looking forward to the Android Studio integration.
When it happens and Gradle gets fixed, then I can finally ditch Eclipse for my Android hobby development (mostly NDK based).
Or I'm blind :)
Now I just wish there was an easy way to get it working with chromium. I can dream right?