近況 2020-05-31

今月の活動について (ジャッコ言語、競プロ、気になった記事の感想など)

ジャッコ言語

https://github.com/vain0x/languages/compare/1ad69df9517e4b12a6b3caf63c2d9650a5d1ced5...5a48072160159b4180c6e5729ee6f21ce71797db

新しい自作言語処理系を作り始めた。

milone-lang, picomet-lang, phancie-lang などの良かった点や反省点を整理して作り直している。

  • 構文は Rust
  • 中間表現は CPS
  • 意味論はいまのところ C
  • バックエンドはとりあえず C または C++
  • Cソースコードを生成するのも一定のめんどうくささがあることに気づいてきたので、LLVM IR や WASM に切り替えるかもしれない

rust-analyzer みたいに homogeneous な構文木の上にラッパーとして AST を立てるやつは、hsp3 フォージェリや phancie-lang でやろうとした感じ、めんどくさすぎる。

  • 当面、普通に enum で heterogeneous な構文木を作ることにする

言語仕様のシンプルさ、実装のシンプルさなどを重視して作っていく。

  • Rust の構文リテラル K {} と分岐構文 if cond {} が文法的に衝突している問題は、条件式にカッコを必須にして if (cond) {} とする方針で解決することにした。
  • K {} の方をいじるとどうしても違和感があり、「普通でない」構文になってしまう
  • if (cond) {} は少なくない言語で採用されていて、違和感が少ない

まだ動作するコードは吐けない。

  • () → void に単純に書き換えてるせいで、void 型の変数を生成してしまったりする

競技プログラミング

週末は AtCoder。今月だけでレートを 100 近く溶かして、水に転落してしまった……

競プロ参戦記は4月末からおやすみ中。代わりに、なるべく よるかつ コンテスト に参加している。ABC/ARC の過去問が出題されるバーチャルコンテスト。

制限時間90分で6問、難易度は灰-灰-茶-緑-水-青です。 問題はRatedのABC(042以降)とARC(058以降)からランダムに選出され、各枠ごとに一巡するまで出題は重複しません。

その他の活動

languages/confwell at master · vain0x/languages

  • ini/conf を拡張した設定ファイルの用の言語 confwell の仕様を考えていた
  • StrictYAML という言語の設計思想に影響を受けている
  • 1.0 と “1.0” が異なる意味を持つのは非プログラマーには分かりにくい、などの指摘があり、せやなってなった
  • YAML の字下げ依存はよくないと思うので conf をベースにした

ブロックの直後のセミコロンを省略できる構文 を考えて、tree-sitter で実装してみた。文法の衝突は起きていないようなので、ジャッコ言語に採用する予定

id-arena-debug

  • id-arena にデバッグ出力機能を足す実験をした
  • デバッグ時だけ ID と一緒にアリーナへのポインタを持ち運ぶことで値にアクセスできるようにしておく

小さいプルリクエストを出した (マージ済み):

気になった記事など

関連記事