2015-01-01から1年間の記事一覧

Javaのバイトコードで遊ぶ (ラムダ式)

Javaのバイトコードで遊ぶ (Hello World) 以下のメソッドのカリー化を例にバイトコードでラムダ式を作ってみます。 int add(int a, int b, int c); ラムダ式の生成にはinvokedynamicと、そのブートストラップにLambdaMetafactory.metafactoryを用います。 me…

Javaのバイトコードで遊ぶ (フィールドとメソッドの定義)

Javaのバイトコードで遊ぶ (Hello World) まずはフィールドの定義について。 ClassWriter.visitFieldを用います。 こんな感じです。 // public static int a = 100; cw.visitField(ACC_PUBLIC + ACC_STATIC, "a", "I", null, 100); // public static String;…

Javaのバイトコードで遊ぶ (例外処理)

Javaのバイトコードで遊ぶ (Hello World) 例外の送出と捕捉を試してみます。 try-catchブロックの定義にはvisitTryCatchBlockを用います。 visitTryCatchBlock(Label start, Label end, Label handler, String type) startとendは、例外ハンドラのスコープの…

Javaのバイトコードで遊ぶ (stack map frame)

Javaのバイトコードで遊ぶ (Hello World) stack map frameについては以下を読みました。 https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7.4 http://download.forge.objectweb.org/asm/asm4-guide.pdf java - Is there a better ex…

Javaのバイトコードで遊ぶ (条件分岐と繰り返し)

Javaのバイトコードで遊ぶ (Hello World) 条件分岐と繰り返しはジャンプを使います。 ジャンプ先の指定はLabelを用います。ジャンプ元ではインスタンス化したLabelを指定します。 visitLabelにLabelインスタンスを渡せば、そこがラベルになります。 ジャンプ…

Javaのバイトコードで遊ぶ (四則演算)

Javaのバイトコードで遊ぶ (Hello World) 加算や減算などの基本的な数値演算をやってみます。 まずはintやfloatの計算。 定数値をスタックに積む命令にはバリエーションがあります。 値の大小に応じて、BIPUSHやSIPUSHを使う方法や、visitLdcInsnで任意の値…

Javaのバイトコードで遊ぶ (メソッド呼び出し)

Javaのバイトコードで遊ぶ (Hello World) INVOKEDYNAMIC以外のINVOKE系の命令を使ってみます。 INVOKESTATICはstaticメソッドを呼び出します。引数を順にスタックに積んでから呼び出します。 呼び出し後は引数がスタックから取り除かれ、戻り値がある場合は…

Javaのバイトコードで遊ぶ (Hello World)

ASMを使ってJavaのバイトコードを生成して遊んでみます。 まずはその準備について。 Javaのバージョンは1.8.0_60、ASMのバージョンは5.0.3です。 生成したバイトコードを実行したり、クラスファイルに書き込みたいので そのためのユーティリティ(ExampleUtil…

Fixity Resolution

https://www.haskell.org/onlinereport/haskell2010/haskellch10.html#x17-18100010.6 Haskellのリファレンスに掲載されている 結合性の解決方法を示したコードを動作確認のために動かした時のメモ。 以下は上記のページに掲載されているコード。 import Con…

xkbを使って修飾キー有のキーバインドを設定する

Windowsのキーバインド設定ツールとして以前から KeyExtension というフリーソフトを使わせてもらっています。 変換キー + U でHome、変換キー + H でLeft、といった感じの設定ができます。 Vimでコードを書く時は困らないのですが、Eclipseなど他のエディタ…

Elementary OSにEclipseを導入する

インストール自体はファイルをダウンロードして適当な場所に配置すれば良いです。 ただEclipseのツールチップが、背景色も文字色も黒くなってしまい、全く内容が読めず 使い物になりませんでした。 ウェブを検索したところ、次のページを見つけました。 http…

Elementary OSをセットアップする

Elementary OSを自分用にセットアップした時のメモです。 英語版のまま使い、日本語が入力できれば良いという程度の要件です。 事前準備 VirtualBoxのゲストOSとして使う場合は、3Dアクセラレーションを 有効化しておきます。これをしておかないと、OS起動中…

VagrantのBoxを作成する

VagrantのBoxを作成してみました。 Windows8.1なのでHyper-Vでやろうかと思いましたが、少し試してみたところ上手くいかなかったのでおとなしくVirtualBoxを使っています。 https://docs.vagrantup.com/v2/boxes/base.html https://docs.vagrantup.com/v2/vi…