Skip to content

Rime version 3 #71

@not522

Description

@not522

Rimeの設計を大幅に見直す検討をしています。特にアーキテクチャが複雑すぎて機能追加が難しくなっている点を解決したいと思っています。
参照 : icpc-jag/rime-plus#9

(参考)
最近よく使われている競プロツール

他の作問支援ツール

以下の方針は個人的に考えているもので、開発陣の総意ではありません。コメントで自由に意見をください。


まず、rime-plusでの議論に沿って個人的に考えている解決案を書きます。

開発時とは作問事情が大きく変わっていてますますいろいろな機能を追加する必要がある

Rime+でほぼカバーされているのでは?これ以上特殊なジャッジに対応する必要はなさそう。

メタプログラミングをかなり濫用しているのでアーキテクチャが複雑すぎる

これはその通りでもっとシンプルに書き直した方が良い。とはいえ並列実行をするためにはそれなりに工夫が必要。

Python 2 なので Python 3 への移行が必要

移行済み。

config が JSON とかではなく生 python なのでエディタとか周辺ツールの整備がやりづらい

JSON等に移行しましょう。TOMLも良い感じに見えます。

環境合わせ面倒なのでdockerとかクラウドとかと連携したい

GitHub Actionsで完結するようにすると良い感じになるはず。

静的型くれ

Pythonでも型を書けるようになったので多少はマシな状況になった?

コンパイラを揃える話

GitHub Actionsで緩和されるはず。

リアクティブとか部分点ジャッジ

とりあえずRime+で十分?

配布・非Linux

最近はWSLも出たので現状のままでも大きな問題はないはず。

ビルドシステムの話

makeに任せてしまうというのは並列実行を考えると魅力的ですが、可読性が落ちるのではと懸念しています。


上記を踏まえて、以下のような方針を検討しています。

  • 言語はPythonのまま
  • Rime+を本体に統合
  • plugin機能を廃止
  • 設定ファイルをJSON等に変更
  • 問題文生成機能を追加
  • GitHub Actionsを使った標準的な作問ワークフローを作る

言語はPythonのまま

元のコードをそのまま活かせるメリットは大きいと思います。

Rime+を本体に統合
plugin機能を廃止

pipでインストールするようになったので、pluginを追加するより本体に機能追加をしてもらう方がやりやすいと思います。

設定ファイルをJSON等に変更

JSONなら外部ライブラリなしで使えるというメリットはありますが、TOMLの方がコメントも書けるなど便利になる可能性はあります。
外部ライブラリを極力減らすことで、pipインストールを上手くできない人が直接Rimeのソースコードを叩いて実行できるようになるメリットはありましたが、そもそもその機能が知られていない上、他でも( #69 (comment) )外部ライブラリを使う話が出ているのであまりこだわる必要はないと思います。

問題文生成機能を追加

Google DocsやGitHubで問題文テンプレートを準備し、サンプルや制約の値などを自動的に挿入する機能を追加したいです。
例えば、library-checker-problemsは同じような形式になっています。
https://github.com/yosupo06/library-checker-problems/blob/master/sample/aplusb/task.md

GitHub Actionsを使った標準的な作問フローを作る

現状のRimeだけでは作問フローが完結せず、他のサービスに依存している面がありました。例えばJAGではPukiWiki・Google Docs・Werckerを使っています。これをRime+GitHubで完結するように設計することで、導入を楽にしたいと思っています。一方、Google Docsなどと連携することでより便利になる可能性もあるので、(pluginではなく)追加のスクリプトなどで対応できるようにしたいと思います。


この方針で試験的に書き直しを進めています。現状はpluginを廃止し機能は本体に取り込み、設定ファイルをJSONに書き直している途中です。

https://github.com/not522/rime/tree/v2

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions