21
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ElixirAdvent Calendar 2022

Day 18

Elixirの無限ループは、なぜStack overflowしないのか?

Last updated at Posted at 2022-12-17

Elixirで無限ループしたい時、どうしますか?

たぶん、再帰で実現することになると思います。

この記事を書いた
LEDの点滅では、点滅を無限に繰り返したかったので、次のようにしています。

  defp toggle_pin_forever(output_gpio) do
    GPIO.write(output_gpio, 1)
    GPIO.write(output_gpio, 0)
    toggle_pin_forever(output_gpio)
  end

C言語だったら、これってやっちゃダメな典型で、すぐにスタックオーバフローします。
この無限ループって、スタックオーバフローしないのか?
Elixirは関数呼び出しの時にスタック不要な仕組みになってるのか?
と疑問がいっぱい。

末尾再帰の場合はスタックを消費しない仕組みになってるからでした。

ああ。なるほど。これで安心して無限ループできます。

この記事に、Stack overflowするElixirのプログラムをつけようと思ったんですが、発生させられませんでした。
発生できたら、追記します!

末尾再帰を使って最適化する記事があったので、参考にリンクを付けておきます。

参考
https://qiita.com/gumiTECH/items/def3ab5797266bb6db41

21
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?