Aus Linux-Magazin 09/2007

Suns Entwicklungsumgebung Studio unter Linux

Die Firma Sun bietet für ihr Unix-Derivat Solaris seit Langem eine eigene Entwicklungsumgebung mit C-, C++- und Fortan-Compiler an. Das Sun Studio genannte Paket steht nun auch für Linux kostenlos zur Verfügung. Die auf Netbeans basierende IDE unterstützt sogar die GNU-Werkzeuge.

Software-Entwicklung in den klassischen Unix-Sprachen C und C++ ist unter Linux ohne die GNU Compiler Collection fast undenkbar. Der Linux-Kernel und der GNU-Compiler sind praktisch verheiratet, das freie Betriebssystem wäre ohne den quelloffenen C-Compiler nicht möglich gewesen. Doch auch andere Mütter haben schöne Töchter, die Firma Sun entwickelt seit den 80er Jahren Werkzeuge für das hauseigenen Unix. Das Sun-Studio-Paket umfasst den kompletten Werkzeugkasten: Compiler, Debugger und Profiler für die Sprachen C, C++ und Fortran, dazu eine grafische Entwicklungsumgebung.

Members only

Im Rahmen seines Sun-Studio-Express-Programms bietet der Hersteller auch einen Ausblick auf künftige Versionen, hier findet sich zurzeit auch die Linux-Ausführung. Zugangsvoraussetzung ist die kostenlose Mitgliedschaft im Sun Developer Network. Für Mitglieder bietet Sun neben kostenloser Software auch Entwicklerforen, Hosting eigener Projekte und so fort.

Der folgende Test basiert auf den Versionen vom Dezember 2006 und Februar 2007. Die Anforderung für die Installation sind moderat: neben einem Linux-Kernel 2.6 nur die Libc in Version 2.3.3 oder neuer. Die IDE und der Installer basieren auf Java, daher ist ein JDK in Version 5 oder 6 notwendig. Für die gesamte Installation sind zirka 700 MByte Plattenplatz zu veranschlagen. Die komplette Software findet sich unter [1] als Tar-Archiv oder RPM-basierter Installer. Das Tar-Archiv enthält drei Verzeichnisse mit den Werkzeugen, Bibliotheken und der Dokumentation einer lauffähigen Installation.

Die Umgebungsvariablen für die Programme und Manual Pages sind von Hand entsprechend der Installation zu erweitern, sonst sind zum Aufruf absolute Pfade erforderlich. Neben den Manpages findet sich unter »/opt/sun/sunstudio0702/sunstudio12/docs« eine umfangreiche Dokumentation als HTML. Wer vor der Installation einen Blick darauf werfen möchte, findet sie ebenfalls auf der Compiler-Homepage.

Brautschau

Die Programme liegen nach der Installation im Verzeichnis »sunstudio12/bin«, über 60 verschiedene Werkzeuge bieten hier ihre Dienste an. Zuerst natürlich die Compiler für C (Standard 1989 und 1999), C++ (Standard 1998) und Fortran (Standard 1977, 1990 und 1995). Dazu kommen noch Debugger und Profiler zur Fehlersuche in diesen drei Sprachen. Zur Fehlervermeidung in Multithreading-Programmen sucht der Thread-Analyzer »tha« im Quelltext nach Race Conditions und Deadlocks. Der Code-Analyzer »lock_lint« ist hingegen noch nicht nach Linux portiert.

Als Build-Werkzeug dient Suns Distributed Make »dmake«, es kann den Übersetzungsvorgang automatisch parallelisieren. Zur besseren Unterscheidung von den GNU Tools tragen alle Werkzeuge die Vorsilbe »sun« im Namen. Der Sun-Compiler ist also mit »suncc« ansprechbar, der GCC wie gehabt mit »cc«.

Neben den Werkzeugen findet sich im Verzeichnis »lib« noch eine Reihe von Bibliotheken. Besonders erwähnenswert sind die OpenMP-Bibliothek [2] zur Programmierung nebenläufiger Programme und die Sun Performance Library. Sie enthält hochperformante Bibliotheksfunktionen für typische Numerikaufgaben, darunter die bekannten Lapack- (Vektorrechnung) und Blas-Routinen [3] (Lösung linearer Gleichungssysteme). Beide Bibliotheken lassen sich mit allen drei Sprachen nutzen.

Benchmarks

Zum Test der Performance mussten sich GNU- und Sun-Compiler jeweils dem gleichen Benchmark stellen. Die C-Compiler traten beim Scimark [4] von Roldan Pozo und Bruce Miller gegeneinander an. Er enthält typische Numerikaufgaben wie Fast Fourier Transformation und Matrix-Multiplikationen. Die Ergebnisse finden sich in Abbildung 1, der Sun-Compiler hat hier gegenüber dem GCC immer die Nase vorne. Im Test kamen beim GCC- wie beim Sun-Compiler jeweils nur die einfache Optimierung mit »-O2« (GCC) beziehungsweise »-fast« (Sun) zum Einsatz, für mehrtägiges Ausprobieren der Compiler-Optionen fehlt auch im echten Leben meist die Zeit.

Abbildung 1: Der Scimark-Benchmark zeigt die Stärken und Schwächen der getesteten Compiler für C-Programme. Größere Werte sind besser.

Abbildung 1: Der Scimark-Benchmark zeigt die Stärken und Schwächen der getesteten Compiler für C-Programme. Größere Werte sind besser.

Zunächst drohte das Benchmarking bei den arithmetischen Tests jedoch zu scheitern: Der eigentliche Testcode wurde innerhalb einer einfachen Schleife ausgeführt, deren Ergebnisse er allerdings nicht weiter verwendete. Konsequenterweise eliminiert der Sun-Compiler die ganze Schleife inklusive Zähler komplett und führt damit den Benchmark ad absurdum.

Durch eine kleine Änderung lief der Test wie gedacht und zeigte die bessere Performance des Sun-Compilers. Für C++ kam Keith Leas Java/C++-Benchmark [5] zum Einsatz, in zwölf Disziplinen traten der GNU- und der Sun-Compiler gegeneinander an. Das Ergebnis ist noch extremer als beim C-Benchmark: Der Sun-Compiler produziert – wie in Abbildung 2 zu sehen – teilweise mehr als dreimal so schnellen Code.

Abbildung 2: Für C++ diente der Benchmark von Keith Lea als Messlatte. Die mit dem Sun-Compiler übersetzten Programme sind schneller (kleinere Werte).

Abbildung 2: Für C++ diente der Benchmark von Keith Lea als Messlatte. Die mit dem Sun-Compiler übersetzten Programme sind schneller (kleinere Werte).

Vor allem bei numerisch intensiven Berechnungen wie Klimamodellen oder Strukturverhalten ist Fortran nach wie vor erste Wahl. Die von dem erst kürzlich verstorben John Backus entwickelte Sprache ermöglicht es dem Anwender, seine Berechnungen relativ einfach in Quelltext umzusetzen (daher der Name Formula Translation).

Für mathematische Standardprobleme wie das Lösen linearer Gleichungssysteme, Eigenwerte oder Differentialgleichungen stehen für Fortran hochwertige und freie Bibliotheken bereit. Der Sun-Compiler unterstützt neben dem klassischen Fortran 77 auch die neueren, objektorientierten Varianten Fortran 90 und 95. Beim Test kamen Naoki Tajimas [6] Fmark und der Fortran-95-Test von Iris [7] zum Einsatz.

Bei beiden zeigt sich (Abbildung 3) die bessere Performance des Sun-Compilers, aber mit einigen Ausrutschern. Insbesondere bei Tests mit den optimierten BLAS-Routinen aus der Sun Performance Library laufen die Programme aus dem Sun-Compiler jedoch fast doppelt so schnell wie die mit dem GNU-Fortran-Compiler entstandenen Programme.

Abbildung 3: Beim Fortran-Benchmark liegt der Sun-Compiler dank eigener Performance Library vorn.

Abbildung 3: Beim Fortran-Benchmark liegt der Sun-Compiler dank eigener Performance Library vorn.

Drum prüfe …

Ein solcher Performance-Schub auf gleicher Hardware macht einen Wechsel zu den Sun-Compilern höchst attraktiv. Allerdings ist der Sprung in eine andere Systemwelt ähnlich wie bei den Compilern von Intel [8] oder Absoft [9] nicht umsonst. Schon wegen anderer Compiler-Optionen können die Sun-Compiler die GNU-Pendants nicht restlos ersetzen. Es sind immer mehr oder weniger große Änderungen im Makefile nötig.

Stehen alle Compilerflags an einer Stelle, dauert das zwar nur wenige Minuten. Nutzt bestehender Quelltext hingegenen einen Zoo vom Makefiles, eventuell noch durch »autoconfigure« oder »cmake« erstellt, kann die Anpassung an die neue Kombination Linux und Sun-Compiler schon mal einen ganzen Tag oder mehr beanspruchen.

Anders als beim Intel-Compiler muss der Tester in Autoconfigure-Dateien nicht bei null anfangen. Die Kombination Solaris mit Sun-Compiler wird in den Autofconf-Dateien meist schon unterstützt und lässt sich für Linux mit Sun-Compiler anpassen. Das erspart die aufwändige Suche nach geeigneten Optionen. Wenn Sun eine kleines Shellskript mitliefern würde, das die Optionen vom GCC auf den Sun-Compiler umsetzt, wäre auch diese Arbeit überflüssig.

Ist das Anpassen mehrerer Compiler-Optionen ein einmaliger Aufwand, bleibt das Mischen von Binaries der GNU- und Sun-Compiler ein permanentes Problem. Der C-Compiler ist die positive Ausnahme, er erzeugt zum GCC kompatiblen Binärcode. Das gilt allerdings nicht für C++ und Fortran, hier lautet die Entscheidung entweder ganz oder gar nicht. Für echte Numeriksoftware ist das ein lästiges, aber lösbares Problem. Ein KDE-Programm dagegen erfordert ein komplett mit dem Sun-Compiler übersetztes KDE.

Zubehör

Neben den Compilern gehören noch weitere Werkzeuge wie Debugger, Assembler und Profiler zum Sun Studio. Besonders interessant ist der Profiler, denn er unterstützt auch mit den GNU-Compilern übersetzte Programme. Das Kompilieren mit den GNU Tools erfordert die Optionen »-gstabs+« und »-g«, das erzeugte Programm enthält dann die notwendigen Informationen. Am einfachsten lässt sich das Programm vom Sun-Kommando »collect« aufrufen:

collect -o profiler.er a.out

Während der Laufzeit von »a.out« sammelt der Kollektor Informationen über Aufrufe sowie benötigte Zeiten und schreibt sie in das Verzeichnis »profiler.er«. Der grafische Analyzer kann die gesammelten Daten anzeigen:

analyzer profiler.er

Die grafische Oberfläche bietet unterschiedliche Ansichten auf die gesammelten Daten. Unter »Functions« findet sich eine Auflistung aller aufgerufenen Methoden, der benötigten Zeit und der Memoryleaks. In der Ansicht »Source« geschieht dies gleich mit dem passenden Quelltext, dazu kommen weitere Ansichten wie der Call-Stack, eine Leak-Liste oder die Assembler-Ebene.

Netbeans-IDE

Ausgefeilte IDEs mit Syntax Highlighting, Code Completion und integriertem Build-Management sind mittlerweile Standard. Sun setzt für alle Sprachen auf die grafische Netbeans-Umgebung ([10], Abbildung 4). Die Entwicklungsplattform unterstützt durch Plugins die Entwicklung von einfachen Web- und Handy-Anwendungen bis hin zum J2EE-Bereich. Aber auch für die Welt jenseits von Java bietet Netbeans Lösungen.

Abbildung 4: Der Analyzer erleichtert die Suche nach Performanceproblemen und Memoryleaks.

Abbildung 4: Der Analyzer erleichtert die Suche nach Performanceproblemen und Memoryleaks.

Für C und C++ entwickelt Sun das C/C++-Pack, es unterstützt neben den hauseigenen Compilern auch die GNU-Werkzeuge. Damit steht ähnlich wie mit dem Eclipse CDT [11] eine plattformunabhängige Entwicklungsumgebung bereit, die außer unter Linux auch mit Solaris und Windows (mit Cygwin und Mingw-Compiler) funktioniert.

Anders als die Compiler ist die Netbeans-Erweiterung nicht nur kostenlose, sondern freie Software. Sie ist im Sun Studio als IDE enthalten, findet sich aber auch direkt auf der Netbeans-Homepage. Netbeans muss als Java-IDE installiert sein, außerdem das C/C++-Pack. Voraussetzung ist wie beim Studio-Express-Paket ein Java Developer Kit (JDK) in Version 1.5 oder neuer. Der Vorteil der Netbeans-Basis ist klar: Viele Komponenten wie Dateibrowser oder CVS/Subversion-Integration liegen bereits vor, das C/C++-Pack muss lediglich sprachspezifische Dinge abdecken.

Nach dem Starten der Anwendung enthält die IDE im positiven Sinn keine Überraschungen, wer bereits mit anderen IDEs oder Netbeans für Java gearbeitet hat, kann sofort und ohne die umfangreiche Dokumentation starten. Wie die meisten IDEs verwaltet Netbeans die Dateien in Projekten. Der Entwickler erzeugt sie mit »File | New Project«. Hier stehen mehrere Projektarten für Anwendungen und Bibliotheken bereit. Dazu kommen fertige Beispiele, die einen schnellen Start in eigene Entwicklungsprojekte ermöglichen.

Für den Build-Prozess verwendet die IDE das bewährte Make, erstellt aber selbst die Makefiles. Compiler-Optionen, Headerdateien und Bibliotheken stellt der Anwender zentral im Properties-Dialog des Projektknotens ein (Abbildung 5). Die automatisch erstellten Makefiles sind bei Bedarf durch eigene Targets (für Lex, Yacc oder IDL) erweiter- und auch von der Kommandozeile aufrufbar.

Abbildung 5: Der Dialog für die Projekt-Properties bietet gute Übersicht, das Makefile wird automatisch geändert.

Abbildung 5: Der Dialog für die Projekt-Properties bietet gute Übersicht, das Makefile wird automatisch geändert.

Das Makefile-basierte System importiert auf Wunsch auch bereits bestehende Quellen und Makefiles. Doch fehlen dann IDE-typische Targets wie das Kompilieren der aktuell editierten Datei. Wer den Komfort der IDE nutzen möchte, aber das existierende Makefile nicht ändern will, legt ein Netbeans-Projekt an und verweist mit »Add existing Items« auf die bestehenden Quellen.

Editierhilfen

Für die Header-, die Implementationsdatei sowie Makefiles steht jeweils ein passender Editor bereit. Er bietet Syntax Highlighting, die Autocompletion hilft bei der Suche nach der richtigen Funktion und ihrer Syntax. Das gilt nicht nur für Befehle aus der normalen C-Bibliothek, der Editor berücksichtigt auch Erweiterungen wie OpenGL oder eigene Headerdateien. Dazu muss der Anwender sie nur bei den Projekteigenschaften entsprechend angeben. Fehler im Quelltext wie falsche Include-Dateien markiert der Editor, ein Tooltip auf der Markierung verrät die Fehlerursache.

Gerade bei großen Dateien geht der Überblick leicht verloren, die Einarbeitung in fremden Quelltext kostet dann sehr viel Zeit. Ein einfaches Mittel dagegen ist das Code Folding, bei dem der Benutzer einzelne oder alle Kommandorümpfe zusammenklappt. Alternativ hat jeder Editor eine Combobox, mit der einzelne Funktionen oder Variablendeklaration direkt ansteuerbar sind. Alle Symbole wie Klassen, Methoden und Variablen der geöffneten Projekte sind jederzeit in einer weiteren Ansicht (Class View) verfügbar, ein Klick im Baum führt zur gesuchten Datei.

Die IDE kann jede Datei einzeln kompilieren. Fehler listet sie im Ausgabefenster übersichtlich auf, ein Klick führt zur entsprechenden Stelle im Quelltext. Nach dem erfolgreichen Kompilieren und Linken startet [F6] das Programm; Eingabewerte und das Startverzeichnis stehen in den Projekteigenschaften.

Gerade bei C und C++ sind Laufzeitfehler ein echtes Problem. Während neuere Sprachen wie Java oder Python mehr oder minder ausführliche Fehlerbeschreibungen hinterlassen, geht bei den Klassikern die Suche im Pointer-Nirwana los. Generell ist dies eine sehr unproduktive Tätigkeit, die dafür aufgewendeten Zeiten treiben jedem Projektmanager Tränen in die Augen.

Logging-Bibliotheken wie Log4cxx [12] helfen dabei, das Problem einzukreisen, aber irgendwann hilft nur noch der Debugger weiter. An den interessanten Stellen kann der Fehlersuchende im Editor entsprechende Breakpoints deklarieren und das Programm Schritt für Schritt durchlaufen. Den Call-Stack und die aktuellen Variablenwerte zeigt der Debugger dabei immer an; so lassen sich die Schuldigen schnell ermitteln.

Tag der Entscheidung

Insgesamt ist Sun Studio eine echte Bereicherung für die Linux-Werkzeugkiste. Zuerst natürlich die Compiler, die sich durch gegenüber den GNU-Compilern teilweise wesentlich bessere Performance auszeichnen. Wegen nötiger Änderungen am Makefile und der Inkompatibilitäten des Binärcode ist der Wechsel zu Sun aber nicht problemlos. Am einfachsten ist die Entscheidung bei reinem C, hier kommen die Performancevorteile durch OpenMP und die Sun-Performance-Bibliothek voll zum Tragen.

Das gilt mit Einschränkungen auch für das Numerik-lastige Fortran. Für die erheblich bessere Performance kompiliert man eine Hilfsbibliothek gegebenenfalls eben neu. Am schwierigsten ist die Entscheidung beim C++-Compiler. Hier winkt zwar ebenfalls ein schöner Performancegewinn, aber bereits vorhandene Bibliotheken müssen neu übersetzt werden. Die Verwendung umfangreicher Bibliotheksfamilien wie KDE bedeutet also großen Aufwand.

Uneingeschränkt empfehlenswert sind dagegen der Profiler und die IDE. Mit den beiden Profilerwerkzeugen »collect« und »analyze« kann der Entwickler das Laufzeitverhalten seines Code untersuchen. Dabei ist es egal, ob der Sun- oder der GNU-Compiler das Programm übersetzt hat. Ebenso neutral verhält sich die IDE, die ohnehin zuerst für die GNU-Werkzeuge entwickelt wurde. Damit steht eine mächtige IDE für C und C++ bereit, die sich hinter Produkten wie Visual Studio nicht zu verstecken braucht. Angenehm sind auch die breite Unterstützung weiterer Sprachen in derselben IDE und die weitgehend gleichen Shortcuts für C, C++, Java und Ruby. (ofr)

Infos

[1] Sun Studio: [http://developers.sun.com/sunstudio]

[2] OpenMP: Linux-Magazin 4/07, S. 42

[3] Netlib: [http://www.netlib.org]

[4] Scimark: [http://math.nist.gov/scimark2]

[5] Keith Leas Benchmarks: [http://kano.net/javabench]

[6] Fmark: [http://serv.apphy.fukui-u.ac.jp/~tajima/bench/index_e.html]

[7] Low level bench tests of Fortran 95: [http://www.idris.fr/data/publications/F95/test_F95_english.html]

[8] Intel-Compiler: [http://www.intel.com/cd/software/products/asmo-na/eng/compilers/284264.htm]

[9] Absoft-Compiler: [http://www.absoft.com]

[10] Netbeans: [http://www.netbeans.org]

[11] Eclipse-CDT: Linux-Magazin 4/07, S. 44

[12] Log4cxx: [http://logging.apache.org/log4cxx]

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 4 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben