2022-12-25
Techこんばんわ。本記事は言語実装のカレンダー | Advent Calendar 2022 - Qiitaの24日目の記事です。
Shiikaは私が作っているRuby風の文法をもつ静的型付け言語です。静的言語はだいたい性能を重視した設計になっていることが多くて、動的言語は書きやすさを重視した設計が多いのですが、「静的だけど書きやすさ重視の設計」にすることで、静的なエラーチェックと書きやすさを両立したいと考えています。「Rubyっぽい手触りの静的言語」を目指しています。
2022年の主な進捗
- パターンマッチ
- enumに対し、
match x when Some(y) ...
とかでパターンマッチできるようになりました。これがないと始まらないよね。
- Module
- RubyのModule(Rustでいうとtraitみたいな)を実装しました。実現方法はSwiftのwitness tableというやつを参考にしました。
2022-05-27
TechI got this error while compiling Shiika.
Compiling llvm-sys v120.2.4
error: No suitable version of LLVM was found system-wide or pointed
to by LLVM_SYS_120_PREFIX.
llvm-sys checks the version in its build.rs
. On my current environment, LLVM_SYS_120_PREFIX
is:
2022-04-24
Tech2022-04-04
Tech最新のvimprocをmacでコンパイルしようとしたらエラーになったのでメモ
/Users/yhara/.vim/bundle/vimproc % make -B
/Library/Developer/CommandLineTools/usr/bin/make -f make_mac.mak
clang -O2 -W -Wall -Wno-unused -Wno-unused-parameter -bundle -fPIC -o lib/vimproc_mac.so src/proc.c
src/proc.c:10:10: fatal error: 'stdio.h' file not found
#include <stdio.h>
^~~~~~~~~
1 error generated.
2022-04-03
TechたとえばゲームプログラミングでEnemyとしてスライムとドラゴンがいて…みたいなとき、Rubyなら継承で実装しますよね。
class Enemy
attr_accessor :hp # 体力
end
class Slime < Enemy
end
2022-04-01
Techいいぞ。
40%キーボードとは?
キー数が通常の40%、つまり50個前後しかないキーボードのこと。
そんなので入力できるの?
できるぞ。QMK Firmwareというオープンソースのファームウェアに対応していればキー配置を極めて柔軟に設定できるので、例えばAを押したときに
2022-03-20
Tech自作キーボードを何台も組み立てていると、だんだん気になってくるのがキースイッチのコストである。10個450円とかで買えるとはいえ、1台分だと数千円になってしまう。
ということで、もう使わなくなったキーボードからキースイッチを回収することを考える。
梅コース
一番安いのだとこういう道具がある。ばねの力で吸引力を生み出すタイプで、はんだごてを当てて、溶けた瞬間にポンと吸ってやる。
このタイプは前に触ったことがあるけど、キースイッチの場合はあまりうまくいかなかった。タイミングがシビアなのかな?
2022-03-18
Techちょっと形式手法ツールAlloyを使ってみたい場面があったのでとりあえずインストールしてみた。昔ちょっとだけ触ったことあるんだけど。
Macだとbrew install alloy
で入るので楽。
とりあえずチュートリアルやるか〜と思ったものの:
Visualizeすると「全部非表示になりました。Themeを設定してください」みたいなメッセージが表示される。うーん。仕様が変わったのかな。
2021-10-01
Tech自作言語の開発中、LLVMが以下のメッセージを吐いて死ぬのを調査したメモ。
./bin/llvm-dis: error: Invalid instruction with no BB (Producer: 'LLVM12.0.1' Reader: 'LLVM 12.0.1')
このメッセージで検索すると lib/Bitcode/Reader/BitcodeReader.cpp がヒット
if (!CurBB) {
I->deleteValue();
2021-10-01
TechLLVMのエラーメッセージはあまり親切でない。Rustの異常な親切さに慣れてきたのでそう思うのかもしれないが。
例えばllvm-disの出したエラーがこれ:
Assertion failed: (InitVal->getType() == getValueType() && "Initializer type must match GlobalVariable type"), function setInitializer, file /Users/yhara/research/llvm-12.0.1.src/lib/IR/Globals.cpp, line 405.
型が違うことはなんとか分かるが、せめて何と何だったのかくらいは教えてくれないとデバッグのしようがない。