BLisp言語のドキュメントを作成しcrates.ioに登録してみた

BLispはRust言語で実装されたベアメタル環境で動作するシェル、API定義言語として現在研究・開発をすすめています。動機は2つあります。1つが、せっかく静的型付けで型安全なRust言語を使っているのだから、Rustと協調動作するスクリプト言語でも静的型付けで型安全になってほしいというもの。もう1つは、副作用をエフェクトシステムで分離したいというものです。後者については過去に記事を書いていますので、そちらをご覧ください。

ytakano.hatenablog.com

せっかく作ったのだから、そのドキュメントを作成しておこうと思い、簡単なものを作成しました。ドキュメントはまず英語で書いて、それをDeepLで日本語で翻訳して多少手直ししています。DeepLすごいですね。

BLisp: Lispっぽい静的型付け言語

BLisp: A Statically Typed Lisp Like Language

crates.ioへの登録

せっかくなのでcrates.ioへも登録してみようと思い、こちらにも登録してみました。

https://crates.io/crates/blisp

Cargoでは、Cargo.tomlに依存ライブラリを記述すると、crates.ioからダウンロードするのですが、このcrates.ioへの登録も非常に簡単にできることがわかりました。実は、crates.ioとgithubは連携しているのかなと勝手に想像していたのですが、全くそういうことは無く、crates.ioへパッケージを登録するのだという気づきがありました。何事もやってみるものですね。

機能アップデート

機能アップデートとしては、map、foldの基本的な関数と、OptionとResult型を内部的な関数・型として追加しています。また、多倍長整数をサポートしましたので、ベアメタルで巨大な数も扱えるようになります。

ところで、実装には、Rustのbig-integerを使ってみたのですが、ベアメタル環境にもかかわらず、Display部分でfmod関数を呼び出しているようなので、そこを回避する必要がありました。llvmのコード生成時にfmodを呼び出していそうなのですが、定かではありません。

動作としては以下のような感じとなります。no_stdで動くので、WASMでも動くのではと思っており、いずれチャレンジしてみたいところです。それでは皆さん、良いRust生活を。

f:id:ytakano:20210221155657g:plain

ベアメタルで動くBLisp