Rust structとenumの組み合わせ
Shiikaのctx周りをリファクタリングしたので、何をやったかメモしておく。
元のコード
リファクタリングしたのはHirMakerContextという構造体である。こいつはASTからHIR(高レベル中間表現)を作る際に使うもので、もとはこういう定義だった。
Shiikaのctx周りをリファクタリングしたので、何をやったかメモしておく。
リファクタリングしたのはHirMakerContextという構造体である。こいつはASTからHIR(高レベル中間表現)を作る際に使うもので、もとはこういう定義だった。
5000行ったのでこのデッキの構築とか立ち回りについて書いておく。
#クラロワ 最多5600やねんけど今季はようやく5000、レート相場の変動がやばい pic.twitter.com/j6IaO2ekiz
— yhara (Yutaka HARA) (@yhara) January 3, 2021
今期は先月のアプデでトロフィー増減の仕様が変わって、だいぶレートが上がりにくかった。
元にしたデッキはこちら。 https://www.youtube.com/watch?v=R_LN9azepwE
2020年の振り返り。
今年はほとんどのイベントがオンライン化するという未曾有の事態だった。登壇としては10月のlangsmith1件で、これもオンライン。
Shiikaの開発が進み、だいぶ「本物」に近づいてきた。advent of codeとかで実際にShiikaプログラムを書いてみてるけど、体験はとてもよい。まだまだ荒削りだけど、方向性が間違っていないことが確認できたといえよう。
近況です。
今年は2本。
このエントリは言語実装 Advent Calendar 2020の4日目のエントリです。昨日はmitsuchiさんのLLVM の Kaleidoscope を育てながら作るでした。
言語実装アドカレ、今年は全日埋まってるんですねえ。処理系Slackのおかげでしょうか?すごいなあ。
Shiikaは私が作っている、Ruby風の文法を持った静的型付けプログラミング言語です。Rubyのような手触りを保ちつつ、型をベースにしたプログラミングを楽しめる言語を目指しています。数年前から開発していて、昨年夏からはRust + LLVMによる処理系実装を始めました。
本記事では今年の主な成果を振り返ってみようと思います。
近況です。
今月はブロック記法に対応したのと、やっかいなバグを2つ直した。
このエントリはキーボード #1 Advent Calendar 2020の2日目の記事です。前日はskyhigh_worksさんの【QMK】VSCodeでKeycodeの補完を有効にする - 天高工房でした。
本記事では28キーのミニマルなキーボード、Alphaの紹介をします。一見とっつきにくそうですが、とっても楽しいですよ!
僕のゲーミングキーボード見て pic.twitter.com/MSmcaLo0Fp
— yhara (Yutaka HARA) (@yhara) December 2, 2020
Alphaはキー数がわずか28しかない小さなキーボードです。いわゆる30%キーボードの一種ですが、代表的な30%キーボードであるGherkinでさえ30個のキーがあるのに、そこからさらに2つキーが減っています。
自作プログラミング言語の集いで発表した。スライドはここ。
vtableの方は10月ぎりぎりで実装できた。残念ながら型システムの問題でまだ実際のメソッド(Object#inspectとか)は実装できていないが、11月中にはなんとかなるだろう。
dynamic-windがうまく動かないケースがあるという報告をもらって調べてみたら、確かにスタックがこわれていた。継続まわりのVM命令をいじったときに、「aレジスタを復元する」という処理の位置が間違っていたようだ。winderを実行するとaレジスタは破壊されるので、winderの実行が終わったあとで復元しなければならない。
たまたま時間の都合ができたので、前から気になっていたGo Language Specification輪読会に参加してみた。今回はExpressionsの冒頭を読んだ。
面白かったのは、 if u = User{}; true {
のようにifのあとに中括弧を書くとエラーになるという話。
Goの中括弧はブロックを示す場合と、composite literalを示す場合がある。のだが、上記の場合はどちらなのか決定できない。そのため、ifの直後はパーサが特別なモードになっていて、中括弧は必ずブロックと見なすらしい。その結果、上記は(EBNF上はvalidにもかかわらず)エラーになるというわけ。
ちなみに以下のようにまぎらわしい箇所を括弧でくくってやると通る。
if u = (User{}); true {
CやJavaScriptではifのあとに括弧が要るからこういう問題は起こらない。Goでは括弧をなくした代わりにパーサが状態を持つようになったというわけ。
Rubyではこういうのが無数にあるんだけど、Goにもあるのが意外で面白かった。
9月の活動報告です。
今月は季節の変わり目のせいか、あまり調子が出なかった。進捗としては先月やっていたクロージャの実装を終わらせて、今はvtableの実装をしている。これが動けばObject#inspectが実装できる、つまりpメソッドが作れるということでいろいろと楽しくなりそう。
Shiikaについては10月頭の自作プログラミング言語の集いというイベントで発表させてもらうことになった。スライド作らなきゃなあ。