Kain's blog

Works

Miniwascheme

Schemeの基本的な機能を実装したインタプリタ。

Rustを用いて実装しており、WebAssembly向けにコンパイルが可能であるためブラウザで動作させることが可能である。

また、Schemeにはない機能としてリアクティブプログラミングの機能、アクターモデルを参考とした並列実行機構(ブラウザ実行不可能)を実装した。

GitHub: MysteryJump/mini-scheme

ZerochSharp

某巨大掲示板の後継サーバスクリプトを構成することを目的としたもの。

C#(ASP.NET Core)とReactで実装しているが、行き詰まりを感じ現在はRust(actix-web,diesel)とNext.jsを用いて再構成をおこなっている(現在開発中断中)

GitHub: MysteryJump/zerochsharp

組込みシステム向け関数リアクティブプログラムに対するテストケース生成手法 (Poster)

卒論の研究の一部分をPPL2022で発表したもの。

組込みシステム向け関数リアクティブプログラムに対するテストとデバッグ手法 (卒論)

FRPはリアクティブプログラミングの一種であり、時間と共に連続して変化する値を 時変値と呼ばれる概念を用いて、システムを実装するためのパラダイムである。 この研究ではFRP言語の一種であり、小規模組み込み環境に作られた言語であるEmfrpに対するデバッグ手法並びにテスト手法についての研究を行った。

デバッグ手法

EmfrpのプログラムはDAG(有向非巡回グラフ)として表現できるため、このグラフをグラフィカルに描写し書かれたプログラムを理解しやすくした。

また、条件付きブレークポイントと呼ばれるものを導入した。 これは、プログラム中において時変値がある値になった時に、プログラムの実行を一時停止するという機能を持つものである。

これにより、一時停止中の時変値の値や過去に時変値が取った値についての確認が行える。

この研究では、上記のような機能を持つデバッガを構成した。使用した技術や実装方法は以下の通り。

  • UI部分

    Electron + TypeScript + Reactで実装。

    デバッグサーバ部分との通信をWebSocket(初期化時のみREST)を用いて行う。

    ユーザからの各種操作を受け付け、必要な情報を表示する部分。

  • デバッグサーバ部分

    Rust + tokio + axumで実装。

    コンパイルされた生成物であるバイナリをGDBを経由してデバッグを行う。

    デバッガは実行中プログラムをGDPを用いて情報の取得を行い、保存する。保存したデータはUI部分からの要求に応じて送信する。

    なお、条件付きブレークポイントにヒットした場合は、プログラムの実行を一時停止してデバッガ側からUI部分に情報を送信する。

テスト手法

Emfrpにおいて、プログラムに入力を与えると、プログラムの現在の状態と入力を元に直ちに結果を出力する。 これを繰り返すことにより、離散的な値を擬似的に連続的な値として扱うことが可能となっている。

このようなシステムに対して、テストを行うことを考える。 この時、テスト対象はあくまで上記の繰り返しに上限の回数を設けたものとする。

すると、Emfrpのプログラムに対してテストを行うには以下が必要となる。

  • プログラムに入力するための値の生成
  • プログラム本体
  • 出力された値の検証

本研究においては、値の生成に主眼を置いている。

特に、実際に生成する値に対しての制約を与えるためにMTLを用い、LTLを用いている先行研究を拡張した。

実際の生成にはMTLを元に論理式を生成し、それを元にSMTソルバを用いることで入力値の配列を生成している。

また、出力された値の検証は出力された配列の値をMTLを用いて評価する機構を作成することにより実装した。

クソアプリ

クソアプリ
  • 感じる力(Xamarinで書いた)。Androidのバージョンアップでまともに動かなくなった模様。Google Play
  • セプタゴナー(Flutterで書いた)。とある掲示板の書き込みがあった際にFirebase Cloud Messagingを用いて通知を送信するというアプリケーションだが、新着情報を確認して通知を送信するサーバをクローズしてしまったため何の意味もないアプリケーションと化してる。Google Play

VIPBrowser

某巨大掲示板用の専ブラ。 今思い返すとゴミみたいな設計をしているとしか言いようがない。 今のバージョンのWindowsでまともに動かない可能性の方が高い。

GitHub: MystreryJump/VIPBrowser