タグ

ブックマーク / qiita.com/sisshiki1969 (4)

  • JITコンパイルをサポートした新たなRuby処理系をRustとアセンブリで書いている話 - Qiita

    CRuby(3.2.0-preview3)およびCRubyの新しいJITコンパイラ・モジュールであるYJITを有効にした場合と、monoruby(JITあり・なし)の単位時間当たりの実行回数をbenchmark-driver.gem を用いて比較しています。数字が大きい方が速いです。ベンチマークの種類によりますが、YJITと比較しても高速、特に浮動小数点演算を多数実行するso_mandelbrotやso_nbody、app_aobenchでは数倍高速となっています。インタプリタもCRuby(JITなし)と遜色ない速度になっています。 以下、設計と実装について紹介していきますが、その前に必要な基礎知識をおさらいしておきます。 基礎知識 JITコンパイラは実行時に対象言語のプログラムを機械語へコンパイルするモジュールですが、一般的な実装ではインタプリタと並存して動きます。プログラムは抽象構文木

    JITコンパイルをサポートした新たなRuby処理系をRustとアセンブリで書いている話 - Qiita
  • rurubyのガベージコレクタとアロケータ - Qiita

    さて、今回はrurubyにおけるオブジェクトのメモリ表現と、これをハンドリングするアロケータ・ガベージコレクタについて解説します。 Rubyオブジェクトのデータ構造 まず、動的型付き3オブジェクト指向言語であるRubyにおけるオブジェクトがrurubyの内部でどのように表現されているかを説明します。rurubyのオブジェクトの内部表現はCRubyのそれに大変よく似ていて4、笹田さんの連載記事(WEB+DB PRESS Vol.110「Rubyのウラガワ」)の第1回に大変分かりやすく解説されているので正直そちらを見て頂いた方がよいのですが、今回の題であるメモリ管理の説明の前提として必要な話なので、ここで簡単に説明します。 Value rurubyのオブジェクトは内部的にはValueと呼ぶ8バイトの構造体で表現されます。Rubyオブジェクトの全情報を8バイトで表現するのは当然無理なので、基

    rurubyのガベージコレクタとアロケータ - Qiita
    Watson
    Watson 2021/12/25
  • Ruby処理系自作入門 - Qiita

    はじめに この記事はRuby Advent Calendar 2020 22日目の記事です。遅刻して申し訳ありません。 Rustという言語でrurubyというRuby処理系の独自実装を作っており、今回はその紹介をします。RustRubyということでrurubyという安直なネーミングにしましたが、発音しずらい上にRubyと紛らわしく恐れ多いので後悔しております。もう少し技術的なポエムを言語実装Advent Calendar 2020に書きましたので、興味のある方はそちらもご参照頂ければ。 Rustについて Rustは比較的新しいプログラミング言語で、C言語と同様の静的型付け言語です。最新の研究成果を取り入れた柔軟で堅固な型システムと型推論機構を持ち、高速かつメモリ安全・スレッド安全な言語となっています。また、高度な抽象化機能を実行速度を犠牲にしないやり方でうまく取り入れていて、言語処理

    Ruby処理系自作入門 - Qiita
    Watson
    Watson 2020/12/24
  • ruruby: RustでつくっているRuby - Qiita

    この記事は言語実装 Advent Calendar 20202日目の記事です。前回はκeenさんの「自作コンパイラをブラウザ上で動かす」、次回はmitsuchiさんの「LLVM の Kaleidoscope を育てながら作る」です。 はじめに みなさま、ご無沙汰しております。monochromeです。rurubyという名前でRuby処理系のRustによる実装を行っていて、昨年のAdvent CalendarでRustでつくる(つくれるかもしれない)Rubyという記事を書きました。今回はこの1年間の進捗と、今後の予定などを書いてみます。 レポジトリはこちら。実行にはRustツールチェーン(nightly channel)のインストールが必要です。 https://github.com/sisshiki1969/ruruby 毎度の宣伝ですが、「プログラミング言語処理系が好きな人の集まり」とい

    ruruby: RustでつくっているRuby - Qiita
  • 1