2
1

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 5 years have passed since last update.

CrystalAdvent Calendar 2018

Day 17

CrystalとServer-Sent Eventsと末尾再帰

Posted at

この記事は Crystal Advent Calendar 2018 の17日目の記事です。

この度、CrystalでServer-Sent Eventsを使うためのライブラリ sse.cr を書きました!

標準ライブラリで提供されているHTTP::WebSocketと同じような使い方ができるようになっています。

このライブラリを書く際、サーバから延々とプッシュされてくるイベントを末尾再帰を使って処理するよう実装していたのですが、ある程度の回数を実行したところで:point_down:のようなエラーが...

Stack overflow (e.g., infinite or very deep recursion)
[0x102d15077] *CallStack::print_backtrace:URI +39
[0x102d15020] __crystal_sigfault_handler +96
[0x7fff7d40cb3d] _sigtramp +29
[0x102d15038] *run<URI>:Nil +8
[0x102d1503c] *run<URI>:Nil +12 (524147 times)
[0x102cf9f81] __crystal_main +4593
[0x102cfda2b] main +43

結局、末尾再帰を使って実装していた部分をループに書き換えたのですが、CrystalのIssuesを見るかぎり、末尾再帰の最適化はCrystalでは実装されてない(される予定もない)ようです。

意外でした。

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?