2021-02-28
TechRust + LLVMで自作プログラミング言語Shiikaを作っているのだが、開発中に遭遇するエラーには以下の種類がある。
- rustcがエラーを吐く(=.rsに問題がある)。
- rustcは通ったが、Shiikaのエラーが出る(=.skに問題があるorバグで問題があると誤判定している)。
- rustcは通ったが、llcがエラーを吐く(=.llの生成に問題がある)。
- llcが実行ファイルを生成したが、実行すると期待通りに動かない。
一番面倒なのはもちろん最後のケースだが、これもさらにいくつかの種類に分けられる。
- 期待通りに動かないが、最後まで実行はできる(=Shiikaで書いたプログラムに間違いがある)。
2021-02-13
Techtl;dr This worked for me (iTerm2 on Mac)
$ cargo --color always build | less -R 2>&1
Problem
When I use lv
(or bat
) to read the output of cargo build
, the output is not colored, even with --color always
(i.e. $ cargo --color always build |& lv
).
2021-01-26
TechShiikaのctx周りをリファクタリングしたので、何をやったかメモしておく。
元のコード
リファクタリングしたのはHirMakerContextという構造体である。こいつはASTからHIR(高レベル中間表現)を作る際に使うもので、もとはこういう定義だった。
2020-12-04
Techこのエントリは言語実装 Advent Calendar 2020の4日目のエントリです。昨日はmitsuchiさんのLLVM の Kaleidoscope を育てながら作るでした。
言語実装アドカレ、今年は全日埋まってるんですねえ。処理系Slackのおかげでしょうか?すごいなあ。
Shiikaは私が作っている、Ruby風の文法を持った静的型付けプログラミング言語です。Rubyのような手触りを保ちつつ、型をベースにしたプログラミングを楽しめる言語を目指しています。数年前から開発していて、昨年夏からはRust + LLVMによる処理系実装を始めました。
本記事では今年の主な成果を振り返ってみようと思います。
サンプルの追加
2020-12-02
Tech2020-10-16
Tech
たまたま時間の都合ができたので、前から気になっていたGo Language Specification輪読会に参加してみた。今回はExpressionsの冒頭を読んだ。
面白かったのは、 if u = User{}; true {
のようにifのあとに中括弧を書くとエラーになるという話。
Goの中括弧はブロックを示す場合と、composite literalを示す場合がある。のだが、上記の場合はどちらなのか決定できない。そのため、ifの直後はパーサが特別なモードになっていて、中括弧は必ずブロックと見なすらしい。その結果、上記は(EBNF上はvalidにもかかわらず)エラーになるというわけ。
ちなみに以下のようにまぎらわしい箇所を括弧でくくってやると通る。
CやJavaScriptではifのあとに括弧が要るからこういう問題は起こらない。Goでは括弧をなくした代わりにパーサが状態を持つようになったというわけ。
Rubyではこういうのが無数にあるんだけど、Goにもあるのが意外で面白かった。
2020-07-28
Tech月報を書くようになって2年以上経つので、メリットだと感じているところをメモしておく。
月報とは
こういうやつ。
自分の趣味プロジェクトについて、その月になにをやったかを毎月まとめている。
2020-07-14
TechVimでRustのLanguage Serverを使う手順。
rlsまたはrust-analyzerを入れる
rlsはrustupでインストールできる。
rustup component add rls rust-analysis rust-src
rust-analyzerはrlsより新しいのだが、まだrustupではインストールできない模様。バイナリ配布があるのでそれをダウンロードしてPATHの通ったところに置く。
2020-06-28
Tech家のMacBookはずっとOSアップグレードをしてなかったのだけど、qmk_firmwareのためにavr-gccを入れようとしたらXCodeが古すぎると言われたので、重い腰を上げてCatalinaにアップグレードした。
以前のアップグレードの際は途中で止まったりして印象が悪かったのだが、今回はすんなり行ってくれた。
ただmakeコマンドを打つと
unable to find utility "make", not a developer tool or in PATH
というエラーが出るようになってしまった。
このへんを見るも原因がよく分からず、App StoreからXCodeのインストールを試したら直った。
2020-05-17
Techpuma-devを.devで運用していたのだが、最近は.devドメインで提供されるサイトが存在して、実用上困ることになっていた。例えば以下のエントリが閲覧できなかった。
puma-dev -uninstall
で直るかと思ったけど直らず、/etc/resolver/dev というファイルを削除したら直った。