////////////////////////////////////////////////////////// // --- sclang * Programmieren von Klassen vs. dynamische Programmierung * SC Klassenbibliothek (implementiert in sclang) --> Wird beim Start geladen. * Quarks (SuperCollider Erweiterungssystem) * Language Primitives in C/C++ implementiert --> Leider kein Plugin-System! * Dynamische Programmierung --> Code wird an Interpreter zur AusfŸhrung geschickt. ////////////////////////////////////////////////////////// // --- Umfangreiche Standardbibliothek * Collections, Strings, etc. * GUI (via Qt) * MIDI, HID, OSC * Abstraktionen fŸr scsynth, Busse, Gruppen, UGens, etc. * Musikalische Objekte (z.B. Skalen) ////////////////////////////////////////////////////////// // --- Spracheigenschaften * Objektorientiert --> Stark an Smalltalk angelehnt * Syntaktische Elemente v.a. aus C, C++, Java, Smalltalk und Matlab * Bytecode Interpreter mit Realtime Garbage Collector * Dynamische Typisierung (Duck-Typing) * Funktionen sind first-class Objekte ////////////////////////////////////////////////////////// // --- Objekte und Messages ---> Drei verschiedene Arten Methoden aufzurufen: * empfŠnger.methode([argumente]) * methode(empfŠnger, [argumente]) * empfŠnger methode: argument ////////////////////////////////////////////////////////// // --- Variablen und Scopes * Interpreter Variablen (a-z) (Global) * (Lokale) Variablen, deklariert mit var * Umgebungsvariablen mit ~ ////////////////////////////////////////////////////////// // Funktionen und Closures * Funktionen in {Ê} * Funktionen sind first-class Objekte. * Parameter (mit Standardwerten) mit arg SchlŸsselwort oder zwischen | | * Ergebnis des letzen Ausdrucks wird zurŸckgegeben --> Kein explizites return * Funktionen konservieren Variablen des Entstehungskontexts und bilden Closures ////////////////////////////////////////////////////////// // --- Kontrollstrukturen * Prinzipiell auch als Methodenaufrufe realisiert. * Beispiel: if Methode von Booleans, 2 Funktionen als Argumente * Alle klassischen Strukturen vorhanden (if, for, while, switch) * Anstatt for-Schleifen oftmals do-Schleife * collect sammelt Ergebnisse aller SchleifendurchlŠufe und baut eine Liste ////////////////////////////////////////////////////////// // --- Collections und Events * Viele Collections in Standardbibliothek * Zugriff auf Elemente mit array[n], ZŠhlung beginnt bei 0 * Listen-Literale mit eckigen Klammern (wie z.B. in Python) * Viele Operatoren kšnnen auch auf Listen ausgefŸhrt werden * Dictionaries * Events ermšglichen schicke Notation, Šhnlich wie bei JSON ////////////////////////////////////////////////////////// // --- Koroutinen, Patterns und Streams * Keine echten Threads in sclang, nur Koroutinen --> Laufen nie wirklich gleichzeitig ab --> Programmierung wird einfacher * Einfache Erzeugung durch Function:fork; Unterbrechung durch Number:wait * Erzeugen von Streams (Generatorfunktionen), RŸckgabe mit yield * Patterns vereinfachen das Erzeugen von Streams