Javaバイトコード復習 (0) - 導入

ちょっとアイデアが出たのでバイトコード上でのモデル検査をやろうかなと思ってます。ただ、バイトコードを最後に触ったのが4年前だかですっかり忘れてたので、復習の過程をまとめていこうかと。バイトコードはバイナリエディタで書くのがつらすぎるので、Ja…

フローだけじゃなくて

LOG instanceof org.apache.commons.logging.Log debug = LOG#debug(*) except { debug on { LOG#isDebugEnabled() = true } }LOG.debug(...) を探すけど、LOG.isDebugEnabled() が確実にtrueである(on {...})やつは除外する感じ。つまり、isDebugEnabled() …

Amazon

欲しい本を見かけてAmazonのカートに追加 Amazonのカートがすごい値段になっていることに気付く レジに進むのをためらう 時間が経ってカートの存在を忘れる 1へ カートの中身: 4日で学ぶモデル検査 (初級編) (CVS教程 (1)) - 産業技術総合研究所システム検…

発明

知的労働で一番コストもリスクも高いのが「発明」だと思います。で、私の感覚だと「エンジニアリング」という言葉は知的労働に含まれる「発明」を極力抑えて、常に一定の成果を出す技術という(単純に工学とはまた別の)イメージがあります。常に「発明」を行…

メモ

朝の時間がないときに思いついた。ふつーにエスケープ解析して、「エスケープしてないのに〜してる/してない」という考え方をするのが一番か?んー、でもレシーバオブジェクトに値がとられた瞬間にグローバルエスケープ解析しないとだめだから難しいかも。

可変長引数ではAuto Unboxingが優先される?の理由

可変長引数ではAuto Unboxingが優先される? - kaisehのブログへのツッコミ。米欄に書こうとしたら長すぎたのでこちらに。 ところが可変長引数の場合は、評価の優先順位が違うみたいです。次のようにプログラムに書き足すと、 public class Test { static vo…

いまいち

↓だとボキャブラリ増えすぎる…。呼び出しだけじゃなくてメソッドの引数に渡すときとかいろいろあるわね。

もうちょっと単純に考える

裏側の理屈はともかくとして、もうちょっと自分が使いやすいように考えてみる。やりたいこと すべてのjava.io.InputStreamは close()が呼び出されなければならない (呼び出されないものを探して警告) 単純に書いてみたもの // すべてのjava.io.InputStreamは…

フロー解析

java.io.InputStream型の値を作り出したら、それに対して.close()が呼び出されない(可能性が少しでもある)ものを探す。っていう妄想。 stream INSTANCEOF java.io.InputStream stream MAY NOT FLOW method WHERE { method.expression HAS stream method.targ…

φ-function の逆

SSA変換するとbasic blockの合流点でφ-func入れることがあるけど、basic blockの分岐点でφ-funcの逆みたいなものを導入したらどうかな Hoge h = ...; /* φ(h.0:HogeExt, h.1:Hoge) <- h */ if (h instanceof HogeExt) { /* h.0 <- (HogeExt) h; */ ... } /* …

フロー解析について考察メモ

下の二つだけうまく表記できれば、現行の構造検索にフロー記述を含められるかも。 IO Monad φ function 要考察。多分ちゃんと作れば、自動リファクタリング(メソッド抽出)とかの入り口も作れそう。

ドキュメントを書く速度

たいていの場合、 ドキュメントを書ける人口 ドキュメントを読める人口 > プログラムを読める人口 というのが今の構造だと思います。需要と供給のバランスが悪いので単価も高い(?)のかしら。ごくまれに ドキュメントを書く速度 ドキュメントを読む速度 とい…

ドキュメントがなくても大抵のソフトウェアは動く

でも、大抵のシステムは動かない

美しい世界

ビューティフルコードを読み始めました。ビューティフルコード (THEORY/IN/PRACTICE)作者: Brian Kernighan,Jon Bentley,まつもとゆきひろ,Andy Oram,Greg Wilson,久野禎子,久野靖出版社/メーカー: オライリージャパン発売日: 2008/04/23メディア: 大型本購…

立ち戻る

最近よく目的と手段が入れ替わってることがあるなーと自分の行動を反省することが多々あるので、自分の行動プロセスを明文化して自らに定着させようという試み。以下メモ。

Javadocを書かない

前回はJavadocを書く - しげるメモというタイトルで話を進めましたが、今回は逆にJavadocを減らすプラクティスについてメモがてら。私は別にJavadocを書くのが好きなわけではなく、単純に書いたほうがめんどくさくないと思うのでそうしてます。ただ、Javadoc…

改行重要

eclipse.ini -vm C:\Software\Java\jdk1.6.0_06\bin\javaw.exe -startup plugins\org.eclipse.equinox.launcher_1.0.100.v20080509-1800.jar --launcher.library plugins\org.eclipse.equinox.launcher.win32.win32.x86_1.0.100.v20080509-1800 -showsplash …

Javadocを書く

最近は時間を作ってEffective Javaの2版をよんでます。Effective Java (Java Series)作者: Joshua Bloch出版社/メーカー: Prentice Hall発売日: 2008/05/08メディア: ペーパーバック購入: 6人 クリック: 65回この商品を含むブログ (42件) を見るほとんど1版…

プログラミングファーストの疑問

どうやって異常系の検出してるんだろ? 天才系: 正常系書いてるうちに勝手に網羅できるくらい思いつきますよ 後回し系: フレームワークを使うと後付で異常系を簡単に書けますよ。顧客に言われたらすぐに対応します クラッシュ系: 500 Internal Server Error…

Java/EclipseでDSLサポート (4) - スキャナエラーの表示

立て込んでてイマイチな進捗。とりあえず今回は簡単なフィルタ - しげるメモで作ったDSLに対して、字句レベルのエラーを表示してみようと思います。完成品がコレ。

Java/EclipseでDSLサポート (6) - 意味エラーの表示

前回の「Java/EclipseでDSLサポート (5) - パースエラーの表示 - しげるメモ」までで構文エラーを検出できてますが、今回は構文が持つ意味にまで言及してみようと思います。ListFilterに対して、次のようなHogeクラスのリストを食わせる前提で。 public clas…

Java/EclipseでDSLサポート (5) - パースエラーの表示

サクサク進む。直前の「Java/EclipseでDSLサポート (4) - スキャナエラーの表示 - しげるメモ」から今度は構文レベルのエラーを表示してみます。完成品。

そろそろ

そろそろ本気出す。今週はオートコンプリートまで行きたいところ。

簡単なフィルタ

こんな言語(?)でやってみようかなと。 class Hoge { public int a; public int b; } List<Hoge> list = new ArrayList<Hoge>(); ... List<Hoge> filtered = ListFilter .source(list) .includes("a != 0") .includes("b > 0") .excludes("a > b") .toList(); includes("conditi</hoge></hoge></hoge>…

Javaが不得意なこと

サンプルに使うDSL考えてて、あまりに思いつかないので一人ブレスト。JavaやっててついDSLにしちゃう部分。 複雑なデータ構造の構築 duck typingのほうが楽そう データ構造の検索 論理型言語が得意で、手続き型言語は向いてない シンボル参照 シンボル定義が…

Java/EclipseでDSLサポート (3) - DSLとして使われる文字列リテラルの判定

前回は見つけた文字列リテラルを片っ端からDSLとみなして警告をつけていましたが、今回からちゃんとDSLっぽくなる予定。まず、すごく簡単なDSLの仕組みを作ります。

Java/EclipseでDSLサポート (2) - コンパイルプロセスへの介入

次に、Eclipse JDTの拡張ポイントを利用してコンパイルプロセスに介入していきます。 調べながら同時に書いていくのでゆっくりと。

Java/EclipseでDSLサポート (1) - DSLの形式

やっとこさ時間ができたので、JavaでDSLを(やむを得ず)使う場合にどうやってEclipseからサポートするか考えて見ます。こんな感じがいいんじゃないのかなというところ。 Hoge dsl = HogeParser.parse("<Hoge-DSL>", arg1, arg2,...); つまり、 メソッド呼び出し + 文字</hoge-dsl>…

水泳

運動不足なので泳いできました。アップのつもりで泳いでたのに200Mで息が上がってびっくり

Ganymede

やたら落ちる やたら起動までの時間が短い 差し引き0