kmyk-jikka / Jikka

an automated solver for problems of competitive programming
https://kmyk-jikka.github.io/Jikka/playground
Apache License 2.0
152 stars 11 forks source link

Haskell から C++ への変換時のロスをなくす #177

Closed kmyk closed 2 years ago

kmyk commented 2 years ago

Description / 説明

core 言語 / Haskell は純粋関数型プログラミング言語になっていて、C++ は通常の命令型言語です。 これらの間の相互変換の際に計算量が上がってしまうことがあるので、これをなんとかしたい。

Motivation / 動機

これのせいでバグりまくり計算量上がりまくりなので……

kmyk commented 2 years ago

実装の選択肢:

  1. 気合でこのまま進める
  2. core 言語を制限して、C++ に変換しやすいようなプログラムしか許さないようにする
    • Rust を参考に #87 を進める
  3. core 言語を拡張して、C++ に変換しやすいプログラムを書けるようにする
    • つまり core 言語を C++ に近づける。ref cell や monad などの副作用を扱えるなにかを取り入れて、部分的に命令型プログラミングできるようにする

(1.) はきびしい。https://github.com/kmyk/Jikka/issues/154#issuecomment-894584994 みたいに配列参照が入ってきたときにきれいに扱える気がしない。 (2.) は理想的だが難しい。配列の参照は線形型でも困難な課題。 (3.) は他よりは現実的だが汚い。プログラムの範囲を広げただけでは変換できないプログラムが消えるわけではない。

kmyk commented 2 years ago

できちゃった。方針 (1.) です