'fileutils'結果はこんな感じです。よって何が実行されようとしているかがよくわかりますね。これらの機能を使うと、スクリプトがロードされた瞬間にブレイクポイントを仕込む、ということが可能になります。いうメソッドを作ってみましょう。パターンマッチ出来た方が便利かなと思ったためです。'fileutils'実行結果です。exitちゃんと、これからロードするファイルに対してブレイクポイントを設定できました。やってみたくありませんか?(場所指定ブレイクポイントは、だいたいこれでいいとして(出来た!)、ではメソッド指定ってどうやりますかね。拡張を用いて、デバッガのブレイクポイントをどうやって作るのか、ということを題材に、使い方をご紹介しました。これくらいの記事なら、ちょっと気の利いた人なら書けそうです。本稿では差別化を図るために、これをどうやって実装したか、その背景とテクニックをご紹介します。これはさすがに私しか書けないでしょう。「筆者はこのとき何を考えていたか答えなさい」ってやつですね。導入したかった機能でした。決められなかったんですよね。考えちゃって、あーでもない、こーでもないと悩んで、時間がかかりました。欲しいって言う人も居ないし。今回、入った原因は2つ、外圧と割り切りでした。そこらで入れてありました。ブレイクポイントを実装するための仕組みです。改善を自慢したい)で、削除したんですよね。同じことは、選択的に命令書き換えすれば出来るだろう、って。そのインターフェースを用意していなかった。正確には、用意をしていたんだけど、使おうとするととても使いづらかった。デバッガを作るために使っていたそうなんですよね。復活させろー、というリクエストが来まして。戻すのは、いろいろな理由で良くない、ということで、本腰を入れて考え始めました。指定できないようにしたことです。持たせた、というのがキモです。命令に変換しておきます。命令に置き換えています。内部的にフィルタする仕組みを導入しました。この辺はソースコードをちゃんと説明しないとわかりづらいので、雰囲気だけ、お伝えしました。やってデバッガのブレイクポイントを実装するか、という説明になってしまいました。お楽しみ頂けたでしょうか。デバッガを作る以外にも、いくつか使いようがあります。イベントを用いると、実際にどこでソースコードがロードされたかがわかります。利用を検知することができます。検出する、などといった応用ができるかもしれません。差し替えることはできません。用法用量を守って、楽しくお使い頂ければと思います。可能なら入れたいと思っています。どちらも明確に用意したいと思っています。その際、渡すパラメータ一覧なんかが取れると良さそうだと思っています。拡張については、この辺で終わりにします。導入もう誰もここまで読んでいない気がしますが、もう少しだけ続けます。いう、メモリ管理のための新しい仕組みを導入しました。メモリ管理が、また複雑になりました。大雑把に紹介すると、世代別コピーGCのテクニックを使うことで、対応済みのオブジェクトについて、短寿命なオブジェクトのために確保されたメモリを効率よく管理する仕組みを導入した、というものです。ついて、かいつまんで紹介します。コードばかりになります。メモリ管理というとガーベージコレクタ(GC)を思い浮かべると思います。性能に問題があったことが、その理由の1つであったかと思います。アルゴリズムが性能に問題を与えることは少なくなったのではないかと思います。参考文献としてあげておきます。オブジェクトの寿命管理をします。今回は、その話とは(あんまり)関係ありません。任せて、その際に生じるメモリ割り当て・解放の話が今回の主役です。メモリ領域を割り当てられます。固定長のメモリ領域になります。最低限割り当てられる、ととらえても良いと思います*1。いうヘッダが含まれています。いう、オブジェクトのクラス情報が含まれています。クラスの情報がついているわけですね。オブジェクトには型があります。どのように利用するか、というデータ型です。