タグ

ブックマーク / zenn.dev/yubrot (2)

  • Rustで自作プログラミング言語を自作x86_64アセンブラでセルフホスティングした記録

    この記事は言語実装 Advent Calendar 2022の23日目の記事です。 導入 2021年、私は llrl という自作プログラミング言語のセルフホスティングに取り組みました。 セルフホスティングには成功し、生成された処理系の実行ファイルのバイナリが完全一致するところまで辿り着きましたが、この言語処理系のバックエンドは「LLVMを使う」で終わっていたので、バックエンドの実装にもっと目を向けたいと思いました。そこで2022年は、この言語処理系に 新たにx86_64を直接ターゲットとするバックエンドを追加し、LLVMを用いずにセルフホスティングできるようにしました。 記事はこの取り組みの振り返りとなります。 自作プログラミング言語の特徴とバックエンドの要件 llrlには大きな特徴が2つあります。 Hindley-Milnerベースの型推論による静的型付け (+型クラス) Lisp-l

    Rustで自作プログラミング言語を自作x86_64アセンブラでセルフホスティングした記録
  • Rustによる言語内x86_64アセンブラのAPIデザインと実装

    概要 Rustでx86_64アセンブラを実装しました。JITコンパイラの実装での利用を想定しているため、アセンブリコードを文字列として入力に取るのではなく、 静的に型付けされたRustプログラム上にアセンブリコードを記述できるライブラリ として実装しています。例えばフィボナッチ数を計算するアセンブリコードを以下のように記述し、付属のJITエンジンを用いて実行できます: fn fib_object() -> io::Result<Object> { let mut w = Writer::new(); let fib = w.get_label("fib"); let l1 = w.issue_label(); let l2 = w.issue_label(); w.define(fib, true); w.cmpl(Edi, 1i8)?; w.jle(Short(l2))?; w.movl

    Rustによる言語内x86_64アセンブラのAPIデザインと実装
  • 1