!kiyoka.blog.2009_09 RSSPLAIN

Related pages: !kiyoka.blog.list
255255555555555543055555555555555555555555555555555555555555555555555505555555555555555550555555555555555555555555555555555555555555555555555555555555555555550555555555555555555555555550555555555551055555555055555555555555555550555555555555555555555555505
2

kiyoka日記。NendoSekkaの開発や、最近思うことなど

5

最新10件!kiyoka.blog   過去記事一覧!kiyoka.blog.list

5

kiyoka.blog_header 

2

このブログを書いている人: 西山 清香(kiyoka) - twitter: @kiyokaEXT

5

5

 

5

 

5

kiyoka.2009_09_26[Apple][クラウド] MobileMeのiDiskがオフラインで使えないとは知らなかったぞ

5

MobileMeのアカウントをとってiPod touch専用ソフトのiDiskを使いはじめた。

5

iPod touchで電車通勤中に手軽にPDFファイルを見るのが目的だったのだが...

5

なんと、オフライン(WiFiがつながっていない状態)ではPDFファイルを見ることができない。そんな...

5

100MByteのキャッシュを設定しているのに、たかが 4MByteのPDFが載らないわけがないのに。

5
 1-1214837586kaUN
5

まあ、そういう仕様だということであきらめるしかないか。

5

次はDropBoxを試してみよう。もしそれができたらもうMobileMeのアカウントいらない。

5

 

4

COMMENTsion

Googleドキュメント…は iPodでは動かないのかな

3

COMMENTkiyoka

GoogleドキュメントはiPod touchに対応しているけど、PDFは扱えなさそうです。

いろいろ考えると、PDFを印刷して持ち歩くのが一番手軽という結論になりかかっております。ちょっとどんくさい...

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2009_09_24[Nendo] Ruby 1.8.x対応を見送った

5

私がRubyで書いているLisp方言、 Nendoについて。

5

 

5

Nendoでmapをネストして2重ループを形成すると変な動作をする。何だこれは。

5

クロージャのレキシカル変数の内容がどんどん破壊される。

5

小一時間ほど追いかけた結果、Ruby 1.8.xのクロージャの問題だということが発覚した。

5

結論としては、Ruby 1.8.xのクロージャはレキシカルクロージャではないことを自分が忘れていたのが問題。... 3844653122_4b8def232e_m

5

NendoのlambdaはRubyのクロージャにそのままマッピングするようになっているため、Rubyのクロージャがレキシカルクロージャでない限りNendoのlambdaが正常に動かないのも当然だった。

5

 

5

ちょっとテストとしてはわかりにくいかも知れないが、こんなRubyコードで実験した。

5
#!/usr/local/bin/ruby
5
5
lambda1 = lambda { |val|
5
  printf( "(0) = %s\n", val )
5
  val = 'A'
5
  printf( "(1) = %s\n", val )
5
  lambda2 = lambda { |val|
5
    printf( "(2) = %s\n", val )
5
  }
5
  lambda2.call( 'B' )
5
  printf( "(3) = %s\n", val )
5
  val
5
}
5
lambda1.call( 'START' )
5

 

5
Ruby 1.9.2devでは期待通り
5
$ ruby --version
5
ruby 1.9.2dev (2009-07-18 trunk 24186) [powerpc-darwin9.5.0]
5
$ ./t.rb
5
(0) = START
5
(1) = A
5
(2) = B
5
(3) = A
5

(3)の箇所で値 'A' が保持されている

5

 

5
Ruby 1.8.7では...
5
bash-3.2$ ruby --version
5
ruby 1.8.7 (2009-06-12 patchlevel 174) [powerpc-darwin9.5.0]
5
bash-3.2$ ./t.rb
5
(0) = START
5
(1) = A
5
(2) = B
5
(3) = B
5

(3)の箇所で値 'B' になる。

5

 

5

Ruby 1.9.2がもうすぐ正式に出る時期なので、まじめにRuby 1.8.xでも動く様にするのはあきらめよう。

5

ちなみに、JRubyとかはどっちなんだろう。今度確認しよう。

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2009_09_15[Nendo] シェルトランポリンの実現方法2

5

私がRubyで書いているLisp方言、 Nendoについて。

5

 

5

238-1211521058obji

5

Nendo特有の実現方法としてNendoはtrueというRubyの予約語をそのまま持ちこんでいるので、次の様なシェルトランポリンが書ける。

5
#!/bin/sh
5
true; exec /usr/local/bin/nendo "$0"
5
5
;;-*- mode: nendo; syntax: scheme -*-;;
5
(print (+ "abc" "def"))
5
5

 

5

但し、Gaucheの :; 方式に比べて true; 部分がちょっと目立つけど...

5

まあ、とりあえずはこれでいいや。

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2009_09_14[Nendo] シェルトランポリンの実現方法

5

私がRubyで書いているLisp方言、 Nendoについて。

5

 

5

シェルトランポリン

5

238-1211521058obji

5

NendoはRubyで実装しているので、スクリプトをこんな風に始めることはできない。

5
#/usr/local/bin/nendo
5
.
5
.
5

Rubyのライブラリを静的リンクをすれば出来るけれどそれは大袈裟過ぎるので避けたい。

5

 

5

Gaucheのリファレンスにはこんな方法が紹介されている。

5
 Gauche ユーザリファレンス: 3.3 Schemeスクリプトを書くEXT
5
典型的なGaucheスクリプトの最初の行は次のようなものです。
5
  (略)
5
  #!/bin/sh
5
  :; exec gosh -- $0 "$@"
5

よし、パクろう。(笑)

5

と思ったが、':' に何か特別な仕組みを持たせないといけないのかも。ちょっと調べてみた。

5

 

5

Gaucheの ':' は?

5

さっそく実験。まずはgosh

5
bash-3.2$ gosh
5
gosh> :
5
:
5
gosh> (if : 1 2)
5
1
5
gosh> (symbol? 'a)
5
#t
5
gosh> (symbol? ':)
5
#f
5
gosh> (set! : 1)
5
*** ERROR: Compile Error: syntax-error: malformed set!: (set! : 1)
5
"(stdin)":5:(set! : 1)
5

うわー、これは何なんだ。よくわからんけど、単体で評価しても無害なようだ。

5

また、':' は破壊できないようだ。

5

SchemeのR5RSの仕様を調べたら、':' は拡張アルファベット文字といってアルファベットと同格として扱って良いみたいだけど...

5

Gaucheはちょっと ':' を特別扱いしているのかな。

5

なので当然こうなる。

5
gosh> :; exec gosh -- $0 "$@"
5
:
5

 

5

bashの ':' は?

5

bash の':'は常に真を返すコマンドとして有名だ。

5
bash-3.2$ :
5
bash-3.2$ echo $?
5
0
5
5
bash-3.2$ while :
5
> do
5
>   date
5
>   sleep 1
5
> done
5
2009年 9月14日 月曜日 21時57分49秒 JST
5
2009年 9月14日 月曜日 21時57分50秒 JST
5
2009年 9月14日 月曜日 21時57分51秒 JST
5
2009年 9月14日 月曜日 21時57分52秒 JST
5
  C-c C-c  (中断)
5

 

5

結論

5

Gaucheのように単に無害な ':' を実装すればよいのかもしれない。

5

今度実際にやってみよう。

5

 

5

COMMENT齊藤

Gauche では : を先頭につけた識別子はキーワードとして扱われます。

単体の : でもキーワードとして認識されるようですね。

(keyword? :) は #t になります。

r5rs には無い Gauche 特有の機能ですので、Gauche のマニュアルを見て下さい。

5

COMMENTkiyoka

コメントありがとうございます。

先日、Chaton上でlequeさんにも教えてもらいました。

Gaucheは純粋なSchemeからうまく拡張されていて実用レベルを保っているんだと思いました。

ただ、Nendoにはまだキーワードは入れずにいこうかなと思っています。

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2009_09_12[言語][Python] Pythonのlambda

5
 Pythonのlambda - 西尾泰和のはてなダイアリーEXT
5
   The fate of reduce() in Python 3000EXT
5
     Why drop lambda? Most Python users are unfamiliar with Lisp or
5
     Scheme, so the name is confusing; also, there is a widespread
5
     misunderstanding that lambda can do things that a nested function
5
     can't
5
 このあたりかな。つまり、まずもって大部分のPython使いはLispに不慣れだし、
5
 「lambdaじゃないとできないことがある」という誤解の元になる(実際にはネ
5
 ストした関数を作ればいいだけなのでlambdaは必要ない)のでlambdaを削除し
5
 ようとした、ってこと。
5

 

5

 

5

そうだったのか。

5

Pythonはlambda式にマルチステートメントが使えないなど、不備が多いなと思っていた。

5

0137129297

5

自分はこのPythonのlambda式さえ改善すれば気持ちよくPythonでコードが書けるのにと思っていたのだけど、そもそ言語作者の意図でそうなっていたのか...

5

それはどうしようもないなあ。

5

 

5

 

5

ちなみに、西尾さんの記事にリンクされているドキュメントは良い。後でちゃんと読もう。

5
 言語パターン - 使いやすい言語・ライブラリをデザインする方法 - qwik.jp/lang-patternEXT
5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2009_09_11[本] プログラミング言語Lua公式解説書

5
 4048677977 Programming in Lua プログラミング言語Lua公式解説書: Roberto Ierusalimschy, 新丈 径
5

プログラミング言語デザインの学習の足しになりそうなので1冊買っとこう。

5

プログラミング言語の作者自身が書いた本は貴重なので、見つけたらできるだけ買っときたいものだ。

5

時々、言語デザインのトレードオフについて書かれていることがある。

5

特に有用な情報としては、実際には採用しなかった案と、採用しなかった理由が書かれている場合だ。

5

そんなことは言語デザイナ本人しか知らないからねぇ。

5

 

1

COMMENTNeyra

That's a crackerjack answer to an interesting qeuiston

0

comment (disabled)

5

 

5

5

 

5

 

5

kiyoka.2009_09_09[クラウド] Google App Engineとかやってみたい

5

最近やってみたいばっかりで自由な時間がない。

5

クラウドサービス楽しそう。KVSデータベース楽しそう。いつか遊んでみたい。

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2009_09_07[本] 最近読んだ本。(佐々木氏の本、他)

5

なかなかコンピュータをさわる時間はあまり無いけど、電車に乗っている時間が有るので本だけは読める。

5

というわけで最近読んだ本。

5

4166607081  2011年新聞・テレビ消滅 (文春新書): 佐々木 俊尚

5

4166606573  ブログ論壇の誕生 (文春新書): 佐々木 俊尚

5

 

5

上の、佐々木氏の二冊は未来はこうなるのだ!と煽りすぎのような気がする。

5

が、ユーザーのメディアを消費する手段は変化しつづけ、コストも下がり続けているので、うかうかしていると本当にすごいスピードでマスメディアが無くなってしまうかもしれない。

5

そうなっても自分の生活は変わらないけれど、経済の世界では間接的にいろんな変化を見れるだろうから楽しみだ。

5

 

5

4798118923  More Joel on Software: Joel Spolsky, 青木 靖

5

 

5

Joel本はWebでも読めるのだけれどもまあ、本の方が読みやすいので買った。

5

ソフトウェア開発に関する示唆に富んだ話が沢山あり、読んでおくとムダな個人サービスを作って人生の貴重な時間をムダにしなくて済むなあと思った。

5

これは人月で仕事をしていない人は読んでおいた方がよい本だよねー。

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2009_09_02[Nendo] オレオレ参照透明性というアイデア(immutable宣言)

5

私がRubyで書いているLisp方言、 Nendoについて。

5

 

5

immutableというスペシャルフォームで副作用なしを宣言するプログラミングスタイルはどうだろうと考えている。

5
 322-12256801703abM
5

まだ、どのような仕様にするか全然見えてないけど、どんなことが実現したいかという考えは大体ある。

5

 

5
immutable宣言した範囲では副作用が無いかチェックしてくれる
5

immutableなコードを塗りつぶすというようなイメージ。

5

immutableなコードから、mutableなコードを呼びだすとエラーとなり、その発生ポイントも同地に報告してくれる。

5

 

5
immutable宣言した範囲は自動的に並列実行できる
5

例えば、mapが取る手続とリストの両方についてimmutableしか受けつけないが、for-eachはmutableも受けつけるとか。

5

mapとfor-eachの違いはそれだけに留まるようなイメージ。

5

そうすれば、処理系はmapで受けた要素同士は独立性が確保されていると判断できるので、結果、並列実行が可能となる。

5

 

5

また、Rubyのライブラリを使った時にもこのルールが機能するように、Rubyのライブラリロード時にもimmutable宣言したいメソッドリストが指定できるとかできないか。

5

 

5

問題は、immutableだと信じた範囲を自分で宣言する所で、例えばHaskellをやっているような人には受けいれられないだろうけど、Lisp系言語には合った実践的な方法かなと思っている。

5

まあ、プログラマが自己判断で宣言するところが曲者で、実際には使いものになるのかは不明。

5

他の言語で似たようなアイデアを持ったものないのかな。もっと勉強しないと。

5

 

0

comment (disabled)

5