目立つと叩かれて嫌なので目立たないようにしてたのですが、何やっている人なのかわからないと話を聞いてもらえなくなりがちなのでやってきたことをここにまとめます。
これまでの実装実績(バイオグラフィーみたいなもの)
趣味でプログラミング言語の実装技術の本質を(論文を読むなどして)取り出して実装してみています。 研究というほどのものではないのですが、どのような技術を学んできたかをここにまとめて紹介します。
2023
- Bidirectional Typechecking を実装してみた。(Prolog) 双方向型検査のチュートリアル Implementation of Bidirectional Typing Rules: A Tutorialを読んでPrologで実装。
- λeffをPrologに移植したら133行で書けた。(Prolog) エフェクトシステムの論文を読んでPrologで実装。
- ワークショップの開き方のテンプレートを考えてみた。 ワークショップをやってみてはどうかということを言われたので書いてみた。
- LALRPOPで四則演算(Rust) RustのパーサをOCamlYaccのようなLRパーサで書きたいと思って書いてみた。
- CEKマシン(Prolog) ICFP15の論文のProlog実装
- pacman (Prolog) prologでもゲームが作れることを示す Prolog によるコマンドライン上で動くローグライクなPacman
2022
- shift/reset (Prolog) shift/reset プログラミング入門 浅井 健一 の shift/reset のProlog実装
- calc.rkt (Racket) Racket による四則演算言語の実装 構文定義と評価規則を書くだけで実装が動くLISPです。
- occ.pl (Prolog) Implementation on Prolog of The Design and Implementation of Typed Scheme
- bigstep.rkt (Racket) ラムダ計算の大ステップ評価器のRacket実装
- SSA変換とSCCP最適化をJavaScriptで実装してみた。 uint256さんなどの影響で最適化パスが面白くなったので BRIL を参考に SCCP 最適化を JavaScript で実装してみました。
2020
- linier.pl (Prolog) 線形ラムダ計算の型システムを実装してみた をPrologに移植
- cse.pl コンパイラバックエンド処理 データフロー解析 ②:Available expressions を見てのCommon Sub-expression Elimination(共通部分式削除、CSE)のProlog実装、コンパイラバックエンド処理 データフロー解析 ③:Liveness analysisのProlog実装、 コンパイラバックエンド処理 データフロー解析 : Reaching Definition のProlog実装 。まだよくわかってない頃に書いてみたものです。
- [cz80d] 必要クロックが表示される構造をシンプルにしたZ80ディスアセンブラ
2019
- parse.pl (Prolog) 操車場アルゴリズムのProlog実装 演算子順位法の一種だったと思うけど忘れた。
- DNF+.pl (Prolog) 論文 Sound and Complete Flow Typing with Unions, Intersections and Negation のPrologによるFlow型システムのUnion型の実装
- dnf.pl nnf変換とdnf変換を同時に行うもの
- memo.ml (OCaml,Prolog) メモ化による高速化の実験
- cnf.v (Coq) Coqで実装したので停止性と型安全性が保証できているので構文的に完全な cnf 変換
- nnf.v (Coq) 構文的に完全なnnf変換
- validator.js (JavaScript) 簡単なJSON Schema みたいなもの (木文法の構文検査器の実装例)bnf7.ml (OCaml) こちらは JSON Schema みたいなものの OCaml 実装
2018
- ohori95 のProlog実装 (Prolog) 大堀先生の多相レコード計算の論文をPrologで実装
- Prologで型クラス実装 (Prolog) Nipkow 先生達の Mini-Haskell の研究の論文をPrologで実装したもの。
- Linear types can change the world!の線形型システムをPrologで実装 (Prolog)
- bulletpl (Prolog) 弾幕MLをPrologシンタックスにしたもの。 SWI-Prologのshift/resetを使って実装してあり、httpサーバ上でbrowser上のJavaScriptと通信して動くものと、SWI-PrologのGUIライブラリを使ったもので動きます。makeでいきなり動くのですけどまぁ楽なので。
- LRパーサジェネレータ (OCaml) LRパーサジェネレータの OCaml による実装
- pcla (Prolog) 200行定理証明支援系
region_infer (Prolog) SMLで書いてあったリージョン推論をOCamlに移植した物です。
vscode-debugger-simple-asm (TypsScript,PHP,OCaml) VS コードのデバッガサンプル(TypeScript,PHP,OCamlの3つの実装があります)
cadt (C言語) Example of Simple algebraic data types for C の四則演算実装サンプル
- RTG - Regular Tree Grammer validator (Prolog) Prolog で BNF風のシンタックス定義をしてPrologの項を構文検査できるようにしたライブラリ。term_expansion (Prolog のマクロのような仕組み) によって実装しています。
2017
- dependent.pl An algorithm for type-checking dependent types (依存型) の Prolog 実装
- simpletapl(Prolog) TAPL の図をPrologで実装しアルゴリズミックな理論的な図がPrologできれいに実装できることを示しました。
- 日本語で言語を作ろう (Prolog)
- gdis_prolog (OCaml,Prolog) OCaml による Prolog 実装。 Goal Database Instruction Stack マシンみたいな実装になってますが、確か破壊的なforallの実装がうまく行かなかったので最新版はバグってる感じになってたはずなのでちょっと古いものを使うのが良いと思います。
- 型クラス関連の論文の翻訳 色々と型クラス関連の論文を読みました。
2016
- T言語(Prolog) TIPER,TAPL,CoPLの影響を受けてつくった Prologベースのプログラミング言語
2015
- jasc (OCaml, Java) jasmin fast assembler jasc はocamlで作成中のwindowsでもビルドが楽に出来る、jasmin形式のjvmバイトコードアセンブラです。 aa.j ファイルをコンパイルしてaa.classファイルを作成出来ます。
- smplpkg (PHP) PHP で作ってみたパッケージシステム。 ppp も関連してます。
- type-systems-scala (Scala) Implementations of various type systems in Scala. The original code was written in OCaml. https://github.com/tomprimozic/type-systems.git OCaml で書いてあった型システムの実装例を Scala にして日本語翻訳しようと試みていたもの(英語力が低すぎる&機械翻訳の能力が低かったので役にたたない翻訳になってると思います。)
- min-caml-js min-caml を JavaScript上で実装したものです。
- GomaJ (OCaml,Java) GomaJ Programming Language GomaJ(beta) is tiny AltJ, namely, GomaJ is a very simple limited translator for the Java programming language. This compiler made by OCaml, OCamlYacc and OCamlLex.
- Joni (OCaml,Java) GomaJ と似たような言語ですけど何が違うのか今となっては本人でもわからないです。
- レベル付きの多相型推論の研究 (OCaml) Olegの記事をつたない英語力で翻訳してみておりましたがなんとか理解できました。
2014
- camlup (OCaml, C言語) C言語シンタックスのAlt OCaml なトランスレータ言語。 型検査は OCaml に丸投げですけど、関数プログラミングによるシューティングゲームをつくった覚えがあります。
- goma (OCaml,C++) OCaml で書いた Golang の trait があるような言語。C++にトランスレートして動きます。
- RubyE (Scala) RubyE はRubyのような式言語です。 RubyE 自体ではS式やXMLのように意味を持ちません。 RubyE はシンプルなツリーデータを表すデータフォーマットです。
- strollmincaml (OCaml) チュートリアル このプロジェクトは、mincamlのLLVMバインディングを段階を追って作成するチュートリアルです。
- mincamlj Mincamlj は mincamlをScalaとJavaに移植してJVM上でmincamlのコンパイラを動作させるプロジェクトです。字句解析は Java でそれ以外は Scala で実装してありx86のアセンブラを吐き出すように作りました。
2013
- fstype7 (F#) F# でつくったLLVMのIRを出力するネイティブコンパイラ 。今のLLVMでは動かないですがF#好きなら参考になるかも。
- lllong (Scala) windows osx linux対応の x86 x86_64 コンパイラ C式というLispのS式のようなものに演算子が使えるようにしたものでプログラミングできるようにした言語です。
2012
- type4 (Scala) type4 is x86_64 compiler can use the float value. float が使える x86_64 コンパイラ
- type1 (Scala) 型付きコンパイラを作ろう
- tscala (Scala) これは、ScalaによるMac OSX 上で動作するx86_64コンパイラです。多分型がないコンパイラです。
- ex86_64 (Scala) x86_64 コンパイラ
- x86_64 (Scala) x86_64 コンパイラ
2011
- timi (Scala) x86_64コンパイラ
- cmincaml (Scala) Mincamlj は mincamlをScalaとJavaに移植してJVM上でmincamlのコンパイラを動作させるプロジェクトです。 これは https://github.com/hsk/mincamlj に引き継ぎました。
2010
- ctinyc Compact Tiny-C language compiler created by Scala language. Tiny-CコンパイラのシンタックスをCompact式を使ったバージョンに変えたコンパイル言語です。
- stinyc STinyC is Tiny-C language compiler created by Scala language. Tiny-CコンパイラをScalaに移植してみるプロジェクトです。
2009
2008
- sumi言語 演算子順位法を用いたLispのマクロがある言語
- プロフィール
- id:h_sakurai
- メールアドレス
- sakurai777@gmail.com
- ブログ投稿数
- 50 記事
- ブログ投稿日数
- 48 日
- 読者