クラなんとか or くらなんとか or cla なんとかの日記

2011-11-27

2011-11-14

ギークバーに行ってきた

今回は,JVM について調べていた.

hello.j

.class public hello
.super java/lang/Object

.method public <init>()V
   aload_0
   invokenonvirtual java/lang/Object/<init>()V
   return
.end method

.method public static main([Ljava/lang/String;)V
   .limit stack 2
   getstatic java/lang/System/out Ljava/io/PrintStream;
   ldc "Hello, World!"
   invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
   return
.end method

ちょっと真面目に書くとこんな感じ

public class hello extends java.lang.Object {
    public void hello() {
        super();
    }

    public static void main(java.lang.String[] args) {
        java.io.PrintStream p = java.lang.System.out;
        java.lang.String s = "Hello, World!";
        p.println(s);
    }
}

続きを読む

2011-10-24

ギークバーに行ってきた

ということで,pir です.

# parrot hello.pir
.sub main
    say "Hello, World!"
.end

なんだこれ.リッチ

続きを読む

2011-10-17

名古屋ギークバーに行ってきた

麻雀回でした

とりあえず,Perl6 のNagoya.pm でやってた続きをする.

必要な機能は,テストから調べる.ことはわかったので

普通のプログラミングで必要なことを考える.

今は遅いのをなんとかしたいので,プロファイラかな.ぐぐる.

docs/dev/profiling.pod - Profiling Parrot

# Copyright (C) 2001-2005, Parrot Foundation.

=head1 NAME

docs/dev/profiling.pod - Profiling Parrot

=head1 DESCRIPTION

このファイルは,Parrot のプロファイリング実行部分の使用方法について記述している.

=head2 Summary

プロファイル実行環境は,Parrot の一部として作られており,PIRコードのボトルネックを発見できるように設計されています.HLL(?)プロファイルをサポートするために実装されていますが,現在では制限があります.C<parrot>バイナリィに C<-Rprofiling> や C<--runcore profiling>を渡すことで,コードはプロファイリング実行環境下で実行されます.出力ファイルの位置とフォーマットは,次に記述されるように環境変数によって決定されます.プロファイリング実行環境が関連する環境変数を発見できない場合は,次で書かれるようなデフォルト値を使います.

=head2 環境変数

=over 4

=item C<PARROT_PROFILING_FILENAME>

もしあれば,出力が書かれるファイルの完全な名前を決定します.Parrot は,書くために開く前にファイル名が存在するかどうかをチェックをせず,以前のプロファイルが含む既存のファイルを偶然にも上書きしてしまうでしょう.

値が設定されていなければ,Parrot はファイルをC<parrot.pprof.X> に書き出します.ここで,X はParrot プロセスのPID です.プロファイリング実行部分が存在する場合,プロファイルが書かれるときにアナウンスするメッセージを出力します.

この変数は,C<stdout> や C<stderr> という特殊な値を持つこともできます.それらの値のどちらかが(大文字小文字に関係無く) 見つかった場合,Parrot はプロファイリングの結果をstdout か stderr に出力します.

=item C<PARROT_PROFILING_OUTPUT>

これは,プロファイルを含む出力のタイプを決定します.現在のオプションは,C<pprof> と C<none>です.C<pprof> は,デフォルトであり,ASCII 文字であるため,人間が読めるような形式です.これは,tools/dev/pprof2cg.pl によって後処理して,Callgrind 互換のフォーマットに変換できます.C<none> は,結果ファイルを書き出しません.これは,主にプロファイリングの実行部分自身のテストや最適化にとって有用です.これは,PIR とHLL コードをプロファイルしたいユーザにとってあまり意味がないことを期待されています.

=item C<PARROT_PROFILING_ANNOTATIONS>

これは,PIR アノテーションがプロファイルの一部として記録されるように設定します.アノテーションは,HLL コードをプロファイリングするのに必要ですが,プロファイリングの実行部分をより遅くします.デフォルトでは,それらは無効です.それらを有効にするために,この値を設定します.

=item C<PARROT_PROFILING_CANONICAL_OUPUT>

これが設定されている場合,プロファイリングの実行部分は,全てのアドレスを1つの定数値として,全ての時刻を1として記録します.このオプションは,与えられたコードの部分が常に同じプロファイルを正確に生成することを保証する方法があると便利な場所,主にテスト用に便利です.この機能を有効にしたい場合,多分ランダムなハッシュシードに起因する非決定的な振舞いを避けるために C<--hash-seed 1324> を使ってParrot に特定のハッシュシードも渡したいと思うでしょう.

この変数はテストやプロファイリングの実行部分から離れては有用ではありません.そしてユーザのコードのホットスポットを見つけるために殆ど確実に助けにもなりません.

=back

=cut

つまり,C<parrot>バイナリィに C<-Rprofiling> や C<--runcore profiling> を渡すということですね.

で,よく見ると <workdir>/rakudo-star-2011.07/parrot-3.6.0/tools/dev/pprof2cg.pl に,pod もあった.

$ parrot -Rprofiling <workdir>/rakudo-star-2011.07/install/lib/parrot/3.6.0/languages/perl6/perl6.pbc <scriptname>
$ perl <workdir>/rakudo-star-2011.07/install/lib/parrot/3.6.0/tools/dev/pprof2cg.pl parrot.pprof.XX

pprof2cg.pl は,Callgrind-compatible 互換ファイルを出力するらしいので

valgrind をインストールしたけど,そもそもcallgrind のファイル見るのは,

kcachegrind だった…

$ sudo brew install --HEAD valgrind     # Lion だとhead しか対応してなかった
$ sudo brew install qt --with-qt3support
$ rehash
$ wget http://kcachegrind.sourceforge.net/kcachegrind-0.7.0.tar.gz
$ tar xf kcachegrind-0.7.0.tar.gz
$ cd kcachegrind-0.7.0/qcachegrind
$ qmake
$ make
$ ./qcachegrind.app/Contents/MacOS/qcachegrind

これで parrot.out.$PID ファイルが読めます.

ご参考

で見てみたんだけど,

f:id:clairvy:20111024220148p:image

これは,Perl6;Perl6Role;ACCEPTS(Role.pir) に時間がかかってるんですよね?

次はpir を読む流れ?

PEG を見よというおつげを頂いた

  • 10/22 valgrand の辺を追記

2011-09-18

Nagoya.pm #01 をやりました

ニューキャストさんとこで,

Nagoya.pm#01 を開催しました.

なるべく質問しやすいようにしたいと思ってやってみたけど

どうだったかな?

開催してみれば,2人でしか居ないかもと思いきや,

意外にも遠方から来てくださる方もいたし,

時間も余っちゃうんじゃないかと思ってたのですけど,

飛び入りもあったりして,参加者のみなさまに感謝です.


で,今後なんですけど,11月に第2回を開催したい感じです.

あと発表者も募集中なので,何かあれば連絡してください.


次回は,Apache の設定の話がいいとか,Git の話がいいとか言われてます.

Nagoya.pm の明日はどっちだ?

DevQuiz 回答さらし - webgame

基本スライドパズルをさらすことはわかってるけど,

あえてwebgame にしてみる.

無駄にjQuery を使ってます.

ようは,回答が書いてあるからそれを使った感じです.

body から取れればrequest が減るので速くなるかもな〜

ということで,誰か教えてください.