Ziemlich genau vor zwei Jahren habe ich einige Artikel zur VST-Entwicklung mit C++ und JUCE geschrieben und kurze Zeit später aus Zeitmangel nicht fortgesetzt. Ein Jahr später schrieb ich wieder einen ähnlichen Artikel, diesmal ging es um die Entwicklung von eigenen Modulen für das modulare Synthesizer-System VCV Rack. Auch das habe ich nicht wirklich weiter verfolgt.

Vor ein paar Wochen habe ich angefangen Python zu lernen und das hat meine Programmierlust wieder so richtig geweckt. Als ich dann vor ein paar Tagen eine Email von einem Leser des Blogs bekam, der ein paar Fragen zum Thema VST-Programmierung mit C++ und JUCE hatte, war das Feuer wieder entfacht.

Diesen Motivationsschub möchte ich nutzen und wieder in die Programmierung mit C++ einsteigen. Allerdings möchte ich zunächst meine C++-Kenntnisse auffrischen und dafür diesen Blog nutzen. Ich lerne nun mal am besten, wenn ich mir Notizen mache … wieso dann nicht gleich im Netz?

Ich habe mir auch vorgenommen das Thema nicht gleich wieder nach ein paar Wochen abzuhaken. 😉 Zumindest eine halbe Stunde will ich jeden Tag lernen, programmieren und dazu Blogbeiträge schreiben, die eventuell sogar interessierten Lesern den Einstieg erleichtern.

Bücher

Solch eine Artikelserie in einem Blog kann sicherlich kein gutes Buch ersetzen und daher möchte ich heute damit beginnen ein paar Bücher vorzustellen, die mir damals im Studium geholfen haben. Es gibt drei Bücher, aus denen ich damals gelernt habe und die mir mehr als hilfreich waren den Stoff aus den Vorlesungen nochmal in Ruhe nachzuschlagen. Für das Selbststudium sind die Bücher mehr als zu empfehlen:

  • C++ Primer (S.B.Lippman, J.Lajoie, B.E.Moo) 5. Edition.
    Das Werk ist zwar von 2012 und die aktuellen Neuerungen von C++17 sind noch nicht berücksichtigt, aber das ist für den Neuling erstmal komplette Nebensache. Ja, das Buch ist in englischer Sprache. Es ist vielleicht nicht jedermanns Sache ein komplexes Thema, wie das Erlernen einer Programmiersprache in einer Zweitsprache anzugehen, aber es ist wirklich gut verständlich.
    (Übrigens: Das Buch ist nicht mit C++ Primer Plus zu verwechseln. Das Lehrbuch würde ich eher nicht empfehlen…)
  • C++ How To Program (P.Deitel, H.Deitel) 10. Edition.
    Ich sehe gerade, dass dieses Buch derzeit über 300,- € bei Amazon kostet … keine Ahnung, was da gerade los ist. Für den Preis würde ich es nicht unbedingt empfehlen. Falls man es irgendwo günstiger bekommt, ist es eine Bereicherung für das Lehrbuch-Regal.
  • Programming – Principles and Practice Using C++ (B. Stroustrup) 2. Edition.
    Das Buch gibt es auch als deutsche Ausgabe, die allerdings auch unbezahlbar ist im Moment. Naja, vielleicht ist C++ gerade sehr gefragt. In meinen Augen ist es zwar nicht das beste Lehrbuch, aber der Vater von C++ Bjarne Stroustrup hat es selbst geschrieben, also…

Software

Viel benötigt man zum Programmieren nicht. Einen Compiler / Interpreter und einen Texteditor. In C++ benötigt man einen Compiler. Dieser macht dann später aus dem Quellcode eine ausführbare Datei. Somit wird kein spezieller Interpreter der Programme mehr gebraucht. Es gibt mittlerweile verschiedene Compiler und je nach Betriebssystem können diese variieren.

Windows

Empfehlen würde ich zunächst eine etwas angenehmere Umgebung. Die Powershell unter Windows ist zwar gut, aber es fehlen noch ein paar Bequemlichkeiten, die man von Linux oder MacOS kennt, auf die ich unter Windows nicht verzichten möchte. Dazu zählt sicherlich ein Paketmanager, damit ich mir schnell etwas aus dem Terminal heraus installieren kann. Aus diesem Grund empfehle ich Scoop. Normalerweise muss man sich unter Windows immer alle Tools manuell im Browser zusammensuchen und installieren. Scoop hilft hier ungemein. Scoop ist ein Paketmanager, ähnlich wie Homebrew unter MacOS oder Apt / Pacman unter Linux. (Update: Chocolatey ist vielleicht sogar noch eine bessere Alternative!)

Um Scoop zu installieren, wechsel ich in die Powershell und gebe Folgendes ein:

PS> Set ExecutionPolicy RemoteSigned -scope CurrentUser
PS> iex (new-object net.webclient).downloadstring('https://get.scoop.sh')

Als nächstes installiere ich eine bessere Konsole. Da empfehle ich cmder. Diese Konsole ähnelt iterm unter Linux/MacOS. Diese kann ich nun bequem installieren:

PS> scoop install cmder

Nach der Installation starte ich cmder. (Falls jemand noch nie in einer Konsole gearbeitet hat, empfehle ich dieses Tutorial.) Ansonsten rufe ich jetzt erstmal die Settings von cmder auf und ändere Folgendes:

Jetzt installieren wir uns als nächstes Git. Git ist das meist genutzte Versionskontrollsystem und jeder Entwickler sollte es standardmäßig installiert haben. Außerdem wird es für einige weitere Pakete benötigt.

$> scoop install git

Jetzt können wir auch endlich den GNU C++ Compiler installieren:

$> scoop install gcc

Wie eingangs erwähnt benötigen wir einen guten Texteditor. Mit Textedit von Windows will sich keiner rumschlagen. Ich persönlich nutze Visual Studio Code, kann aber auch Atom empfehlen. Beide Editoren können bequem mit Scoop installiert werden:

$> scoop install visual-studio-code
$> scoop install atom
Visual Studio Code
Atom

Es ist auf jeden Fall eine gute Wahl, wenn man unter Windows das Visual Studio (Community Edition) installiert. Dies ist eine freie Entwicklungsumgebung (IDE) inkl. Compiler. Somit hätte man auch gleich einen Editor mitinstalliert.

Visual Studio C++ 2019 Community Edition

Ich halte es aber für übertrieben, wenn ein kompletter Neuling gleich eine ausgewachsene IDE zum Lernen benutzt. Aus diesem Grund empfehle ich zunächst erstmal den GNU C++ Compiler, der auf Linux Systemen auch der Standard ist und den wir uns bereits installiert haben. Warum? Weil man hiermit seine Programme händisch in der Kommandozeile kompilieren und ausführen kann. Am Anfang sollte man sich noch nicht zuviel Arbeit abnehmen lassen 😉

MacOS

Unter MacOS, wie auch unter Linux bekommt man in der Konsole bereits standardmäßig eine angenehme Umgebung für Entwickler. Empfehlen würde ich hier noch den Paketmanager Homebrew zu installieren und mit dessen Hilfe einen Texteditor und den GNU C++ Compiler.

Homebrew … (Quelle: brew.sh)

Außerdem ist es auch hier schon mal eine gute Idee die MacOS Entwicklungsumgebung XCode zu installieren. XCode ist quasi das Apple-Pendant zu Microsoft’s Visual Studio C++, eine vollständige IDE.

Linux

Für die Entwicklung ist Linux klar im Vorteil. Es gibt eine gute Konsole, einen Paketmanager und meistens ist der GNU C++ Compiler schon vorinstalliert. Falls nicht, kann man das problemlos über die Konsole nachholen. Falls jemand Linux User ist, brauche ich ihm wahrscheinlich nicht zu erklären wie das funktioniert.

Hallo Welt

Jetzt, wo wir unsere Entwicklungsumgebung eingerichtet haben, wird es ja mal Zeit die ersten Zeilen Code in C++ zu schreiben. Dazu starten wir unseren Editor, was man auch bequem über die Konsole machen kann. Vorher wäre es vielleicht noch ratsam, sich einen Ordner für die Entwicklung anzulegen. Ich habe mir dazu im Homeverzeichis einen Ordner namens .../dev eingerichtet und darin den Unterordner .../dev/cpp. Ich empfehle auf jeden Fall kurze Namen, damit man in der Konsole schnell drauf zugreifen kann. Ich lege mir die Ordner folgendermaßen an:

$> mkdir dev
$> cd dev
$> mkdir cpp
$> cd cpp

Jetzt starte ich den Texteditor:

$> code

Für jeden Programmieranfänger gehört es sich, als erstes immer das „Hallo Welt“ Programm zu schreiben (ungeschriebenes Programmierer Gesetz!). Dazu geben wir Folgendes in den Editor ein:

#include <iostream>

int main() {
    std::cout << "Hello, world!" << std::endl;
    return 0;
}

Jetzt sichere ich die Datei unter dem Namen hello.cpp in meinem eben angelegten dev/cpp Ordner. Als nächstes gehe ich wieder ins Terminal und kompiliere meine Quellcode-Datei mit dem C++ Compiler.

$> c++ hello.cpp

Normalerweise sollte der Vorgang nur eine Sekunde dauern und keine Fehlermeldungen ausgeben. Falls der Compiler Fehler meldet, muss der Code nochmal auf Tippfehler untersucht werden. Wenn ich nun in das Verzeichnis schaue…

$> ls 
   
  Verzeichnis: C:\Users\bwiec\dev\cpp

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       06.04.2020     06:30          56882 a.exe
-a----       06.04.2020     06:30            103 hello.cpp

… sehe ich die neue ausführbare Datei a.exe. Der Compiler legt automatisch eine neu kompilierte Datei mit dem Namen a.exe an. Immer! Falls ich der Datei einen eigenen Namen direkt beim Kompilieren mitgeben will, führe ich dem Befehl speziell einen Namen mit dem -o Attribut hinzu:

$> c++ hello.cpp -o hello

Jetzt sollte der Compiler die Datei hello.exe angelegt haben. Wenn ich diese starten will, gebe ich ein…

$> ./hello.exe
Hello, world!
$>

… und siehe da! Unser erstes Programm läuft.

Damit will ich den ersten Blogbeitrag hierzu auch beenden. Wir haben uns eine kleine Entwicklungsumgebung eingerichtet, einen Texteditor und einen C++ Compiler installiert und unser erstes Hello World Programm geschrieben, kompiliert und ausgeführt. Außerdem liegen drei neue Bücher in unserem Buchhandel-Warenkorb und warten auf ihre Bestellung.

Wie geht es weiter? Mein Plan ist es zunächst eine Reihe von Artikeln mit den Grundlagen von C++ zu schreiben. Im Anschluss würde ich gerne das VCV Rack Framework nutzen, um die ersten DSP Gehversuche zu starten und später dann mithilfe von JUCE in die Entwicklung von VST-Plugins einzusteigen. Das ist ein langer mühsamer Weg, also Hemdsärmel hochkrempeln…