Gauche > Archives > 2010/05/14

2010/05/14 00:45:45 UTCとおる。
#
http://gyazo.com/b12507d4d8bcb6f38c0e721ab1f2f3e2.png
#
たまたま見つけた画像ですが、さっき shiro さんのブログを読んで。
#
ぼくはさいしょ stick っていうと何かが突き刺さっているイメージだったので(「バナナが耳に刺さってます」を英語でいう CM があった)、sticky note の意味がいまいちぴんとこなかったです。
#
砂糖とかで手がねばねばするというのも sticky っていうんですよね。
2010/05/14 00:55:18 UTC(び)
#
stickerを「ステッカー」と和語化したのが失敗だったなぁと思う。両者が同じものだと知ったのは高校生の時(遅
2010/05/14 00:59:27 UTCeyasuyuki@twitter
#
そういえばsitcky bitというものがあった
2010/05/14 01:02:13 UTC(び)
#
それを「粘着ビット」と解釈するとちょっといかかも(笑)
2010/05/14 01:05:24 UTCtomonacci
#
こんにちは。
2010/05/14 01:06:35 UTC(び)
#
こんちわ
#
s/いかかも/いやかも/ なんだよ「いかかも」って(笑)
2010/05/14 01:07:06 UTCtomonacci
#
Gaucheでトップレベルの関数を再定義したときの挙動について
#
(define a car)
#
(define (a n)
#
(if (= n 0)
#
0
#
(a (- n 1))))
#
(display (a 12))
#
(newline)
#
でgoshで実行するとgosh: "error": pair required, but got 11っていわれるんですが、そういうものなのでしょうか
2010/05/14 01:11:48 UTCshiro
#
そうか、aがcarとしてインライン展開されちゃうわけですね。
2010/05/14 01:12:09 UTC(び)
#
-fno-inlineをつけてgoshを起動すればOKだと思うけど
2010/05/14 01:13:00 UTCtomonacci
#
なるほど ありがとうございます ;-)
2010/05/14 01:13:18 UTCshiro
#
本来、(define a X) の X のスコープは定義中のaを再帰的に参照するはずだから、上の挙動は変ですね。バグです。
2010/05/14 01:21:47 UTCshiro
#
あ、でもそう簡単でもないのか。
#
(define a 1)
#
(define a (+ a 1))
#
この場合、二番目のdefineの右辺式のaはその前に束縛された値に評価される。
2010/05/14 01:23:54 UTC(び)
#
(define (a x) ...)の場合が特殊だってことですかね
2010/05/14 01:24:24 UTCshiro
#
いや、関数かどうかで意味が変わるのはScheme的にはいまいち。
#
評価のタイミングの問題と言えるかな。関数になった場合、定義者は関数aが呼ばれてその中でaが使われる時点のaの評価値を考える。それはScheme的には正しいのだけれど
2010/05/14 01:26:15 UTC(び)
#
(define a 1)(define a (lambda (x) (+ a 1)))の場合、lambdaの中のaは、1であるのが自然ですね。
2010/05/14 01:26:54 UTCshiro
#
インライン関数ってのは束縛が変わらないっていう前提で関数呼び出しをコンパイル時に先行評価しちゃうしくみなんで、aが再定義される前に右辺値式のaが評価されちゃってる。
2010/05/14 01:27:14 UTC(び)
#
あれ、でもそうならないな
2010/05/14 01:27:50 UTCshiro
#
>(び) いや、その場合は(+ a 1) のa が評価されるのは a が再定義された後だから、aはクロージャになるよ。
#
関数かどうかではなく、いつ評価されるかという問題。
2010/05/14 01:28:19 UTC(び)
#
gosh> (define a 1)
a
gosh> (define a (lambda (x) (+ a 1)))
a
gosh>  (a 10)
*** ERROR: operation + is not defined between 1 and #<closure a>
Stack Trace:
_______________________________________
#
ああ、そりゃそうですね
2010/05/14 01:29:12 UTCshiro
#
本来のSchemeでは変数が実行時に評価される時に評価される、という話しかないので、tomonacciさんのあげた動作はおかしい。
#
もっともR6RSではトップレベル変数の再定義は許していないし、R5RSでも曖昧なところはあるのでダークコーナーではある。
2010/05/14 01:30:42 UTC(び)
#
aに定義された関数がコンパイルされた時に、aがcarに展開されちゃっている、というのが今回の問題ってことですか?
2010/05/14 01:32:42 UTCshiro
#
です。で、ほんとうはインライン展開される関数の束縛はimmutableであるべきなので (immutableであれば後で変わることはないのでコンパイラが安全に先行評価できる)
#
(define-inline a car) としてあったらaはインライン展開可、(define a car) なら展開しない、とするのが良いかと思います。
#
define-inlineはプログラマ自身が「この束縛は後で置き換えないからインライン展開しちゃっていいよ」と表明していると考える。
#
今のtruncではdefine-inlineした束縛を再定義すると警告が出るようになってます。
2010/05/14 01:34:55 UTC(び)
#
なるほど、define-inlineを使えば、インライン展開という「Schemeの枠組みからはみ出た」技を使うという宣言にもなりますしね。
2010/05/14 01:35:10 UTCshiro
#
s/trunc/trunk/
2010/05/14 01:35:12 UTC(び)
#
define-constantみたいなもんか
#
そう考えると、define-constantとdefine-inlineって同じようなものなのかな
2010/05/14 01:36:27 UTCshiro
#
そう。理想的には同じなのだけれど、実装上の都合で分けてる。define-constantはどこに表れても値と置換するのに対し、define-inlineは関数のインライン展開のみに使う。
#
というのは、値を埋め込んじゃうとプリコンパイルでバイトコードに落とせない場合があるから。
2010/05/14 01:37:09 UTC(び)
#
なるほど
2010/05/14 02:03:16 UTCえんどう
#
$ gosh gears.scm 

GL_RENDERER	  = NVIDIA GeForce GT 330M OpenGL Engine
GL_VERSION	  = 2.1 NVIDIA-1.6.10
GL_VENDOR	  = NVIDIA Corporation
GL_EXTENSIONS = GL_ARB_transpose_matrix GL_ARB_vertex_program GL_ARB_vertex_blend GL_ARB_window_pos GL_ARB_shader_objects GL_ARB_vertex_shader GL_ARB_shading_language_100 GL_EXT_multi_draw_arrays GL_EXT_clip_volume_hint GL_EXT_rescale_normal GL_EXT_draw_range_elements GL_EXT_fog_coord GL_EXT_gpu_program_parameters GL_EXT_geometry_shader4 GL_EXT_transform_feedback GL_APPLE_client_storage GL_APPLE_specular_vector GL_APPLE_transform_hint GL_APPLE_packed_pixels GL_APPLE_fence GL_APPLE_vertex_array_object GL_APPLE_vertex_program_evaluators GL_APPLE_element_array GL_APPLE_flush_render GL_APPLE_aux_depth_stencil GL_NV_texgen_reflection GL_NV_light_max_exponent GL_IBM_rasterpos_clip GL_SGIS_generate_mipmap GL_ARB_imaging GL_ARB_point_parameters GL_ARB_texture_env_crossbar GL_ARB_texture_border_clamp GL_ARB_multitexture GL_ARB_texture_env_add GL_ARB_texture_cube_map GL_ARB_texture_env_dot3 GL_ARB_multisample GL_ARB_texture_env_combine GL_ARB_texture_compression GL_ARB_texture_mirrored_repeat GL_ARB_shadow GL_ARB_depth_texture GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_occlusion_query GL_ARB_point_sprite GL_ARB_texture_non_power_of_two GL_ARB_vertex_buffer_object GL_ARB_pixel_buffer_object GL_ARB_draw_buffers GL_ARB_shader_texture_lod GL_ARB_color_buffer_float GL_ARB_half_float_vertex GL_ARB_texture_rg GL_ARB_texture_compression_rgtc GL_ARB_framebuffer_object GL_EXT_compiled_vertex_array GL_EXT_draw_buffers2 GL_EXT_framebuffer_object GL_EXT_framebuffer_blit GL_EXT_framebuffer_multisample GL_EXT_texture_rectangle GL_ARB_texture_rectangle GL_EXT_texture_env_add GL_EXT_blend_color GL_EXT_blend_minmax GL_EXT_blend_subtract GL_EXT_texture_lod_bias GL_EXT_abgr GL_EXT_bgra GL_EXT_stencil_wrap GL_EXT_texture_filter_anisotropic GL_EXT_secondary_color GL_EXT_blend_func_separate GL_EXT_shadow_funcs GL_EXT_stencil_two_side GL_EXT_depth_bounds_test GL_EXT_tex
#
長過ぎて切れた
#
11497 in 5.0 seconds = 2299.4 FPS
22120 in 5.0 seconds = 4424.0 FPS
22151 in 5.0 seconds = 4430.2 FPS
22334 in 5.0 seconds = 4466.8 FPS
22134 in 5.0 seconds = 4426.8 FPS
18851 in 5.0 seconds = 3770.2 FPS
2010/05/14 02:12:37 UTCshiro
#
うちGeForce8400GSで3770FPSくらい。GT330だともっと出ても良さそうな気もするけど、並列性を活かしたシェーダーとか使ってるわけじゃないのでこんなものなのかも。
2010/05/14 07:18:15 UTCえんどう
#
http://twitter.com/eyasuyuki/status/13962319372
#
つぶやくボタン付けました http://karetta.jp/article/blog/karetta-news/257066 停電のため停止します(5/16) - karetta.jp
#
反映しないっぽい
2010/05/14 07:28:54 UTCshiro
#
認証はOAuth実装した? それともまだBasic?
2010/05/14 07:55:53 UTCeyasuyuki@twitter
#
認証しないRESTバージョンっす
2010/05/14 07:57:17 UTCえんどう
#
javascript:window.location='http://twitter.com/home?status='+encodeURIComponent(location.href+' '+document.title);
2010/05/14 07:59:29 UTCshiro
#
ユーザが既にログインしてること前提ってことか。
2010/05/14 08:00:58 UTCeyasuyuki@twitter
#
そうです。ログインしてなければtwitterのログインページにリダイレクトされるので
#
bit.lyで圧縮するのは断念