タグ

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

  • PEP 703 - 兼雑記

    https://peps.python.org/pep-0703/ Python の GIL 外す話。これすごく楽しい読みものでした。参照カウントのところが一番人気だと思うのですが、他のところも色々良い。こういう、「んーこういうことするとこういう問題が起きない?」と思ったら次の章くらいでそれが説明される、みたいな読みものは大変好きです 参照カウント: オブジェクトっていうのは作ったスレッドが解放するというのがほとんどなんだから、その場合はロックをいらなくする、他に渡ったら普通の参照カウントぽくする、という話。 Swift に 2018 年に導入された 話らしい。他のスレッドに渡された後で DECREF すると他スレッド用の参照カウントが負になりうるのだけど、その時に queue に入れるということをして、ややこしいので、なんかこれ無しですむ方法はないのかなぁ……と Immortalize

    PEP 703 - 兼雑記
  • 開発イテレーション偏重 - 兼雑記

    開発イテレーションを早くすれば、かなりの問題が勝手に解決される、と信じています。なんか最近、他の要素を軽視しすぎていたり、特にイテレーション速度に影響しなさそうなことすらしている気がしていて、信仰とかのレベルかもしれない、という気がしてきたので、ちょっと書いてみようかなと。主に C++ の話です。 仕事とかしてると良い判断力が求められたりしますが、判断というのは結構難しいですよね。アプローチ A と B で悩んだ時に、手が速ければ両方できたりします。開発イテレーションを無限に速くすると、必要とされる判断力はゼロに漸近していきます。やったね。 2手で変更の正当性を高速に確認できるようにする make (かその他のビルドコマンド)てやったらビルドができて、 make check (かその他のテストスクリプト)てやったら遅くないテストが全部走る、という体勢が好きです。試すためにはあっちのディレク

    開発イテレーション偏重 - 兼雑記
  • ICFP programming contest 2018 - 兼雑記

    無職なこともあり、とても楽しい問題だったこともあり、久々にほぼガチで参加してる会になりました。いや楽しかった。順位表が凍結された段階での最終順位は2位で、1位は絶対に無理、その後にできた変更はしょうもないので、おそらく7位とかそのあたりの、5位強みたいなところに落ちついているのでないかと想像してます。暫定2位といっても特に良いところはなく、得点を決める式のおかげで、大幅なとりこぼしが無いだけで、推定1位のウナギに対して全順序がついて負けてる形のはずで、大変くやしい。が、まあ僕的には頑張ったとは思う。 初動 パーサやシミュレータを実装して、簡単なシングルスレッドAI、下から順に塗っていって、既にあるブロックとつながっていないところに置かざるを得なくなると、 Flip する、というものを Ruby で書く。デフォルトよりは大幅によくなることを確認して、いい問題だなあ……と思いつつ、寝る。 シミ

    ICFP programming contest 2018 - 兼雑記
  • ビット演算クイズを解いた時の話 - 兼雑記

    http://herumi.in.coocan.jp/diary/1804.html#13 を解いた時の話。光成さんは実験的に解かれたようだったんですが、割と理詰めで解けたので、思考過程をダンプしてみます。元のコードは int calc(int a, int b, int s) { const int Q = 1 << s, Q2 = Q * 2, Q3 = Q * 3; assert(0 <= s && s <= 16 && && 0 <= b && b < a && a < Q * 4); int n = 0; for (;;) { if (a < Q2) { // A n = n * 2; } else if (b >= Q2) { // B n = n * 2 + 1; a -= Q2; b -= Q2; } else if (b >= Q && a < Q3) { // C a

    ビット演算クイズを解いた時の話 - 兼雑記
  • ELVM Compiler Infrastructure について - 兼雑記

    はじめに 言語実装 Advent Calendar 2016 用です。 ELVMは、コンパイラをフロントエンドと中間言語とバックエンドにわけて、多言語多CPUに対応しよう……というようなLLVMの考え方を、パロディと言っていいレベルにまで単純化したものです。結果として実用性は全くないが、C言語から他言語へのトランスレータを極めて簡単に書け、 Brainfuck などのような難しい言語のコードもC言語を書くだけで生成できる、というようなことを主目的としています。 当は ELVM のバックエンドを一つ足して、 Brainfuck とかのような難しいターゲットでなければ、こういう感じで手軽に足せますよーということを書こうかと思っていました。しかし、ありがたいことにそういう趣旨だったり、あるいはもっと難しいターゲットについても、既にあれこれと書いていただいたのでした。例えば Perl: http

    ELVM Compiler Infrastructure について - 兼雑記
    xef
    xef 2016/12/22
  • kati について - 兼雑記

    https://github.com/google/kati kati について、ドキュメント書こう…と思っていたのですがなかなか進まないので、とりあえず日語で書いてみることにしました。何書くかがあまり明確じゃないテーマなので、何書くか考えるのと英語考えるのを両方同時にやるのが少し大変で。 動機 kati は GNU make のクローンです。いずれ完全なコンパチになると嬉しいですが、なかなか難しいだろうと個人的には諦めています。用途に対して実用的ならば良いかなと。 動機としては、 Android platform のビルドシステムが、なかなかシュールな GNU make 黒魔術で構成されていて、 make が実際になんかしはじめるまでが遅かったので、そこを高速化したいというものでした。 ビルドシステムが遅いという時、まずだいたいヌルビルドとフルビルドの2点を考えます。ヌルビルドてのは生

    kati について - 兼雑記
  • static link について - 兼雑記

    案外、 static link ってわかってないもんです。というかリンカってわかってないもんです。そして案外はまるものです。以下のクイズに答えられるでしょうか。 クイズ1 $ nm main.o # int main() {} 0000000000000000 T main $ nm foo.a # void foo() { bar(); } void baz() {} foo.o: U bar 0000000000000010 T baz 0000000000000000 T foo $ nm bar.a # void bar() {} void baz() {} bar.o: 0000000000000000 T bar 0000000000000006 T baz $ gcc main.o foo.a bar.a最後のコマンドで、何が起きますか? 普通にリンクできる undefine

    static link について - 兼雑記
    xef
    xef 2014/10/03
  • sedlisp.sed 00:54 - 2014-06-08 - 兼雑記

    https://github.com/shinh/sedlisp Lisp インタプリタを書きました。 sed で。 https://github.com/shinh/sedlisp/blob/master/sedlisp.sed README に書いた通り、それなりにややこしいプログラムも動く気がします。具体的には eval.l として、 eval の無いところで eval を実装しました。で、その上で FizzBuzz なんかが動きます。これはつまり S 式のパースは省略した Lisp のインタプリタと言って良いので、 sed で書かれた Lisp の上で Lisp が動いて、その上で FizzBuzz が動いてることになります。ちなみにもう一段かますことはできませんでした。 Ruby で書いた実装でも動かないので、 eval.l がとりあえず循環できない作りになってしまってるみたいで

    sedlisp.sed 00:54 - 2014-06-08 - 兼雑記
    xef
    xef 2014/06/08
  • 失敗ロック例いくつか - 兼雑記

    なにかあまりスレッドとか得意でない人のコードを見ていて、いくつかダメな予感がするパターンがあるよね、ってことで適当に集めてみました。どれもこれも小さな例にすると、こんなミスしねーよ、って感じなんですけど、複雑なコードの中にあると結構ミスるもんかな、と。私自身マルチスレッドはたいへん苦手で、実際私がやらかしたケースもいくつか。 ひとつめ: ロック順序逆転 // そこらじゅうで確保されてるグローバルなロック pthread_mutex_t g_mu = PTHREAD_MUTEX_INITIALIZER; // このクラスを使うところは全域 g_mu でロックされてるとします class C { public: C() { pthread_mutex_init(&mu_, NULL); } void doSlowOperation() { pthread_mutex_lock(&mu_); /

    失敗ロック例いくつか - 兼雑記
    xef
    xef 2014/06/01
  • robust_quine.pl - 2014-02-20 - 兼雑記

    Ruby にできて Perl にできないことは無いという格言があります。 http://d.hatena.ne.jp/ku-ma-me/20140219/p1 $$qq.=q';printf"\$\$qq.=q%c%s%c;;##%c;\n\$\$uu.=q%c%s%c;;##%c;\n\n\$\$ii||=%c\$_;;\$\$\$ii.=\$\$qq;;s#^;.{217}\$#\$\$qq#ee;;#;#^^;\n\$\$nn||=%c\$_;;\$\$\$nn.=\$\$uu;;s#;.{217}\$#\$\$uu#ee;#;",39,$&,39,39,39,$&,39,39,92,92;exit';;##'; $$uu.=q';printf"\$\$qq.=q%c%s%c;;##%c;\n\$\$uu.=q%c%s%c;;##%c;\n\n\$\$ii||=%c\$_;;\$\$

    robust_quine.pl - 2014-02-20 - 兼雑記
    xef
    xef 2014/02/21
  • ARM にゅうもん - 兼雑記

    例のごとく、書かないと覚えられません。 参考文献 日語命令セット: http://www.ced.is.utsunomiya-u.ac.jp/lecture/2013/aca/ARMjp-vH.pdf コンパイラのマニュアルらしいけど概要的に便利なやつ: http://infocenter.arm.com/help/topic/com.arm.doc.dui0056d/DUI0056.pdf registers r0 から r3 は caller save なレジスタで引数に使う。 r4-r11 はたぶん普通は callee save 。 r12 は別名 ip 。 r12 は ARM Thumb の切り替え時に必要なら使うらしい…が、ぱっと見短い R_ARM_CALL なら使わない気もする。まぁいずれにせよ caller save r13 は sp 。 r14 は lr で bl か b

    ARM にゅうもん - 兼雑記
    xef
    xef 2014/01/14
  • 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 - 兼雑記
    xef
    xef 2013/12/18
  • 2012-12-10 ■ Hello golf in Malbolge - 兼雑記

    Esolang Advent Calendar 2012 用のエントリです。 Esolang 的な自己紹介としては、今年は ICFP のコンテストのために巨大な befunge プログラムを書きました。 Malbolge 概要 ご存じの人が多いかと思いますが、 Malbolge という超難解言語があります。この言語の難解さは brainfuck などがかわいく見える、というか、私の感覚では ruby と brainfuck くらいの差が brainfuck と malbolge の間には存在しています。いや、もっと広いかもしれず。 Malbolge について一言で紹介すると、「抜群のバランス感覚で適当に設計された神クソゲー」という感じ。ざっくりとした説明としては、 A,C,D の3進10ケタ(つまり0-59048の値を持てる)レジスタと、 59049 個の 0-59048 の値が持てるメモ

    2012-12-10 ■ Hello golf in Malbolge - 兼雑記
  • Brainfuck => ShaFuck translator - 2012-12-06 - 兼雑記

    ShaFuck という言語があります。チューリング完全なのに、難解どころか、プログラムを書くことは不可能だと主張してる言語です。 http://esolangs.org/wiki/ShaFuck 不可能だと主張している理由は、入力として受け取ったコードを SHA1 した結果を BF として実行して、かつ 8 つの BF コマンドでないコードが実行されるとプログラムがエラー終了してしまうからです。 で、今回は Brainfuck から ShaFuck への翻訳機が書けたという話。コレ http://shinh.skr.jp/obf/bf2sf.rb shafuck-0.2 で実行可能な hello と cal http://shinh.skr.jp/obf/hello.sf http://shinh.skr.jp/obf/cal.sf.gz どうやったかというと、 20 bytes (=16

    Brainfuck => ShaFuck translator - 2012-12-06 - 兼雑記
  • Tinycc on NaCl について kernel/VM 探検隊7で話しました - 兼雑記

    https://sites.google.com/site/kernelvm/ima-made-no-matome/di-qi-hui-kaneru-vm-tan-jian-dui スライド http://shinh.skr.jp/slide/nacltcc/000.html 金曜の夜…というか土曜の3時くらいになんか話しませんか offer をいただきました。せっかくだからなんか喋るかーとネタを考えたところ、ゴルフ場の sandbox が思いついた後に nacltcc を思い出して、ああこっちはスライドとか作ってないなーとこっちにしました。 C コンパイラの話なら IOCCC 入賞の自慢もできて一石二鳥ではないかという。ところで twitter で IOCCC 優勝とか書いてくれてる方がいましたが、優勝はしてないっていうか優勝ってあるのかなという。誰が見てもあからさまにすごい akari

    Tinycc on NaCl について kernel/VM 探検隊7で話しました - 兼雑記
    xef
    xef 2012/04/26
  • 1