Klausurfragen Flashcards
3 Arten von Programmierparadigmen
- Objektorientiertes Programmierung
- Funktionale Programmierung
Älteste Programmiersprache?
Shell (sh), ist von 1971.
Bash folgte 1979.
Ist ein Command Line User Interface für UNIX.
Was ist statische Typisierung?
Typ einer Variable wird deklariert
Typprüfung erfolgt zur Compile-Zeit
Dynamische Typisierung
Variablen haben keine Typen. Die gespeicherten Werte haben Typen.
Die Typprüfung erfolgt zur Laufzeit.
Strong vs. weak Typing
Strong und Weak sind nicht fix definiert, sondern werden zum Vergleich zwischen Sprachen verwendet. Es geht dabei um die Fragen: Wie streng unterscheidet die Sprache die Typen? Welche Datentypen können ineinander umgewandelt werden? Erlaubt sie implizite Typumwandlungen? Erlaubt sie unsichere Typumwandlungen, bei denen z. B. Werte verloren gehen können?
In einer schwach typisierten Sprache hängt der Typ eines Wertes davon ab, wie er verwendet wird. Ich kann z. B. eine Zeichenkette an den Additionsoperator übergeben und sie wird automatisch als Zahl interpretiert oder einen Fehler verursachen, wenn der Inhalt der Zeichenkette nicht in eine Zahl übersetzt werden kann.
In einer stark typisierten Sprache ist ein Wert einem Typ zugewiesen und dieser Typ kann sich nicht ändern.
Was ist Typinferenz?
Programmierer gibt (fast) keine explizite Typisierung von Objekten an.
Compiler leitet gewünschten Operandentyp aus Operatoren und Inferenzregeln ab, meldet ggf. Typfehler
Was ist lexikalisches / statisches Scoping?
Der umgebende Quelltext bestimmt die Bindung.
Im Fall einer lexikalischen Bindung sind die Bindungen für einen ganzen Block immer die gleichen, weil sie allein durch die Blockstruktur vorgegeben sind. Man kann daher allein durch Analyse des Quelltextes einer Funktion verstehen, wie sich die Funktion verhält. Dieses Konzept unterstützt daher modulare Programmierung.
Was ist dynamisches Scoping?
Die Ausführungsschicht zur Laufzeit des Programms bestimmt die Bindung.
Was kann ein Endlicher Automat?
Können Sprachen erkennen mit unendlich vielen Wörtern
- Has some number of states
- Has a start state and at least one end state
- Accepts input that advances it through its states
- Can be Deterministic (DFA) or Non-Deterministic (NFA)
Was kann ein Endlicher Automat nicht?
→ Erkennen ob die Klammerung passt
→ Alphabet ist { Klammerauf, Klammerzu }
→ Korrekter string ( ( ) ) ( ) )
→ Falscher string ( ( )
Erkläre den regulären Ausdruck ab(a+b)*
Das Alphabet sei { a, b }
soll alle Strings akzeptieren, die mit ab beginnen.
ab heißt a gefolgt von b
b(a+b) heißt, b ist gefolgt von einem a oder einem b
(a + b) heißt entweder a oder b
(a + b)* heißt beliebig viele a’s und beliebig viele b’s am Ende (also zb abbbbaaaba oder abbbbbbbbaaaa oder aaaaaaaaaaa oder bbbbbbbbbbb)
Kann man mit einem regulären Ausdruck HTML parsen?
Nein, HTML kann nicht von Regex geparsed werden
→ zu schwach bei Verschachtelungen
→ endlicher Automat oder Regex reicht nicht aus
→ Parser wird benötigt
Was ist ein „Abstract Syntax Tree“?
Hierarchische Struktur / Baumstruktur der abstrakten syntaktischen Struktur von Quellcode, der in einer Programmiersprache geschrieben wurde.
Wer erzeugt den AST?
Parser während des Kompilierens
Wo wird Parsing verwendet? Nenne drei Anwendungsfälle
CSS-Browser
XML-Parser
URI-Parser
Logdatei Parser
Compilieren
Was macht ein Parser? Was ist sein Input, was sein Output?
Ein Parser dazu nimmt einen Text und einen Regelsatz (=Grammatik) als Input, und analysiert den Text nach der Grammatik. Wenn das klappt ist das Ergebnis ein Syntaxbaum (AST), welcher die Hierarchie zwischen den Elementen ausdrückt. Wenn es nicht klappt ist der Output eine Fehlermeldung.
Was macht ein Transpiler? Was ist sein Input, was sein Output?
Dabei handelt es sich um einen speziellen Compiler, der Quellcode einer Programmiersprache in den Quellcode einer anderen Programmiersprache übersetzt („Code-Transformation“)
Was macht ein Linter? Was ist sein Input, was sein Output?
Ein Linter ist ein statisches Code-Analyse-Tool, das Programmierfehler, Bugs, stilistische Fehler und verdächtige Konstrukte markiert. Input: Code, Output: Errors (?)
Welche zentralen Funktionen einer Programmiersprache sind bis heute nicht direkt in Elm implementiert, sondern werden über Libraries gelöst?
Fangfrage, Elm beinhaltet direkt alles was man so braucht
Was sind die Besonderheiten von Elm?
Keine Laufzeitfehler
Freundliche Fehlermeldungen
Zuverlässiges Refactoring
Automatische semantische Versionierung von Elm Paketen
Was ist die Architektur von Elm?
init:Model
=> view: Model -> Html Msg
=> update: Msg -> Model -> Model
Erkläre asynchrone Konzepte (2) am Beispiel von Dart.
1) Futures: ähnlich zu JS Promises.
Future = Ereignis, das nicht sofort abgeschlossen wird.
Wo eine normale Funktion das Ergebnis zurückgeben würde, gibt eine asynchrone Funktion ein Future zurück.
2) Streams: sind wie Futures, nur ist es nicht 1 Wert oder Error der zurückgegeben wird, sondern eine Sequenz davon.
Streams sind also eine Reihe von asynchronen Events / asynchrone Sequenz von Daten.