5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

D言語Advent Calendar 2019

Day 21

D言語でREPLを作った話

Posted at

どういうことか

ちょっと諸事情によりREPL(Read-Evalulate-Print Loop)の機能が欲しくなって自作していました。
https://github.com/Sobaya007/repl.d
普通に本家にもあるんですが、いくつか不満点があったのと、オレオレ実装を貫き通したいという気持ちから作ってしまいました。
とりあえずできたのはこんなかんじ↓
repl2.gif
残念ながら本家の上位互換とはいかなかったのですが、

  • 他のライブラリをDUBから持ってこれる
  • これ自体がライブラリとしても活用できる(というかそのために作った)

という点で本家と差別化できています。本家のほうがエラーハンドリングがちゃんとしていたり色がついててカッコ良かったりするのですが、そこら辺はおいおいやっていこうと思っています。

実装

  1. 入力されたテキストをlibdparseでパースして種別判定
  2. 種別ごとに加工を施して一時ファイルに保存
  3. コンパイルしてDLL(共有ライブラリ)に変換
  4. 読み込んで即時実行

という恐ろしく単純な構造となっています。
変数や関数の宣言などはVariant型という"なんでも型"の配列として持っておき、いいかんじに渡したりすることで実現しています。
毎回コンパイルしちゃっているのでちょっと遅いのが玉に瑕ですが、仕方ない。

今後の展望

  • エラーハンドリングを真面目にやる
  • Windows対応(鬼門)
  • LDC対応(鬼門)

あたりをぼちぼちやっていきたいと思います。
バグ報告・要望等ありましたらお気軽にIssueなりPRなり投げてください。
それからここまで見てくれた方限定で、なんとこのレポジトリにスターをつけることができます!!!
目立つように3つ貼っておきます。
https://github.com/Sobaya007/repl.d
https://github.com/Sobaya007/repl.d
https://github.com/Sobaya007/repl.d
スターをつけてくださると、もれなく私が喜びます。ぜひ皆様の清き御一票を!

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?