prog

switch on enum

ネタが古いですが。以下をコンパイルした時に生成される class ファイルはいくつ? class C { enum E { } void m() { switch ((E)null) { } } }

クイズ

'0' == 48 のとき、次の出力は? #include <stdio.h> int main() { puts( "0" "\0" "\\0"); puts( "\60" "\060" "\00060"); puts("\x30" "\x030" "\x00030"); }</stdio.h>

なかなかアグレッシブ

$ cat test.c #include <stdio.h> #include <limits.h> int main() { int x = INT_MAX, y = INT_MAX; x = x * 10; x = x / 10; y = (y * 10) / 10; printf("%d <-> %d\n", x, y); } $ gcc-3.3 test.c && ./a.out -1 <-> -1 $ gcc-4.0 test.c && ./a.out -1 <-> 2147483647出てく</limits.h></stdio.h>…

今更

びっくりするくらい時流に乗れていない僕のことですから全く関知していなかったのですが、Java にクロージャが入るとか入らないとかいう話でこんなのが出てたんですね(ひょっとすると、これももはや最新ではないかも知れません)。個人的には、わざわざ(恐…

判定やいかに

Java 1.5 ということでひとつ。 (Byte) (byte)-1 == (Byte) (byte)-1 (Character) (char)-1 == (Character) (char)-1 (Short)(short)-1 == (Short)(short)-1 (Integer) (int)-1 == (Integer) (int)-1 (Long) (long)-1 == (Long) (long)-1 (byte)-1e100 < (by…

なんか変

java.lang.Object.run() て。 $ cat Main.java class Main<T extends Object & Runnable, S extends T> { public void callRun(S x) { // ここの S を T に変えると正常に動く x.run(); } public static void main(String[] args) { new Main<MyRunnable, MyRunnable>().callRun(new MyRunnable()); } } class MyRunnable implem</myrunnable,></t>…

なんか変?

配列だと怒られない不思議。 $ cat Data.java class Data<T> { T scalar; T[] array; static void assign(Data x) { x.scalar = "hoge"; x.array[0] = "hoge"; } } $ javac Data.java Data.java:5: 互換性のない型 検出値 : java.lang.String 期待値 : capture </t>…

てきとークイズ

次の Java プログラムに 1 単語だけ書き足して、いつも停止しないようにしてください。書けるのはアルファベットだけです。 class Main { static long one = 1; public static void main(String[] args) { new Thread(new Runnable() { public void run() { …

Thread-safe

「スレッドセーフ」という保証は、具体的には何を保護しているか。 import java.util.*; public class Main { static Vector<Object> vec = new Vector<Object>(); static ArrayList<Object> arr = new ArrayList<Object>(); public static void main(String[] args) { new Thread(new Runnab</object></object></object></object>…

Vector vs ArrayList

$ cat Main.j #define STR(x) #x #define STR_DEEP(x) STR(x) import java.util.*; public class Main { public static void main(String[] args) { Object obj = new Object(); TYPE<Object> list = new TYPE<Object>(); long time = System.currentTimeMillis(); for (int </object></object>…

へぇ

CCured について調べていたら、ポインタを初期化する際に malloc() に sizeof の値を渡す場合はどうのこうの、という話が出て来た。で思い出したんですが、id:kosak:20060801 で「初期化子から初期化対象の変数が見えるとか意味わからん」的なことを書いたけ…

リフレクション (2) - private

import java.lang.reflect.*; class Main { public static void main(String[] args) throws Exception { Constructor init = Hoge.class.getDeclaredConstructors()[0]; Field ans = Hoge.class.getDeclaredField("answer"); init.setAccessible(true); ans…

リフレクション (1) - final

import java.lang.reflect.*; class Main { public static void main(String[] args) throws Exception { Hoge hoge = new Hoge(); System.out.println(hoge.x); Field f = Hoge.class.getField("x"); f.setAccessible(true); f.setInt(hoge, 2); System.out…

try と catch と finally

某日記(ネタ帳?)より勝手にインスパイヤ(すみません...)。Java で try { throw new RuntimeException("hoge"); } catch (Exception e) { throw new RuntimeException("fuga"); } finally { throw new RuntimeException("piyo"); }と書いたら何が投げら…

goto

Java でラベルを付けられるのはループの文だけかと思いきや、本当は何でもいいらしい。という訳で、C の int hoge() { ...何かする...; if (...エラー...) goto error; return 0; error: ...エラー処理...; return -1; }という感じのプログラムは、Java では…

齧る

前々から書いてみたいと思っていた Pascal を某所で書いてみた。せっかくなので無駄にレコードやら何やらを使ってみたら Runtime Error しか出ない…。というか、そもそも手元にコンパイラが無いので何が起こっているのか良く分からない。 それはともかく、さ…

互換、なのか?

C 言語との互換性とかいう謎の目的のためか、Java は妙な作りになってる部分がいくつかあるわけですが(const が無駄にキーワードだったり)、さすがに class Hoge { int[] hoge()[] { return new int[1][2]; } }これは要らなかったんじゃないかなぁと思った…

可変長

std::vector やら java.util.Vector*1 はスペースが足りなくなると 2 倍に膨れるのだが、今まで自分でそういう構造を書く時には、何となく定数ずつ増量するようにしていた。でも、よく考えたらそれだと要素の追加が償却定数時間にならないっぽい。それ直した…

pred

なんか最近プログラムの記事ばっかなので、今日は趣向を変えると見せかけてまたプログラムの記事。Church 数の前者関数は、ペアを使って let pred n = fst (n (fun (x,y) -> (y,y+1)) (0,0))みたいにすると割と簡単に作れるものの、かなり複雑になる。機械的…

SK

(define (quote x) (cons (lambda (x) (lambda (y) (lambda (z) ((x z) (y z))))) x)) (define (quasiquote x) (cons (lambda (x) (lambda (y) x)) x)) (define (unquote x) (if (null? (cdr x)) (car x) (cons ((cadr x) (car x)) (cddr x)))) (,,,,,`,`'`,…

クイズ 2.7

(gcc 拡張でない)C99 として正しい? enum { k = 0 && (1 / 0) }; void f(void g(void *())) { int a[][3] = { 1, 2, 3, 4, 5, }; char s[] = { "Hello" }, c = { 1 }; }

むむ

gcc 4.1.1 にて。 #include <stdio.h> int x = (int)(1./0.); int main() { int y = (int)(1./0.); printf("%d %d", x, y); return 0; }a[1/0];(by id:namasute0)</stdio.h>

クイズ 2

実行結果は何でしょう。 Java: public class Main { public static void main(String[] args) { Integer Integer = 1; System.out.println((Integer)Integer); System.out.println((Integer)-Integer); System.out.println((Integer)(Integer)-Integer); Sy…

クイズ

class A<T> extends B<T,B<T,A<T>>> { } class B<T,S> { } class C<T extends A<A<T>>, S extends A<A<A<S>>>> { <T> T lub(T x, T y) { return x; } A<T> x = lub(new A<T>(), new A<S>()); }上のプログラムを javac に食わせると何が起こるでしょうか。 構文エラーが報告される 型エラーが報告される その他 それで</s></t></t></t></a<a<s></t></t,s></t,b<t,a<t></t>…

あのね

あのね かも 定義 定義。 あのね なの 仕事 する かも。 あのね でしょ? あのね あのね んっとね。あのね あのね わかる?。あのね あのね あのね でも。あのね でも あのね わかる? あのね んっとね んっとね。。。なの。わかる?。なの。なの。かも。 あ…

ふーん

上の記事を書くために仕様書を調べていて、ふーんと思ったことをメモしておく。 unsigned int は int unsigned とも書けるし、typedef int hoge は int typedef hoge とも書ける。C はフランス語圏の人にも優しい言語のようだ。しかし int hoge typedef とは…

let rec

C 言語だと、変数の初期化子の中で当該の変数が見える [C99*1, 6.2.1]。たとえば、どっかのブロックの中で int x = x + 1;と書くと、右辺の x は、たった今宣言したばかりの(そして未初期化の)x を指している。未初期化の自動変数の値は不定なので、この仕…

気を取り直して Java

class C<T> { T a; { new C<Integer>().a++; } }かつてコンパイラを作っていたときに、こんなようなコードを書いて困った覚えが。あの時は、たしか C じゃなくて Ref とかいうクラス名で、フィールドは a じゃなくて contents だったけれど(ええ、Java にはポインタがな</integer></t>…

Short C

恐ろしいことに、最近、C 言語とかいうものを何のためらいもなく書けるようになってしまったようだ。さらに悪いことには、出来上がったプログラムはどれもヘンテコなものばかりで、そろそろ悪魔の出すぎで鼻が痛い。今日も 3 匹は出た。今度出てきたら名前で…