misc

参照先のオブジェクトのスコープが切れたらどうするんだろうと思ったが、参照は宣言と同時に初期化する必要があるので、(とりあえず delete とかが絡まない限りは)厄介なことにはならないみたい。基本的に参照は既存のオブジェクトに対する別名という位置…

小粒でぴりり

C++ は難しいので滅多に使わないのだが、参照にはこういう使い方もあるらしい。本当に正しいのかどうかは分からない。 Hoge &x = *new Hoge; x.f(); // shorter than -> delete &x;

ア゛ー

たまに飲み会に行くと大して喋ってもいないのに喉が枯れる。酒のせいなのか居酒屋の空気のせいなのかはよく判らない。

あんこう鍋

初めて食べた。報告、議論、要件定義、議論、線引き、議論、丸投げ、議論、ていうかそもそも目標は何なんだっけ、という一連の某会議、もしかして SE ってこういう仕事なのかしら。

なんか

#include <stdio.h> int fact(); int fact(int n, char (*_)[n <= 1 ? 1 : n * fact(n - 1, 0, 0)], char (*__)[printf("fact %d = %d\n", n, (int)sizeof(*_))]) { return sizeof(*_); } int main() { fact(6, 0, 0); }</stdio.h>

ホール

ファイルの末尾を越えて lseek() して書き込むと、ファイルの末尾だった地点から書き込んだ地点までの間はゼロで埋められるが、このときファイルシステムによっては物理的にゼロを書き込むことなく sparse なファイルを作るらしい(その結果として生じる、物…

ぁー、ね

$ cat dogs.cpp #include <iostream> using namespace std; class normal_dog { public: virtual void bark() { cout << "bow!" << endl; } }; class active_dog { public: virtual void bark_twice() { bark(); bark(); } virtual void bark() { cout << "bow-wow!" <</iostream>…

メモ

ファイルからランダムな 1 行を選ぶ。 n := 1 while not eof line := read_line if random [0..1] <= 1/n then result := line n := n + 1 return result

ビビビビビ

論文を検索しようと思って Google に「google scalar」と入れたら所望のサイトが出なかった。気づくまで暫くかかった。うわー

出費

新しいマシンは快適で、ニコ何とか等が以前と比べて信じられないくらい速いのだが、キーボードのレイアウトが変なのと(何故 caps lock が右下にあるんだ?)、ヘッドホンを繋ぐと異常に雑音が乗るのが不満だった。で、色々と調べてみると後者の雑音(某所で…

全消し

test.{ml,cmi,cmo,cmx,cma,cmxa} をまとめて消したかったので、「rm -f test.*」のつもりで「rm -f te(tab)*(return)」と一気に打った。そういえばさっき make clean したんだった。 $ rm -f test.ml *

ふーん

signed char s = 0xFF; unsigned char u = 0xFF; printf("%d%d", ~s >= 0, ~u >= 0);

つまり

氷の国にやって来たと。

それはそれでカオス…。 #include <stdio.h> int s(int x, int y[printf("x = %d\n", x++)]) { return x; } int main() { printf("s 1 -> %d\n", s(1, 0)); }</stdio.h>

新旧

今の C では $ は使えないけど、そういえば関数定義は古いスタイルも残っていて、仕様がとてもカオスになってる気がする。 float id(float x) { return x; }float id(x) float x; { return x; }どっちが速い?

某氏から教えてもらったところによると、C の古いコンパイラだと識別子に $ が使えたりプリプロセッサが # に対応してなかったり色々するらしい。K&R 仕様だそうだが、手持ちの第 2 版にはそういう内容はないので、第 1 版? そんなコンパイラが今も使われて…

なんとも

マリオをクリアしなくては。 「n 年以内に出来るか」、という問いには、「ムリポー(∀n)」と答えればよいのだろうか。なんかクリボーに似てるしー。

ブロック

C99 チェッカー…? #include <stdio.h> enum { x = 1 } f() { while ((enum { x })x) ; return x; } int main() { puts(f() ? "new" : "old"); }</stdio.h>

発表

オワタ。発表はともかく質疑がオワタ。

新 Safari

レンダリングは前より速くなったけれど、メモリを異様に食うので、メモリの少ないマシンではスラッシングが多発し、トータルでは前よりずっと遅い(主に nico(ry) での話)。

参照カウント

Perl にも weak reference があることを知った。これを使ってゴミサイクルを作らないようにするのは、なんだかとても難しそうな気がする。 $ cat test.pl use Scalar::Util qw(weaken); for (my $i = 0; $i < 200000; $i++) { my @x; push @x, \@x; weaken $…

よし

某 ○_sawa 氏が痩せる宣言したので、僕も便乗痩せしようと思う。とりあえず動いている物体は相対論的質量が増加するという噂だから、なるべく運動しないようにしよう。基礎代謝って 1500 kcal しかないのね…。

展開 2

$ cat a.c #include <stdio.h> extern inline int f() { return 1; } int main(void) { puts(f() ? "opt" : "no opt"); } $ cat b.c int f() { return 0; } $ gcc a.c b.c && ./a.out no opt $ gcc -O3 a.c b.c && ./a.out optinline + extern に関する GCC の*1セマ</stdio.h>…

言葉が足りない

FlashSort というソートアルゴリズムが O(n) で動くという話を見かけた。

展開

#include <stdio.h> #define A ( #define B ) #define puts(x) puts A x B #define f(x) x + 7 int main(void) { puts ( f A "Hello, World!" ) ); puts A f ( "Hello, World!" ) ); }</stdio.h>

こんなエラーがあったとわ

# `aaazaa = `cctakw;; Variant tags `aaazaa and `cctakw have same hash value. Change one of them.追記。こっちもか。 # object method aaazaa = 0 method cctakw = 0 end;; Method labels `cctakw' and `aaazaa' are incompatible. Change one of them.

よくある例題

下線部を埋めて画面に Hello, world! を出そう。 (1) #include int main() { ("Hello, world!"); } (2) #include int main() { sizeof( ("Hello, world!")); }

定数

final int i = 0; final short s = 0; char c; c = i; c = s; c = true ? (char)0 : i; c = true ? (char)0 : s; c = true ? c : i; c = true ? c : s;

ジャム塗ったら

久しぶりに風林火山を見たらもはやコッペパンにしか聞こえない…何この壮大な面白テーマ。 (cf. sm1449523)

まぎらわしい

こういう書き方を見たのは初めてな気がする。こう書かないとエディタがうまくインデントしてくれなかったとか、そういう理由なのかなぁ。単に好みの問題かもしれないけど。 static char message[] = { "Hello," "World!" };