Technická poznámka pro zajímavost: nepokračování bloku kódu může způsobit nejen výjimka, ale i nekonečná rekurze. Např. Scala má typ `Nothing`, který se typicky používá jako typ výsledku funkce, která nikdy neskončí.
Znamená to, že to Scala překládá do jiného bajtkódu, než je volání funkce? Tj. neukládá se volání na zásobník a může to být skutečná nekonečná rekurze?
Asi narážíš na
def x: Nothing = x
Do bajtkódu jsem se nedíval. Zkusil jsem to pustit a zásobník nepřetéká. Scala v omezené míře (
https://www.scala-exercises.org/scala_tutorial/tail_recursion) převádí tail rekurzi na smyčku (dokonce je možné funkci přidat anotaci @tailrec, která říká, že u funkce se očekává, že je tail rekurzivní, a pokud by nebyla, je to compile error). V tomhle případě je ale překladač asi ještě chytřejší, protože při spuštění to ani nežere CPU, možná (ale opravdu jen spekuluju) prostě to vlákno zaparkuje a hotovo.