1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

RubyKaigi参加時のメモ。
せっかくなので内容を整えて公開します。

Ruby Taught Me About Encoding Under the Hood

  • 文字コードの歴史について学び、Unicodeの便利さを実感
  • 書記素クラスタ
    • ユーザーが1文字として認識する、見た目の1文字のことを書記素クラスタといいます
    • 見かけが一文字でも実際は複数のバイト文字のことがあり、カーソル移動時に不具合が起きやすい
  • rubyは、onigumoを使って正規表現している
  • String#grapheme_clusters メソッドあり

Introducing Type Guard to Steep

  • RBSメンテナーの話。RBSは型に関する定義ファイル。
  • SteepはRBSを使ってRubyの型検査を行うライブラリ。
  • Steep
  • type guard
    • 変数の型を特定すること。Type narrowingに使うメソッドや式のこと
  • Steepはpresent?をtype guardとみなさない
  • UnionType=複数の型の組み合わせ
  • 現在のunion typeに対するtype guard対応状況
  • 特定条件を満たしたメソッドを型分析扱いする案
  • アノテーション
    • 変数や関数に型情報を付与すること
  • 提案:ユーザー定義type guardの導入

A side gig for RuboCop, the Bookworm code crawler

  • Chef(インフラ構成管理ツール)とFoodcritic(Chef用Linter)の話
  • RuboCopはリファクタツールとしても利用可能。
  • cookstyle.yml、rubocop-ast(RubyコードをASTとして解析・操作するライブラリ)の紹介
  • Debian 12「Bookworm」コードネームの由来。

Goodbye fat gem 2025

  • fat gem=ビルド済みgem。コピーだけで利用可能だが開発側からは廃止したい動き。
  • 理由:
    • 最新Ruby対応が遅れる
    • フォールバック対応
    • 脆弱性対応が遅い
    • メンテナンス負担大(クロスコンパイル必要)
  • Pythonのwheel
    • ビルド済み配布フォーマット
  • rake-compiler-dock、rubyinstaller2、rubygems-requirements-systemの話
  • Rubygems用wheel開発の動き

Ruby's Line Breaks

  • 改行による文の切り分けルール。
  • Automaton(プログラミング言語の要素)
  • lookahead set
    • 先読み用の未処理入力集合
  • lexstate(できれば消したい)
    • 字句解析時の状態
  • 改行コードを変数に入れる例は通常ない

State of Namespace

  • 今提案、取り組んでいることの話
  • 同じライブラリの複数バージョンを同時ロードするためのnamespace提案
  • RClass、rb_classext_tの話。
  • autoload
    • 遅延ロード機能
  • RubyVERSION
  • killed:9
    • make examを実行するとき、ランダムでmacで起きる。Linuxでは起きないが代わりにSEGVが起きる
  • dlopen
  • make check、make examなど、rubyのコンパイルする時のコマンド

Parsing and generating SQLite's SQL dialect with Ruby

Performance Bugs and Low-level Ruby Observability APIs

  • X-Ray
    • 詳細分析や透過的可視化の意味
  • N+1問題やスレッド・接続問題。
  • tracepoint API
  • NEWOBJ Event
  • GC
  • flame profiling
  • debug-inspector
  • GVL profilerなど

Dissecting and Reconstructing Ruby Syntactic Structures

  • grammar(文法)、syntax(構文規則)、semantics(意味)
  • Syntactic Structures
    • どう組み合わせれば意味のある文章になるか。ということ。トークンを特定の順序で配置するルールのこと
  • sematics
    • コード的に正しいプログラム。理論的に正しいかということ。意味のある文章か
  • parse.yの役割
    • rubyを構文解析する構文とトークンを書いたファイル。これをLarma パーサージェネレーターを読み込ませて解析することができる
  • expression
    • 主に四則演算やメソッド呼び出し
  • statement
    • メソッド定義とか。関数呼び出し、counter++とか。戻り値がないもの
  • argとprimaryの区別
  • role of arg メソッドの引数の役割
  • role of primary リテラルとか
  • Lramaによる構造整理
    • 複雑さを軽減できる
  • prismとの互換性維持

Keeping Secrets: Lessons Learned From Securing GitHub

  • candidate methods
    • 注目すべき候補メソッド
  • envコピーの方法、環境変数管理
  • intake→triage→remediation→variant analysis→disclosureプロセス
  • object.send safely?
  • code scnanning toole
  • 環境変数を保持する方法はいくつかある
    • envファイルに書くなど
  • 最も良いのは。minimal footpoint of your pc memoryに保存すること

Writing Ruby Scripts with TypeProf

  • 開発中のrubyのエディターのこと。似たようなものにrbs-inlineがある
  • 型エラー指摘機能、定義ジャンプ
  • エラーレベルを変更できる機能を追加した
  • ディレクトリごとに解析単位を選べるようにした
  • 継承探索の制限
    • rubyの定数探索はややこしい仕様になっている
    • 継承まで探すと無限ループになることがあり、継承までやると大変なので継承まで探すことをなくした

RuboCop: Modularity and AST Insights

  • RuboCop拡張の中央集権化
    • 今まで非公式で拡張を作っていたが、カスタムコップは、みんながバグとかそのままコピペして広めちゃってる
  • lint_roller導入
  • プラグイン形式変更(plugin化)
  • 新しいrubocop-plugin-generatorバージョン6を使ってプラグインをつくるようにしよう
  • rubocop 1.75以上を使いましょう
  • rubocopは1.62からPrismを使うようにしてた
  • rubyLSPの機能がrubocopでも使えるようになるように作っている
  • rubocop裏側のパーサーについて、parser gemでなくこれからPrismtranslation layerを使うようにした方がいいのかなと思ってる
  • AST
    • 抽象構文木
  • CST
    • 具体構文木

Speeding up Class#new

  • newメソッドは、インスタンスを作り、initializeにパラメータを渡し、インスタンスを返す
  • newメソッドのCとRuby間呼び出しの高速化
    • rubyのnewから始まり、Cが呼び出され、rubyのinitializeが呼び出される。違う言語が呼び出されるのでその分タイムラグが生じる
    • 転送制御のコストが低くなるので、全体で早くなる
  • インラインキャッシュ利用
    • メソッド呼び出しを早くすること
    • 親クラスを増やすほど検索するクラス増えて、メソッド検索にかかる時間が増える。なのでキャッシュを作るといい
  • キーワード引数による遅延要因
    • rubyの呼び出し規約は、Ruby:Stack KVに基づく
    • Cにはキーワード引数はないので、stackをハッシュに変換し、一つの引数として渡す。Cからruby呼ぶ時、ハッシュをスタックに再度変更し、時間がその分かかる
  • initializeはprivateメソッド
    • sendを使わずにprivateメソッドを呼び出す必要がある。sendも使えないので
  • primitive導入でsend不要化
  • rubyでruby使わずにClass.neww呼び出すことができました
    • インラインの欠点
    • メモリを圧迫する

# The Implementations of Advanced LR Parser Algorithm

  • LramaはRubyの構文解析器(パーサー)であり、バージョン0.7で新たにIELRアルゴリズムを実装している
  • IELRは「読み込んだトークン(先読み情報)を利用して次の処理を決める」方式で、より多くの文脈を参照して解析の判断を行う
  • 一般的なLRパーサーは入力を前から順に読み進めて(前向きに)解析を行うが、状態遷移や還元の判断で先読みが重要になる
  • 先読み(lookahead)を用いて、次のトークンに基づき「シフト(shift)」か「還元(reduce)」か、それ以外(エラー)かを判断する
  • コンフリクト(解析の曖昧さ)は主に次の2種類:
    • shiftとreduceの衝突(shift/reduce)
    • reduceとreduceの衝突(reduce/reduce)
  • 「mysteriousconflict」という用語が登場しており、通常の先読みだけでは説明しにくい曖昧ケースを指すものとして扱われている
  • lookaheadset(先読み集合)という概念を扱い、どのトークン群を先読みに使うかを明確にしている
  • 文法上の具体的な要素としては cond_stmt や method_call などの構文記号が対象となる
  • 互換性の問題にも注意を払いながら実装を進めている
  • 実行時の振る舞い関連では、rescue Interrupt によって Control+C(割り込み)をキャッチして中断処理を行うようなケースを考慮している
  • Ruby特有の「4種類の do」など複数のdo構文バリエーションも正しく構文解析できるようにしたい、という要望がある。

Analyzing Ruby Code in IRB

  • 確かに、RailsのIRBは細かく言われてみれば確かに色がついているなと思った
    • それを裏側で、なにに対してどのように色をつけるか判定をしており、裏側のメンテナーの努力の結果なのだと思いました

Matz Keynote

  • AIの時代の言語について
  • アルファシンドロームについて:犬は、甘やかしすぎると群れのボスだと勘違いする
  • AIは得意なことと苦手なことがある
    • シンプルなコーディングは得意
    • 交渉や要件定義は苦手
  • 自分たちはコーディングしなくなる?自分たちがAIのために働くことになる?
    いやAIは道具。役割分担はきちんと考えよう
  • Reverse アルファシンドロームとは:相手ができないことは自分がやる。そうするとできない方が偉くなる。奉仕みたいになる
    • 私たちはreverse アルファシンドロームについて気をつけないといけない
    • 自分がやりたいことでもAIが得意なことは任せるというのは、よくない
    • 主導権を誰が握るかを考えること
  • AI時代のプログラミング言語について:単純な同じアーキテクチャだと作りやすい
  • 言語開発には使い方が難しい
  • AI時代、人間の言葉を使うのが主流だな(AI時代に使われる言語)
  • 自然言語は冗長すぎる
  • 簡潔、明確、論理的な言語だと研究が進むだろう
  • 相補完的な関係が人間とAIの間に成り立つだろう
  • 型のことか?→流行ってるけど未来において必要?大体エラーになっても大したことないエラーだよね
  • 人間でも気づくしAIにもいらないんじゃないかと考えている
  • 型は人気だね→でも本当は難しいことをするのが楽しいと考える人がいる。それが原因?
  • Rubyが楽しいから選んでいる私たち。楽しいからやってるので楽しいと感じることを選べばいい
  • AI時代で、PG言語は、簡潔さ(最小限、わかりやすい)、表現力、拡張性を兼ね備えていると良いと考える。まさにRubyのことだ!
  • AIを活用するには正しいコードを教えないといけない
    • みんなパフォーマンスが好き
    • みんな色々工夫して早くしている
  • 言語開発者は誰でもwelcomeにしてみんなでやっていくことが必要
    -やりたいことがあればいつでも開発者になる
  • Ruby 4.0予定
    • 実験的な名前空間を分けるようにする
    • 実験的なYJITを導入する
    • Method JITをやる。コンパイルしたコードを保存できるようにする

おわりに

雑なメモですが公開。
わからない単語が非常に多かったです。来年参加する時には、もう少し理解できるようになっていたい。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?