とりあえず tail recursion の最適化がなされるのかどうか確認するか。coalton がやってくれるならそうとう嬉しいんだけど……。
Conversation
Notices
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Friday, 31-Dec-2021 16:48:57 JST
きゅーけー
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Friday, 31-Dec-2021 16:53:34 JST
きゅーけー
あ、coalton 側で tail recursion の最適化はしてくれないっぽいな。普通に SB-KERNEL::CONTROL-STACK-EXHAUSTED って言われてしまった。下の関数に (neko 100000) って入れただけなのに。これは回避法の模索が要るな。Coalton が関数型言語である以上、処理系に依存してでも末尾再帰は最適化されて欲しいところがある。
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Friday, 31-Dec-2021 16:54:04 JST
きゅーけー
optimizeが指定できればいいんだけど。
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Friday, 31-Dec-2021 16:56:10 JST
きゅーけー
ただ理屈の上では coalton 側で末尾再帰の最適化程度は可能なはず。Common Lisp で末尾再帰の最適化ができないのは主にスペシャル変数とフックのせいだし(個人的な認識です)。
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Friday, 31-Dec-2021 16:57:34 JST
きゅーけー
スペシャル変数とフック以外のケースで末尾呼び出しが最適化された場合に関数の挙動が変わってしまうケースを知らない。
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Friday, 31-Dec-2021 16:59:08 JST
きゅーけー
理屈の上ではできそうなんで移植性のことを考えると、末尾再帰の最適化は Coalton 側が請け負った方が良い気がするな。
とりあえず、sbcl でどうしたら回避できるか確認するか。
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Friday, 31-Dec-2021 17:01:50 JST
きゅーけー
Optimize 設定しようぜみたいな話は書いてあるな。https://github.com/coalton-lang/coalton/blob/b36c38226dcd2a6da3b3146125930eb179baa583/docs/design-docs/function-calls.md
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Friday, 31-Dec-2021 17:02:14 JST
きゅーけー
Coatlon 使ってれば型安全なんだし、safety とか要らんくね。
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Friday, 31-Dec-2021 17:08:26 JST
きゅーけー
Coalton が末尾再帰の形式にしてくれない件は sbcl であれば (optimize (speed 3) (safety 0)) を指定することで回避できた。
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Friday, 31-Dec-2021 17:10:51 JST
きゅーけー
ただどういうときに末尾再帰してくれるかは処理系によって違うんで理想的には Coalton 側が末尾再帰形式を変換してくれた方が良い感じする。
しかし、そもそもカリー化されてるためにいっぱい呼び出しを実行しちゃう問題も処理系の最適化に任せる雰囲気っぽいんであんまり期待できないかもしれない。https://github.com/coalton-lang/coalton/blob/b36c38226dcd2a6da3b3146125930eb179baa583/docs/design-docs/function-calls.md
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Friday, 31-Dec-2021 17:14:58 JST
きゅーけー
ちゃんと宣言した型と違うのを返そうとすると型エラーになるな。素晴しすぎて泣けてくる。
-
きゅーけー (tojoqk@mastodon.tojo.tokyo)'s status on Friday, 31-Dec-2021 17:15:20 JST
きゅーけー
もちろん、実行時ではなくてコンパイル時に……。
-