タグ

ブックマーク / shinh.hatenablog.com (11)

  • ELVM Compiler Infrastructure - 兼雑記

    最近作ってたオモチャがだいたいまとまってきました。 https://github.com/shinh/elvm 第12回 kernel/vm 勉強会で発表した時のスライド: http://shinh.skr.jp/slide/elvm/000.html これは何かというと、前作った bflisp を改良したり整理したりしたもので、 C 言語をシンプルな中間言語 (EIR) に変換する改造 8cc と、その中間言語を Brainfuck をはじめとした他言語に変換するバックエンドから成り立っています。 bflisp との差分は、 Brainfuck 以外のバックエンドを追加しやすくしたり、バックエンドを C で書いて、完全に Brainfuck だけで 8cc.bf を再現することができるようにしたり、という感じです。 特に興味深いであろうバックエンドとしては、 Brainfuck, Unl

    ELVM Compiler Infrastructure - 兼雑記
  • Brainfuck interpreter in Ruby's Regexp - 兼雑記

    Ruby の正規表現だけで Brainfuck インタプリタを作ることができました。正規表現の実行は =~ だけなので、ループなども正規表現の内部で実行してます。 https://github.com/shinh/hack/blob/master/bf_rb_reg/bf.rb つまりどういうことができるかというと、 BF_REG という Regexp と BF_SUFFIX という文字列定数があって、 bf という文字列に格納された Brainfuck のコードを BF_REG =~ bf + BF_SUFFIX で実行することができます。出力は $~['o0'], $~['o1'], ... に入っているので、 output = '' 256.times do |i| o = $~["o#{i}"] break if !o output += o end 的なコードで取り出すことができ

    Brainfuck interpreter in Ruby's Regexp - 兼雑記
  • ppencode 2 - 任意の Perl コードを予約語だけの Perl コードに変換する - 兼雑記

    @TAKESAKO さんが ppencode を作ってから 10 年経って、私が任意の Perl コードを小文字だけに変換するスクリプトを書いてからでも5年経つらしいですが、なんか任意の Perl コードを予約語だけの Perl コードに変換するスクリプトができました。 http://shinh.skr.jp/obf/ppencode.html オリジナルの ppencode に敬意を表していろいろ雰囲気を似せておきました。割と色んな予約語が使われるようにしてみたりとか。 これは Perl が予約語だけあれば Turing complete ということなので、副産物として Quine もできました。 http://golf.shinh.org/reveal.rb?Quine/shinh+%28keywords%29_1431106882&pl なんというか、 ppencode があれば後は

    ppencode 2 - 任意の Perl コードを予約語だけの Perl コードに変換する - 兼雑記
  • NaCl について - 2013-12-18 - 兼雑記

    カーネル/VM Advent Calendar 2013 にさっき登録しました。需要の無さそうな NaCl について語ります。 https://qiita.com/advent-calendar/2013/kernelvm NaCl はグーグルが作ったものの中で一番好きくらいに好きなものです。理由は低レイヤコンポーネント集だから。概要としては安全に実行できる(ここでいう安全はブラウザが動いてる OS 上での任意コード実行ができない、という意味) Active X というか、 C/C++ でコードが書ける Java Applet というか、まぁそういう感じの。 NaCl はおおざっぱに言って、 検証可能なバイナリを出力するコンパイラツールチェイン (gcc, binutils, etc.) ユーザプログラムを検証して起動する service runtime service runtime と

    NaCl について - 2013-12-18 - 兼雑記
  • 2012-09-20 ぷよ譜 DB - 兼雑記

    ここ1年ほどぷよぷよを練習しているのですが、まぁヘタの横好きであまりうまくはならないです。それはともかく、困る感じの序盤ツモに対して、うまい人がどう置いてるのかなぁ、というのが知りたかったので、ニコニコに置いてある100先取動画を適当に読んで序盤 DB ぽいものを作ってみました。 http://shinh.skr.jp/puyodb/ ぷよをどっかで消すか、いいかげんな画像認識の精度の問題で矛盾が出たら打ち切ってる感じなので、なんかやたらと長いやつと短いやつでバラつきがあります。あとエラー出ない程度には修正したものの、 IE で見ると無茶苦茶すぎるんで、 Chrome か Firefox 用と言っていい気がします。 動画の使用に関しては、ニコニコにあるからたぶんいいですよね…という感じで、許可とか取ってないので、問題ある場合教えていただければ対処します。 データは一番下のリンクにはってあ

    2012-09-20 ぷよ譜 DB - 兼雑記
  • atomic operation どころか mutex もわかってなかったという話 2011-09-05 - 兼雑記

    read write lock ってものがあります。 pthread だと pthread_rwlock_t 。コレの私の思ってたセマンティクスは以下のようなもんです。 writer lock を取ると普通の mutex lock みたいな感じ。その thread が unlock するまで、以降の reader lock と writer lock は block する。 reader lock を取ると、それ以降の writer lock は block する。 reader lock は block せずに取れる これは glibc の pthread のデフォルトの挙動なんですが、これは変えられるし、 POSIX によると環境によって違う挙動をすることもあるらしい、ってのを知りませんでした。 どういう時の挙動が変わるかというと、 reader lock が取られてて、 writer

    atomic operation どころか mutex もわかってなかったという話 2011-09-05 - 兼雑記
  • 2010-06-03 - 兼雑記 - コードを愛でる話

    今まで見たり書いたりしたトリッキーなコードというか hacky なコードを適当に紹介するプレゼンを作ったので置いておきます。 http://shinh.skr.jp/dat_dir/mederu/000.html 書いてみて思ったのは、なんか結構今までにメモってないトピックがあったなーということでした。 PuTTY の話はここで教えてもらって読んだのに特にメモってなくてスライド作りながらもう一度読んだもの: http://shinh.skr.jp/m/?date=20061123#c04 tgmath.h の話はこの話の後で実際どうなってんのかなーと思ったらもっと cross platform な感じで実装されてたと感心した記憶はあるんだけど、全く詳細を覚えてなかったので今回調べなおした。なんていうかこれって、 C で型計算してるんですよね。 http://d.hatena.ne.jp/s

    2010-06-03 - 兼雑記 - コードを愛でる話
  • ポータブルなコルーチンライブラリ - 兼雑記

    が書けた! #include <assert.h> #include <boost/preprocessor.hpp> #define GOTOC_CASE_GOTO_(Z, I, DATA) \ case BOOST_PP_ADD(I, 1): \ goto BOOST_PP_CAT(gotoc_label_, BOOST_PP_ADD(I, 1)); #define GOTOC_FUNC(NUM) \ static int gotoc_call_cnt_ = 0; \ switch (gotoc_call_cnt_) { \ case 0: \ break; \ BOOST_PP_REPEAT(NUM, GOTOC_CASE_GOTO_, dummy) \ default: \ assert(false); \ } #define GOTOC_YIELD(NUM) \ gotoc_ca

    ポータブルなコルーチンライブラリ - 兼雑記
  • GC本読書会 - 兼雑記

    記憶をダンプ。どれも別に当に正しい議論であるかは不明。もっと重要な論点とかあったら教えていただければとてもうれしいです。 「GCってスループットvsレイテンシってよく言うわけですけど」 「実際 GC する言語でスループット欲しいとか思ってるユーザはいるんですかねー。ベンチマークはかるならスループットだろうけどねえ」 組み込み系の人が多い関係もあってか、みんなレイテンシの方が…って感じみたいだった。スループットが欲しい局面としては Java でバッチ処理する時とかは速いに越したことはない的なことを言われて、ああやっぱそいうのかなぁと。 ただ、バッチ処理とかって別に Java じゃなくても C++ で書いてもメモリ管理とかそんな大変じゃないものが多いような…ということと、 GC にかかってる時間ってまぁそもそも全体から見てそんなに多くはないはずで、そこが仮に 2 倍速くてもなー、とは思った。

    GC本読書会 - 兼雑記
  • ゴルフ場のなかみ - 兼雑記 (2009-09-29)

    最近ゴルフ場を新しいマシンに引越そうとしていて、ついでなのでシステムをもうちょっと丁寧にパッケージ化しようとしてます。そのついでとして、現在のゴルフ場について内部がどうなってるか、ということを少しまとめてみようと思いました。 結構似たようなことをするサービスもあるんですが(codepadとかllevalとか)、そのへんのコードとかは全く参考にしてないので、そういうのを見た方がいいかもしれませんし、あとゴルフ場固有の事情も色々あったりするかもしれません。まぁでも日語でそのへん書いてるのはあんまり見たことがないので、多少参考になる部分もあるかもしれません。 今作業中のコードは github に入れていっています。 apt で入らないパッケージの処理以外はだいたい入ってるはずですが、まだ足りないものとかあるかもしれません。 http://github.com/shinh/ags システム自体は

    ゴルフ場のなかみ - 兼雑記 (2009-09-29)
  • SDL + MacOSX + any lang - 兼雑記

    たぶん SDL + MacOSX の非 C で起きる問題を解決できそうな方法を実装してみました。とりあえず MizuGame (C#) 動いた。 http://d.hatena.ne.jp/fslasht/20080804#1217853380 下記のファイルを http://shinh.skr.jp/osxbin/sdlboot.tgz 展開して出てきた sdlboot, sdlboot.dylib を実行ファイルと同じディレクトリにほうり込んで、 % ./sdlboot mono MizuGame.exeとかで動くかと思います。動かんかったら make clean all してみて下さい。ダメだったら教えてください。 -lSDLmain を故意に外した testsprite を使って ./sdlboot ./testsprite_nomain なんかも動いてますんで、 D とか Rub

    SDL + MacOSX + any lang - 兼雑記
  • 1