Quiz

Fragen

  • Welche(n) Vorteil(e) hat der Stack gegenüber dem Heap?
  • Welche(n) Vorteil(e) hat der Heap gegenüber dem Stack?
  • Was ist ein Stack Overflow (nicht die Webseite)?
  • Was passiert bei der Zuweisung let b = a; , wenn a Owner von Stack-Speicher ist?
  • Was passiert bei der Zuweisung let b = a; , wenn a Owner von Stack- und Heap-Speicher ist?
  • Warum kann der Wert einer Variable nicht ausschließlich im Heap-Speicher leben?
  • Warum kann die Methode fn mymethod(self){} des Struktutypen struct MyStruct; nicht zwei Mal auf der gleichen Instanz aufgerufen werden?
  • Wie kann die Signatur von mymethod verändern, um mehrmaliges Aufrufen zu ermöglichen?
  • Verfügt die Programmiersprache C über das Konzept der Lifetimes?
  • Welche Möglichkeiten gibt es, den Compiler zum Übersetzen der folgenden Funktion zu bringen?
    #![allow(unused)]
    fn main() {
    fn f(s1: &str, s2: &str) -> &str { &"" }
    }
  • Warum hat bei der vorangegangen Funktion Lifetime-Elision nicht funktioniert?

Aufgabe

Schreibe eine Funktion, die das Skalarprodukt zwischen 2 dünnbesetzten Vektoren \( x, y\in\mathbb R^n \) berechnet. Hinweise:

  • Das Skalarprodukt zwischen \( x \) und \( y \) ist gegeben durch \( \sum_{i=1}^n x_iy_i \).
  • Ein Vektor heißt dünnbesetzt (engl. sparse), wenn sehr viele seiner Elemente 0 sind.
  • Wie kann man einen dünnbesetzten Vektor effizient im Speicher halten?

Teste die Funktion für ein beliebiges paar Vektoren und \( n=10^{10} \).