パスワードを忘れた? アカウント作成

こちらは、Yoh2さんのユーザページですよ。 スラッシュドットのRSSを取り込んでみよう。

1527655 comment

コメント: Re:規格上どうなるべきか (スコア 1) 5

by Yoh2 (#2094910) ネタ元: 無限再帰を一瞬で

それと、アセンブリ出力も見てみたいなぁ、とリクエスト。

ほい。clang-3.0で -O2 を付けた場合。アーキテクチャはamd64ね。

func:                                   # @func
.Ltmp0:
    .cfi_startproc
# BB#0:
    ret
.Ltmp1:
    .size    func, .Ltmp1-func
.Ltmp2:
    .cfi_endproc
.Leh_func_end0:

要するに、関数に入って即座にret。
実際の所は、main()の中で、func()がインライン展開されちゃってfunc()が呼ばれることはありませんが。

再帰呼び出しの最適化がどうかかるか調べていたらおかしなアセンブリコードが見えたのでおや? と思ったのが発端。

おまけ: gcc-4.5.3で -O2 を付けた場合:

func:
.LFB22:
    .cfi_startproc
    .p2align 4,,10
    .p2align 3
.L2:
    jmp    .L2
    .cfi_endproc

単なる無限ループに。clangでもこうなることを期待してたんだけどなぁ。

1525897 journal
プログラミング

Yoh2の日記: 続・D言語で不動点コンビネータ

日記 by Yoh2

先日の日記にて、D言語で不動点コンビネータを書いてみたら分かりにくくなったと述べたが、実はこれだけで実現できることに気付いた。

R delegate(TS) fix(R, TS...)(R delegate(R delegate(TS), TS) f)
{
    return delegate(TS xs){ return f(fix(f), xs); };
}

ラムダ式をサポートしている版ならこう。

R delegate(TS) fix(R, TS...)(R delegate(R delegate(TS), TS) f)
{
    return (TS xs) => f(fix(f), xs);
}

1478686 journal
プログラミング

Yoh2の日記: D言語で不動点コンビネータ 2

日記 by Yoh2

[2012-02-06 23:20 誤字訂正]
暇潰しネタ。

関数型言語の世界では、計算機論の基礎のひとつ、不動点コンビネータの実装が頭の体操のための題材になることが多い。
一方、手続型言語ではどうかというと、この関数の実装を行うには、関数を動的に生成して返さなければならないため、古い言語では実装することができなかった。(アーキテクチャ固有のハックをすれば別だけど)
しかし、ラムダ式だのデリゲートだのが使える最近の言語なら手続型でも実装できるはず。
手続型言語で不動点コンビネータを実装すれば、慣れている分、分かりやすかったりしないかな? と思い、D言語で書いてみた。多引数対応。

1403492 journal
プログラミング

Yoh2の日記: 続・C11で疑似関数オーバーロード (GCC拡張機能使用)

日記 by Yoh2

先日の日記で、C11を使って擬似的な関数オーバーロードを実現しようとしたが、0引数の場合にうまくいかないということを書いた。
その後GCCの拡張機能を使うと実現できることに気付いたのでここに書く。
なお、C11のみで実現する方法はまだ思い付いていない。

さて、ここで使用した拡張機能は何かというと、可変長引数マクロで、コンマの後に空の__VA_ARGS__を続けた時に__VA_ARGS__の直前のコンマを削除できるという機能。

#define MACRO(...)  ほげほげ , ## __VA_ARGS__

1355185 comment

コメント: 管理って重要だと思う瞬間 (スコア 1) 4

by Yoh2 (#2080757) ネタ元: 「思う」だけじゃない上司

部下があっぷあっぷなので、コードばりばり書いちゃって

部下共々あっぷあっぷ。作業割り当ての調整だとか客先や営業との折衝だとかができなくなって、相談を持ってきた他の部下が頭を抱えるなんて例なら心当りが。

1354643 journal
プログラミング

Yoh2の日記: C11で疑似関数オーバーロード (できてません)

日記 by Yoh2

[2012-01-18 13:15追記: GCC拡張機能(clangでも使える)を利用して実現することができました。続・C11で疑似関数オーバーロード (GCC拡張機能使用)を参照して下さい。]

[C/C++規格: 11] C11の新機能 その2 -- 型ジェネリック式から話題を一部引っ越してきました。

C11で型ジェネリックが使えるようになったため、1引数の関数については擬似的に関数オーバーロードを実現するマクロを書けるようになった。
では引数の数が異なるものについてのオーバーロードはというと、_Genericのみで直接行うことはできない。でも、可変長引数マクロと組み合わせればできそうだと思ってコードを考えてみた。
ところが、どうにもうまくいかない。
なお、動作確認にはclang-3.0を使用した。

typodupeerror

身近な人の偉大さは半減する -- あるアレゲ人

読み込み中...