[A] Vergleich von C/C++ IDEs für Linux



  • Servus..
    Ich hab mich ja vor einiger Zeit fuer den Linux IDE Artikel gemeldet und hier ist der erste Teil ueber Anjuta. Ich hab noch nie einen Artikel etc. geschrieben, und wuerde mich ueber Kritik zum Stil freuen.

    Ich mache jetzt mit jeder IDE ein Projekt. Deswegen wird dass auch bissl laenger dauern, aber ich hoffe, dass auch die Qualitaet steigt..

    Ich hab bis jetzt noch keine Formatierungen fuer Ueberschriften usw., da ich bis jetzt alles mit dem Editor geschrieben habe..

    Grueße..
    aMan..

    ===================
    1. Allgemeines Blabla
    2.1 Anjuta
    2.2 Code::Blocks
    2.3 Eclipse
    2.4 KDevelop

    1. Allgemeines Blabla
    Ich habe zum Testen der vier IDEs jeweils ein kleines Projekt gemacht. Soweit es möglich war, habe ich dazu Qt [1] verwendet. Da Qt ein eigenes Buildsystem verwendet, war das nicht überall ganz ohne Probleme möglich. Bei Code::Blocks gibt es zwar eine Erweiterung, die angeblich ganz gut ist, aber sie war nicht zur aktuellen Version kompatibel und wurde komplett vom C::B Forum entfernt. Bei der Gnome IDE Anjuta konnte ich qmake provisorisch nachrüsten, mehr dazu im Text. Bei Eclipse und KDevelop gab es mit Qt keine Probleme. Wenn Qt nicht so gut oder überhaupt nicht unterstützt wird, hat es natürlich keine Auswirkungen auf den Test. Ich wollte einfach eine mir bekannte Library verwenden (soweit möglich).

    Für den Test der Debuger verwendete ich ein Konsolenprogramm. Somit kann man alle IDEs besser vergleichen und ich habe kein Problem mit Qt.

    Ich gebe absichtlich keine Wertung nach Punkten oder Schulnoten ab, da sich jeder Interessierte den Text durchlesen sollte, um sich dann seine eigene Meinung zu bilden. Außerdem wäre ich durch meine eigenen Vorlieben und Prioritäten beeinflusst.

    Nun reichts aber mit dem allgemeinen Blabla..

    2.1 Anjuta
    Ich hab eine Entwicklerversion genommen, damit ich eine möglichst neue Version hab. Es ist immerhin ein Sprung von der stabilen 1.2 zu 2.0. Deshalb sind auch noch ein paar Bugs oder Unstimmigkeiten im Programm. Bis zum Release werden diese wahrscheinlich korrigiert sein.
    [[screen]]

    Mein Testprojekt soll ein Benchmarkprogramm für Internetseiten werden. Es lädt einfach die Seiten aus dem Internet und misst die Latenz. Das Programm ist nicht kompliziert und auch sicher nicht für wissenschaftliche Tests geeignet. Den Sourcecode [und eine ausführbare Datei für Linux und Windows] kann man auch herunterladen [2]. Das Programm verwendet Qt und steht deswegen auch unter der GPL.

    Projektmanager:
    Beim Projekterstellen wird kein neues Verzeichnis erzeugt. Zum Glück wird aber ein Warnung angezeigt, dass im Verzeichnis schon Dateien sind. Man muss dann einfach im Pfad noch das Verzeichnis für's Projekt dazuschreiben (so wie in manchen Windowsinstallationsprogrammen). Standardmäßig wird dann ein automake und autoconf basiertes Projekt erstellt. Qmake und andere Buildsysteme kann man ohne Erweiterungen nicht verwenden. Die Qmakeunterstützung nachzurüsten war aber nicht schwer, zumindest provisorisch. Es gibt Templates für die folgenden C++ Projekte: wxWidgets, GTKmm und Generic C++; außerdem noch ein paar C, Java und Python Templates.
    [[screen]]

    GUI
    Die Menüs sind recht übersichtlich und alle Funktionen schnell zu erreichen. Die Schlichtheit vieler anderer Gnome Programme ist hier nicht zu finden. Viel mehr kann man Plugins sehr leicht aus- und wieder einschalten. So bleibt die GUI sehr übersichtlich (screenshot). Die Plugins sind projektabhängig, also kann man auch ein Projekt über CVS verwalten, wärend das andere nur lokal ist.
    [[screen]]

    Toolsmanager
    Sehr praktisch ist auch der Toolsmanager, den man auch in den Plugins einschalten kann. So etwas habe ich noch nie gesehn, es ist auch in den hier getesteten IDE's nicht zu finden. Plugins, die in 5 Minuten geschrieben und in die IDE intigriert sind. Vielleicht ist das ja nichts Besonderes, aber KDevelop hat ein viel komplizierteres System, Eclipse bietet gleich ein ganzes Framework und Code::Blocks bietet etwas ähnliches, aber viel bescheidener (dazu später mehr). Naja, ich bin ehrlich von diesem Ding begeistert: Qt Unterstützung in ner Gnome IDE und das in 5 Min, also wirklich nicht schlecht das Ding. Ich habe meine Scripte veröffentlicht [3] und jeder kann sie verwenden, wenn er will.
    [[screen]]

    Code formating
    Es gibt auch ein Werkzeug, das nach mehr oder weniger eigenen Wünschen den Code formatiert. Der Einstellungsdialog ist ziemlich umfangreich, aber leider auch unübersichtlich. Man kann nicht alles verstellen und bei manchen Stellschrauben fragt man sich wirklich, was sie sollen. Zum Beispiel kann man einstellen, dass bei "if", "else", "switch", "while", "class" und "struct" die Klammern in die gleiche Zeile kommen, nicht aber bei Funktionen und Methoden. Trotz der vielen Knöpfe kann man den Autoformatierer nicht davon abbringen, immer "classtype *object" zu schreiben (anstatt "classtype* object") und

    QGridLayout *layout;
    

    verändert er immer zu einem

    QGridLayout *
    		layout;
    

    Als letztes Manko ist noch zu nennen, dass er nicht den Text im Editor nimmt, sondern die Datei auf der Festplatte. Das Ergebnis ist dann ein Dialog "Die Datei wurde auf der Festplatte verändert..". Wenn man vor dem Formatieren nicht abgespeichert hat und neulädt, dann sind die Äderungen verloren. Ich habe später nur noch die generierten Klassen automatisch formatiert und dann genauer auf meine eigene Formatierung geachtet. Ich finde aber, dass das nicht das Ziel von so einem Werkzeug ist..
    [[screen]]

    Und nun zum wichtigsten Teil von der ganzen IDE, dem Editor.
    Auch wenn es komisch klingt, mir ist der Editor recht langsam vorgekommen (Laptop auf Reisen mit 800 Mhz). Wenn der Notebookprozessor mit 1733 Mhz arbeitete, hatte ich damit keine Probleme. Wahrscheinlich ist das auch Geschmackssache.
    Ich zähle jetzt einfach ein paar Punkte auf, die mir wärend des Editierens aufgefallen sind:
    ->Wenn man mit dem Kursor neben einer Klammer ist, wird die andere hervorgehoben. So weit, so gut. Leider ist die Markierung nicht gut zu sehen (Notebook auf Reisen mit abgedunkeltem Monitor). Strings sind auf dem Laptop auch schlecht zu lesen. Auf nem richtigen Monitor oder hellerem Laptop LCD sollte das kein Problem sein.
    -> Es fehlt eine autom. Klammer- und Anführungszeichensetzung (wenn man ( [ { " oder ' eintippt, wird nicht automatisch das zweite Zeichen angehängt.) Außerdem kann man Wörter nicht markieren und dann mit einem Tastendruck umklammern oder in Anführungszeichen setzen. [[[Damit meine ich Folgendes: Wenn man blub markiert und dann eine Klammer oder ein Anführungszeichen Tippt, wird blub automatisch umklammert oder in Anführungszeichen gesetzt (hier wird blub gelöscht und das entsprechende Zeichen geschrieben). ist das verstaendlich?]]]
    -> Wenn man ein ";" zwischen zwei Funktions- oder Methodenklammern schreibt, wird es nicht automatisch nach hinten verschoben. [[[Wenn man blub->blubern(param1, zwei, drei) schreibt, und der Kursor hinter "drei" steht, kann man ";" tippen. Das wird dann automatisch hinter die Klammer verschoben. Auch hier die Frage: Ist das klar?]]]
    -> Syntaxkorrektur wärend des Schreibens fehlt.
    -> Beim betätigen der Tabtaste wird standardmäßig keine einrückung gemacht. Außerdem sind die Einrückungsoptionen recht unübersichtlich und im allgemeinen bescheiden.
    -> Wenn am Dateiende kein Newline ist, wird es in der Datei auf der Festplatte ergeanzt und man bekommt wieder einen Dialog "Die Datei wurde auf der Festplatte verändert..".

    Code Completion:
    Ich arbeite das erste Mal mit Code Completion, die auch Funktions- und Methodenparameter Anzeigt. Bei KDevelop geht es theoretisch auch, aber ich habe es nie über längere Zeit zum Laufen gebracht. Mit KDevelop hatte ich also nur die Wortergänzung (wie auch in OO Writer). Es ist wirklich faszinierend, ich muss viel seltener in die Dokumentation schauen.

    Dieses Feature arbeitet auch ohne Probleme mit Qt zusammen. Man kann in den Einstellungen die gewünschten Bibliotheken anklicken. Wenn man das gemacht hat, werden auch die Klassennamen anders hervorgehoben. Natürlich habe ich auch hier einige Kritikspunkte:
    -> Wenn ich eine Klasse von QWidget ableite und ein paar Methoden definiere, dann werden zuerst meine eigenen angezeigt und erst bei 5 Zeichen auch die von QWidget. Das gleiche gilt auch, wenn ich ein QLineEdit habe (von QWidget abgeleitet). Das ist manchmal sehr lästig.
    -> Anjuta differenziert nicht zwischen Membern der aktuellen Klasse und anderen im Projekt. Bei 'm_log' werden also alle Funktionen und Variablen, die mit 'm_log' anfangen, angezeigt (aus der aktuellen Datei und den per '#include ""' eigebundenen Dateien).
    -> Wenn ich einer Methode A ein Objekt oder das Ergebnis einer Methode B übergeben will, dann gibts keine Code Completition. Es wird nur der Funktionskopf der Methode A angezeigt.
    -> Die Liste mit den Ergänzungen bleibt "stehen". Damit meine ich folgendes: Ich tippe blub->methodeA und alles mit methodeA wird angezeigt, wenn ich das A wieder lösche, dann bleibt die Liste mit den methodeAxxx stehn, ich muss noch ein Zeichen löschen und neu tippen oder auf Strg Enter drücken. Das ist auch bisschen lästig.
    -> Anjuta achtet bei der Wortergänzung (OO mäßig) darauf, dass maximal 3 Sachen angezeigt werden (die Restlichen werden einfach abgeschnitten).
    -> '#Blub': Bei mir wird in der .cpp Datei bei '#' nur '#include' vorgeschlagen. Wenn ich ein '#ifdef' dazuschreibe, wird '#include #ifndef' vorgeschlagen. In der .h Datei wird aber '#ifndef #include' angezeigt (Reihenfolge beachten). Das ist eigentlich ziemlich praktisch. Leider werden bei '#include ""' keine Dateinamen ergänzt.
    [[screen]]

    Layoutmanager von Anjuta:
    Damit meine ich die Anordnung und Organization der Verschiedenen Bereiche wie zB Dateiliste, ToDoList, Compiler Fehler usw..
    Der Manager ist eigentlich ganz bequem, es gibt nur ein einziges Manko: Man kann Fenster nicht temporär verstecken. Zum Beispiel wird in vielen IDEs der Compiler Output versteckt, um mehr Code zu sehen.

    ToDoList:
    Sehr cooles Ding. In KDev hat man nur eine Zusammenfassung aller Doxygene @todos, das sind dann eher Einzeiler. Hier kann man auch ohne Probleme längere Texte Tippen und es z. B. als Notizblock missbrauchen.. Der Traum wäre eine Verbindung von beiden Systemen, also dass in die ToDo Liste automatisch die Doxygene ToDos aufgenommen werden. Auch hier hat sich wieder ein (unkritischer) Bug eingeschlichen, siehe Screenshot. Wenn man auf den Button für die Tageszeit nochmal klickt, dann verschwindet die Liste wieder. Aber der Bug ist cool, er überzeichnet sogar andere (KDE) Fenster und sieht echt fett aus (vor allem beim verschieben)..
    [[screen]]

    Ein paar andere Dinge, die mir noch aufgefallen sind:
    Wenn man eine neue Klasse mit dem Wizard erstellt, dann muss man selber die Zieldateien angeben. Wenn man die .h Datei angegeben hat, wird die Adresse für die Sourcedatei generiert. Leider mit .c und nicht mit .cpp. Ich habe später einfach den Pfad zur cpp Datei angegeben und Anjuta ergänzte die .h Datei. Beim generieren der C++ Datei wird kein relativer, sondern der absolute Pfad in das '#include "header.h"' eingefügt. Die Möglichkeiten des Generators sind auch begrenzt und man kann keinen Autor und keine E-Mail Adresse global festlegen.
    [[screen]]

    Ich finde, dass ein bisschen zu wenige Shortcuts angelegt wurden. Man kann das zwar alles selber machen, aber eine Vorbelegung wäre sinnvoll. Außerdem ist Strg + s (Shortcut für das Datei speichern) doppelt belegt. Wenn die Datei schon gespeichert ist, dann öffnet sich ein lästiges Fenster, um irgendeinen Valgrindlog zu speichern. Mit der Zeit gewöhnt man sich aber daran und schaut immer zuerst auf den Fenstertitel.

    Mit dem Symbolbrowser kann man schnell zu den Funktionen, Methoden und Attributen gelangen. Leider werden die Attribute und Methoden durcheinandergewürfelt und, wahrscheinlich durch einen Bug, ist es nicht möglich in der .cpp Datei zur Deklaration zu springen.
    [[Screen]]

    Man kann leider nicht zwei Anjuta Fenster gleichzeitig offen haben, zwei Projekte in einem Fenster öffnen geht auch nicht. Das braucht man zwar selten, sollte aber meines Erachtens auch möglich sein.



  • Hi,

    das mit dem "allgemeinen Blabla" formulierst du noch um? 😉

    aMan schrieb:

    -> Es fehlt eine autom. Klammer- und Anführungszeichensetzung (wenn man ( [ { " oder ' eintippt, wird nicht automatisch das zweite Zeichen angehängt.) Außerdem kann man Wörter nicht markieren und dann mit einem Tastendruck umklammern oder in Anführungszeichen setzen. [[[Damit meine ich Folgendes: Wenn man blub markiert und dann eine Klammer oder ein Anführungszeichen Tippt, wird blub automatisch umklammert oder in Anführungszeichen gesetzt (hier wird blub gelöscht und das entsprechende Zeichen geschrieben). ist das verstaendlich?]]]

    Ja, deine Erklärung ist verständlich, du kannst auch Parallelen zum C++ Board ziehen, da funktioniert das ja genauso.

    -> Wenn man ein ";" zwischen zwei Funktions- oder Methodenklammern schreibt, wird es nicht automatisch nach hinten verschoben. [[[Wenn man blub->blubern(param1, zwei, drei) schreibt, und der Kursor hinter "drei" steht, kann man ";" tippen. Das wird dann automatisch hinter die Klammer verschoben. Auch hier die Frage: Ist das klar?]]]

    Ja, aber ich würde schreiben:
    "Wenn man ein ";" zwischen zwei Funktions- oder Methodenklammern schreibt, wird es nicht automatisch ans Ende der Anweisung verschoben."
    Im Übrigen schreibt man Cursor mit C 😉

    Gefällt mir bisher schon ganz gut. 👍



  • Thx, werd das ausbessern..

    Grueße..
    aMan..



  • Bitte den Text 1024pixel-kompatibel machen. (ich weiß, ich nerve damit bei fast jedem Artikel) Aber die vielen ======= Zeichen sind hier die Übeltäter. Lässt sich kaum lesen.



  • Die === kommen natuerlich im finalen Text weg, sind ja auch nicht den Formatierungsvorschriften entsprechend.

    Ich hab es jetzt auch im Entwurf entfernt..

    Danke fuer den Tipp..

    Grueße..
    aMan..



  • Hi,

    bis wann kann ich mit dir rechnen? Evtl. schon dieses mal?

    Grüße

    GPC



  • Kaum, ich habe im Mom wenig zeit..
    Bis zum uebernaechsten Mal vielleicht..



  • oookay. Danke für die Rückmeldung 👍


Anmelden zum Antworten