タグ

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

  • 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デザインと実装
    sh19910711
    sh19910711 2024/09/14
    "アセンブリコードを文字列として入力に取るのではなく、 静的に型付けされたRustプログラム上にアセンブリコードを記述" '22
  • Rust + LLVMでプログラミング言語を自作してセルフホスティングした話

    llrlは自作のプログラミング言語です。大きな特徴が2つあります。 Hindley-Milnerベースの型推論による静的型付け (+型クラス) Lisp-likeなS式によるシンタックスとLLVM JITによるマクロ この言語の処理系をRustとLLVMを用いて実装し、それをllrl上に移植してセルフホスティングを試みました。無事セルフホスティングを達成したので、取り組んだことやモチベーションなどを順に振り返りたいと思います。 LLVMについては、フロントエンド側・バックエンド側ともに既にいくらかの解説記事が見られるため、概要は省略します。今回は新たなプログラミング言語のバックエンドとしてLLVMを用いるので、LLVMのフロントエンド側の実装がメインとなります。 事の発端: LLVM Kaleidoscopeチュートリアル Kaleidoscopeは、LLVMのチュートリアルにおいて実装す

    Rust + LLVMでプログラミング言語を自作してセルフホスティングした話
    sh19910711
    sh19910711 2021/07/11
    "Kaleidoscopeは、LLVMのチュートリアルにおいて実装する非常に簡単なプログラミング言語 / 機能は限定的ながらも「プログラミングができる」言語になっています"
  • 1