# 卒業研究テーマ候補一覧(2022年度)
## 関数型言語系(Scheme,OCaml)
1. Scheme言語のabstract interpretation
* 1〜3名,本田
* 発表履歴:5/31, 6/7
* Racket
* R6RS in Redex の abstract interpretation化
* 参考:Abstracting Abstract Machine
[https://dvanhorn.github.io/redex-aam-tutorial/](https://dvanhorn.github.io/redex-aam-tutorial/)
1. Rosetteを使った抽象解釈器の実装
* 1名,佐藤
* 発表履歴:5/24, 5/31, 6/14, 6/28
* Racket
* relational domainを割と簡単に実装できそう.
* [https://docs.racket-lang.org/rosette-guide/index.html](https://docs.racket-lang.org/rosette-guide/index.html)
1. syntax-parseへの文脈マッチング機能の追加
* 1名,山内
* 発表履歴:5/24, 5/31, 6/21, 6/28
* Racket
* Redexの複数 ...,in-hole による非決定的マッチング
* in-hole は syntax-class で表現できるが,非決定的ではない.
* (非決定的である必要はあるか?~orのバックトラックで十分?)
- → 複数...を書いてみて,syntax-parseがどういう振舞いをする
のか確認(たぶんprolog的な...)
- → orパターンで十分となれば,in-holeをsyntax-classで表現
して,Redexのcontext evaluationみたいなことを素直に
syntax-parseのプログラムとして表現できるか検証
* 参考:syntax/parse
[https://docs.racket-lang.org/syntax/stxparse.html](https://docs.racket-lang.org/syntax/stxparse.html)
1. Scalaマクロを調査し,Racketマクロとの差異調査
* 1名
* Scala (Racket)
* Scala(あるいはRacket)への機能追加まで到達できると良い
* [https://docs.scala-lang.org/scala3/guides/macros/index.html](https://docs.scala-lang.org/scala3/guides/macros/index.html)
1. Rustマクロを調査し,Racketマクロとの差異調査
* [杉山HackMDページ](https://hackmd.io/@sugiyama0616/Syl3sALUc)
* 1名, 杉山
* 発表履歴:5/10, 5/31, 6/14, 6/28,7/19
* Rust (Racket)
* Rust(あるいはRacket)への機能追加まで到達できると良い
* [https://doc.rust-jp.rs](https://doc.rust-jp.rs)
1. 依存型言語curの能力確認
* 1名
* Racket (Agda)
* Agdaとの違いについて考察.木下先生の演習をやってみる?
* 不足しているものを見つけて,curのメタプログラミングで機能追加.
* [https://docs.racket-lang.org/cur/index.html](https://docs.racket-lang.org/cur/index.html)
1. SICPの続編を読む
* 1名
* Racket
* [https://mitpress.mit.edu/books/software-design-flexibility](https://mitpress.mit.edu/books/software-design-flexibility)
1. Electron with ReasonML
* 1名
* OCaml, JavaScript?
* どうやらElectronするにしろReactがstandardらしい?
* Electron:[https://www.electronjs.org](https://www.electronjs.org)
* ReasonML:[https://reasonml.github.io](https://reasonml.github.io)
* React:[https://ja.reactjs.org](https://ja.reactjs.org)
## 命令型言語系(Python,Java)
1. RPythonでプログラミング言語を実装
* 浅野雄大,アン
* 浅野:5/24, 5/31, 6/14, 6/28, 7/19, 8/2
* アン発表履歴: 5/17, 6/14, 6/28, 8/2
* 1〜2名
* Python
* RPython(PyPyの動的言語フレームワーク)上で,簡易関数型,簡易論理型など
小さな言語を実装
* (RPython で 2-level functional language を実装し,
RPythonのコンパイル時処理に対する一種のリフレクションをつくれないか?)
* [https://rpython.readthedocs.io/en/latest/](https://rpython.readthedocs.io/en/latest/)
1. CPythonへの機能追加
* 1〜2名,栗巣,小川
* 栗巣発表履歴:5/24, 6/7, 6/21,7/5, 7/19,8/2
* 小川発表履歴:5/24, 6/7, 6/21,7/5, 7/19,8/2
* Python, C
* 「CPython Internals」で勉強しながら何か自分で追加
* CPython: lambda にブロック式を導入.ステートメントを実行できる.
* [https://realpython.com/products/cpython-internals-book/](https://realpython.com/products/cpython-internals-book/)
* ast.pyの調査,マクロ in Pythonに使えるか
1. Javaでつくる言語処理系
* 1〜2名,片山,高橋
* 片山発表履歴:5/24, 6/7, 6/21,7/5, 7/19
* 高橋発表履歴:5/24, 6/7, 6/21
* [Crafting Interpreters](http://craftinginterpreters.com)