トップ «前の日記(2007-12-13) 最新 次の日記(2007-12-16)» 編集

はじめてのにき

ここの位置付け

2004|11|
2005|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|

ToDo:


2007-12-15

_ つーわけで

GolfScript なる flagitious さん作の 言語をゴルフ場に足したので遊んでみるや良し。

たぶん卑怯なくらい強い。

(03:19)

_ バッドノウハウ

適度なアルコール/バッドノウハウは良いが、 過度な摂取はあなたの健康を損なう恐れがあります。

(03:21)

_ libm

http://d.hatena.ne.jp/odz/20071214/1197622976

このへんを見た。 オリジナルのコードが変わってるみたいだから内容はよくわかってない。 そこであまり関係ない話。

#include <math.h>
int main() {
    return pow(3, 4);
}

main:
        leal    4(%esp), %ecx
        andl    $-16, %esp
        pushl   -4(%ecx)
        pushl   %ebp
        movl    %esp, %ebp
        pushl   %ecx
        movl    $81, %eax
        popl    %ecx
        popl    %ebp
        leal    -4(%ecx), %esp
        ret

こうなる。 これが __builtin の魔力か! てか -O とかつけんくても消えるんだね。 pow(3.3, 4) とかしちゃうと pow が呼ばれてしまう。

で -ffast-math をつけると

main:
        leal    4(%esp), %ecx
        andl    $-16, %esp
        pushl   -4(%ecx)
        pushl   %ebp
        movl    %esp, %ebp
        pushl   %ecx
        movl    $118, %eax
        popl    %ecx
        popl    %ebp
        leal    -4(%ecx), %esp
        ret

わいわい。

あとまぁ pow(argc, 4) とかでも -ffast-math つければ call pow は消えるから 最適化で pow が速くなることはないというわけでもないとか。

TODO(きっとあろはさんが調べるという意味): これ GCC のどこ? builtins.c は微妙に違いげ。

(03:44)

_ ああいや

builtins.c か。

     /* Attempt to evaluate pow at compile-time.  */
     if (TREE_CODE (arg0) == REAL_CST
         && ! TREE_CONSTANT_OVERFLOW (arg0))
       {
         REAL_VALUE_TYPE x;
         bool inexact;
         x = TREE_REAL_CST (arg0);
         inexact = real_powi (&x, TYPE_MODE (type), &x, n);
         if (flag_unsafe_math_optimizations || !inexact)
       return build_real (type, x);
       }

このへんかね。

にしても fold_builtin_pow は相当アホな感じな最適化がほげってるなぁ。

     /* Optimize pow(cbrt(x),y) = pow(x,y/3) iff x is nonnegative.  */
     if (BUILTIN_CBRT_P (fcode))
   {
     tree arg = TREE_VALUE (TREE_OPERAND (arg0, 1));
     if (tree_expr_nonnegative_p (arg))
       {
         const REAL_VALUE_TYPE dconstroot
       = real_value_truncate (TYPE_MODE (type), dconstthird);
         tree narg1 = fold_build2 (MULT_EXPR, type, arg1,
                   build_real (type, dconstroot));
         arglist = tree_cons (NULL_TREE, arg,
                  build_tree_list (NULL_TREE, narg1));
         return build_function_call_expr (fndecl, arglist);
       }
   }
     /* Optimize pow(pow(x,y),z) = pow(x,y*z).  */
     if (fcode == BUILT_IN_POW || fcode == BUILT_IN_POWF
      || fcode == BUILT_IN_POWL)
   {
     tree arg00 = TREE_VALUE (TREE_OPERAND (arg0, 1));
     tree arg01 = TREE_VALUE (TREE_CHAIN (TREE_OPERAND (arg0, 1)));
     tree narg1 = fold_build2 (MULT_EXPR, type, arg01, arg1);
     arglist = tree_cons (NULL_TREE, arg00,
                  build_tree_list (NULL_TREE, narg1));
     return build_function_call_expr (fndecl, arglist);
   }

これとか。

(03:56)

_ DeFLaTe

http://www.jmuk.org/diary/2007/12/14/1

似たようなことが w3m で起きてたのだけど なんか inflate ってコマンド無いと w3m の場合ダメなんかなとか ダメなんかなーと思って accept-encoding から deflate 外してから 気付いたんだけど、よく考えると akr さんとこ (http://cvs.m17n.org/~akr/diary/) は 見えてるのであったのでなにかがおかしい。

それはそうと akr さんとこは Accept-Encoding に deflate 無くても DeFLaTe で送ってくるのはエグいような。

echo 'GET http://cvs.m17n.org/~akr/diary/ HTTP/1.0\r\nHost: cvs.m17n.org\r\n\r\n' | netcat cvs.m17n.org 80

http://www.ietf.org/rfc/rfc2616.txt

とかを見て Accept-Coding: identity を送ってみるも通じず。ムネン。

(04:25)

_ Common LISP

かんどうした

>>(defun f (&optional a b &key k) (list a b k))

F
>>(f 1 2)

(1 2 NIL)
>>(f 1 2 :k 3)

(1 2 3)
>>(f :k 3)

(:K 3 NIL)

(15:34)

_

>>(f :k 3 :k 3)

(:K 3 3)

(15:36)

_ return と nil

gcl

>>(defun nil() (return 1))

NIL
>>(nil)

1

clisp

[1]> (defun nil () (return 1))
NIL
[2]> (nil)
1

sbcl

* (defun nil() (return 1))

debugger invoked on a SYMBOL-PACKAGE-LOCKED-ERROR in thread #<THREAD "initial thread" {A7BD3F9}>:
  Lock on package COMMON-LISP violated when setting fdefinition of NIL.
See also:
  The SBCL Manual, Node "Package Locks"
  The ANSI Standard, Section 11.1.2.1.2

(16:01)

_ disassemble

  • CLISP: byte code
  • GCL & SBCL: native

GCL はインタラクティブモードで disassemble しようとするとあわててコンパイルしてから objdump してる感じ。

しかし objdump は読みなれてるので良い。

(17:26)

本日のツッコミ(全1件) [ツッコミを入れる]
_ Ashykaju (2010-03-29 15:52)

この間も俊太郎の詩をお http://www.stlouisbusinesslist.com/business/5021837.htm?info=viagra generic viagra :DD

お名前:
E-mail:
コメント:
人生、宇宙、すべての答え
本日のリンク元

2007年
12月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
1.annoncelegale(2011-10-26 20:30) 2.annoncelegale(2011-10-10 05:12) 3.Jcftymkt(2010-03-29 15:56)
search / home / index

全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。

shinichiro.hamaji _at_ gmail.com / shinichiro.h