ときどきの雑記帖 i戦士篇

最新ページへのリンク
目次ページへのリンク

一つ前へ 2008年6月(上旬)
一つ後へ 2008年6月(下旬)

ホームへ

2008年06月20日

■_

jijixi's diary - 自分はボケてしまったのだろうか?と思わざるを得なかったできごと , RD 潜脳調査室む。ここにも隠れていたファンがいたのかw ここ数週間。アキバ等に出向くたびにOP/EDのCDを買おうと思ってるはずなんだけど いざ現地に着くと忘れてしまっているという。 重症ですねw

んー、近場のTSUTAYAあたりでもありそうな? Amazon.co.jp: Supernova/Wanderland: 9mm Parabellum Bullet, 菅原卓郎Amazon.co.jp: Always in My Heart: LAST ALLIANCE, MATSUMURA, ANZAI

■_ RubyKaigi2008

さてどのくらいの人が今日から出向いているのでしょうか。 つくばまでの移動をチェックしていたところ、秋葉原へ出てつくばエクスプレスに乗るよりも どうも北千住まで出てそこでつくばエクスプレスに乗ったほうが乗り換えの回数や 所要時間が少なくすむようでしたw が、北千住駅の時刻表を確認すると… なんだよつくばまで行かない編成が結構あるんじゃないか○| ̄|_

10時開演というのから逆算すると…うわあw

マクロスFを観終わったら寝るか。

■_ matz 近況?

最近は日記を書くヒマも無いようで。

楽天×まつもとゆきひろで世界はどう変わる? 前編

前回の楽天技術研究所の森正弥代表インタビューの際、楽天のRubyに関する研究として「fairy」
「ROMA」の2つのプロジェクトがあることを紹介した。このプロジェクトの概要が、6月20日から
開催される日本Ruby会議で紹介されることになっているという。これに先立ち、楽天技術研究所
の森氏と、Rubyを開発したまつもとゆきひろ氏に話を聞いた。前編、中篇、後編の3編に分けて
紹介する。
楽天×まつもとゆきひろで世界はどう変わる? 前編
──Rubyを使って何をするのかということを考えたときに、楽天には大量のデータがあるわけですよね。

森:楽天で3800万、グループ全体で4400万の会員がいます。

まつもと:その膨大なデータが、ほぼ手つかずの状態にありました。これをデータマイニングす
ると、いろいろなことが分かると思うのです。でも、既存(商用)のデータベースを導入して決ま
り切った解析をしても、狭い範囲のことしか分からない。もう少し、柔軟なデータマイニングを
したいという思いがあります。また、データマイニングの際、パフォーマンスよりもいかに簡単
な手順で処理できるかが重要になり、加えて処理がすごく早くないにしても現実的な範囲内で処
理が終わる速度ということもカギになるだろうと考えました。

んー膨大な生データ。解析してみたい(なにを?)

■_ あとで観る

“表計算ソフトの父”が「wikiCalc」に至るまでを支えた情熱--Super Techies - builder by ZDNet Japan

“表計算ソフトの父”が「wikiCalc」に至るまでを支えた情熱--Super Techies - builder by ZDNet Japan
ITの歴史にイノベーションを巻き起こした技術者に話を聞くシリーズインタビュー「Super 
Techies」。このビデオでは、世界初の商用表計算ソフト「VisiCalc」の共同開発者であり、現
在ではウェブでのコラボレーションが可能なWikiベースの表計算ソフト「wikiCalc」の開発者と
して知られるソフトウェア界の巨匠、Dan Bricklin氏が、ソフトウェアによるイノベーションの
過去と現在を語る。


再生時間:10分45秒

あまり長くないので身構えなくてすみそう。 一時間とかあるとちょっと辛い。

■_

ラリー・ウォール@Perlは、とっっても愛妻家!/Tech総研

― 	Perl6では便利な機能がたくさん搭載されそうですね。ラリーさんはいつも、「Perl6は
        クリスマスに完成するが、いつのクリスマスかはわからない」と言っています。ひょっと
        して、今年のクリスマス?

L 	『希望です(笑)』。ただ、今年のクリスマスまでには、とてもいいα版が出るかもし
        れません。私の中には、Perl6はずっと完成しなくてもいいという気持ちもあるのですが。

― 	いえ、ぜひ完成させてください(笑)。

L 	ハハハ。使える一部だけでもリリースしたいとは思っていますよ。そもそもPerl6の設
        計を始めた段階で、私たちがやろうとしていることは「不可能」だと思っていました。
        ただ、まずはやってみようと。何かはできるのではないかと思って進めてきたのです。
ラリー・ウォール@Perlは、とっっても愛妻家!/Tech総研

― 	あなたはあるインタビューで、「ソフトウェアには文化が必要だ」と答えていました。
        その話とも関係あるのですか?

L 	ほとんどのエンジニアリングはひとりではできません。ひとりでできるプロジェクトも
        ありますが、どこかで限界があるでしょう。特にプロジェクトが大きくなると複数の人間
        がかかわるようになります。

         そのときには、同じ言葉は話せなくても似たような言葉で、同じ気持ちで、同じ情熱を
        もって、一緒に行動する必要があります。その「類似点」が文化だと思っています。皆が
        まったく同じである必要はありませんし、むしろ多様性があって、なおかつひとつの統
        一感をもつほうが文化としては強みがあるでしょう。ただ、多様性が一定のレベルを超
        えると文化もバラバラになってしまうので、バランスは大切ですが。

― 	あなたにとってプログラミングとは何でしょうか?

L 	シンフォニー(交響曲)を作曲するようなものだと思っています。プログラミングとは、
        同時に、さまざまなレベルで、物事が動かなくてはならないからです。例 えばメロディ
        を感じて、ハーモニー、リズム、フィーリング、ボイスなどが増え、それらが織りなす
        ものも見えてくると思います。中には醜い部分もとても美し い部分もあるのですが、
        結局はうまいところに収まるような感じです。

― 	先ほどからわかりやすく、いいお話ばかりをうかがっています。あなたの話をまとめて
        出版したいくらいです。

L 	年を取って、やることがなくなったらいいかもね(笑)。

ACMチューリング賞も受賞しているコンピュータ初期に活躍したウィルクスという人が 自伝を書いているのですが(丸善から日本語訳も出ています。 ウィルクス自伝―コンピュータのパイオニアの回想: モーリス・V. ウィルクス 面白いので嫁。 キミとか キミとか キミとか)、 ほかにこういうのを書いた人…あ、Linus の「Just for fun」もそうだいね。 しかし「蟲師」とはまた渋いところを。これはCX系でアニメになったからかな? 例によってフジには冷たい扱いされてたけど(笑)、よくできていたシリーズだと思うし。

■_

図解: Perl と Unicode 文字列 - daily dayflower

図解: Perl と Unicode 文字列 - daily dayflower
Unicode のメリット

   1. (繰り返しになりますが)Unicode が一番多くの文字種・文字数をサポートしています。
          * このため,あなたが Unicode centric で書いたアプリケーションを世界中の人が
            使うことができます(EUC-JP ではこうはいきません)。

   2. また,このため様々なエンコーディング(で表現できる文字セット)から Unicode 文字
      セットに変換しても情報の欠落はおきません*13。

   3. Perl は Unicode をネイティブにサポートしているため,バイト境界(文字を byte 
      stream で表現する際の2バイト目,など)を意識する必要がありません。

収録されている文字数が多いというのはたぶん間違いではないと思うんだけど、 TRONとかGB18030っていまどのくらいの数を収録しているんだろう?

あとUnicodeの「デメリット」として変換表の問題を挙げてないのはちょっとマイナスかな。 「~」とかが化けるとか言うやつね。それに関連して、特に 'shiftjis' と 'cp932' の 違いとか。 あ、 こっちで use Encode; - 今日のCPANモジュール ちょっと触れられてますね。

■_ セキュリティ重要

Ruby on Rails Security Project — Exploring the Security of Rails and friends.

Ruby on Rails Security Project — Exploring the Security of Rails and friends.

Automatic security

Security is not easy-to-use, not fancy and it is hard to remember all those nasty 
attack methods. So there are automatic security checks, firewalls, helpers and a lot 
more. They are built to make your application more secure. But automatic security 
tools can't help you to find logic faults. What if you have a Cross-Site Scripting 
scanner that checks each and every field in your web application, but with a little 
knowledge, an attacker could change one id in the URL and he sees his neighbor's 
confidential data.

セキュリティは easy-to-use でもないし、fancy でもありません。
nasty な攻撃手法は思い出すことが難しいくらいたくさんあります。
そして自動的なセキュリティチェック、ファイアウォール、ヘルパーなどと
いったものがたくさんあります。
こういったものはあなたのアプリケーションを安全にするためにbuiltされている
しかし自動セキュリティツールは論理的な間違い(logic faults)をあなたが
見つけ出すのを助けてはくれません。
あなたがクロスサイトスクリプティングスキャナーを持っていて
それがあなたのwebアプリのフィールドをチェックしてくれたとしても
ちょっとした知識があれば、攻撃側はURLのidの一つを変更してしまうことで
隣人の秘密のデータを見てしまうことができてしまうかもしれません。


BUT, automatic tools can be of great help, if you won't solely rely on them. The 
SafeErb plugin reminds you to sanitize output, but it doesn't do it automatically. A 
mass-assignment scanner might find this kind of security holes in you application. Or 
a web application firewall may protect holes you are not aware of. And, of course, 
security is a process and should be incorporated into the entire project life cycle.

とはいえ、自動化されたツールは非常に大きな助けになる可能性があります。
SafeErbプラグインはサニタイズする出力をあなたに知らせてくれます。
算術代入スキャナーはあなたのアプリにあるセキュリティホールの
類を見つけてくれるかもしれません。


That having said, I'd like to show you a nice web application firewall for your 
.htaccess, if you happen to use Apache. It comes from 0×000000.com, a whitehat hacker 
site, and it's the result of seven years of server administration. It is not perfect, 
it is not especially for Rails applications or for your specific application, but it 
is definitely a good starting point. You can read the tutorial for explanation.

Ruby on Rails Security Project — Exploring the Security of Rails and friends.

RewriteEngine On
Options +FollowSymLinks
ServerSignature Off

RewriteCond %{REQUEST_METHOD}  ^(HEAD|TRACE|DELETE|TRACK) [NC,OR]
RewriteCond %{THE_REQUEST}     ^.*(\\r|\\n|%0A|%0D).* [NC,OR]

RewriteCond %{HTTP_REFERER}    ^(.*)(<|>|'|%0A|%0D|%27|%3C|%3E|%00).* [NC,OR]
RewriteCond %{HTTP_COOKIE}     ^.*(<|>|'|%0A|%0D|%27|%3C|%3E|%00).* [NC,OR]
RewriteCond %{REQUEST_URI}     ^/(,|;|:|<|>|">|"<|/|\\\.\.\\).{0,9999}.* [NC,OR]

RewriteCond %{HTTP_USER_AGENT} ^$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^(java|curl|wget).* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner).* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(libwww-perl|curl|wget|python|nikto|scan).* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(<|>|'|%0A|%0D|%27|%3C|%3E|%00).* [NC,OR]

RewriteCond %{QUERY_STRING}    ^.*(;|<|>|'|"|\)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/\*|union|select|insert|cast|set
|declare|drop|update|md5|benchmark).* [NC,OR]RewriteCond %{QUERY_STRING}    ^.*(localhost|loopback|127\.0\.0\.1).* [NC,OR]
RewriteCond %{QUERY_STRING}    ^.*\.[A-Za-z0-9].* [NC,OR]
RewriteCond %{QUERY_STRING}    ^.*(<|>|'|%0A|%0D|%27|%3C|%3E|%00).* [NC]

RewriteRule ^(.*)$ access_log.php 

へーこの手の要素の書き換えも指定できたのか。

え?

lispの入門書 -OKWave
lispの入門書を探しています。

lispの書き方をただ説明するだけでなく、他の言語と違ってどういう利点が
あるのかを説明したものがいいです。

なにかおすすめの本があったら教えてください。

という質問に対する回答。

lispの入門書 -OKWave
・The Little Schemer

Lispの最高の入門書です。一問一答を追っていくことで、リスト操作やLispプログラムを作っていく
感覚について皮膚で理解できるようになります。
英語ですが、難しい文章はないのでそれほど問題ないはず。
環境の整えかたなどの記述はいっさいありません。 "Lisp" を実践して学ぶ本です。

・プログラミングGauche
Lispの方言の一つにSchemeという言語があります。その一つの処理系であるGaucheの本です。
さいきん出たばっかり。Gauche のさまざまな組み込み関数を利用することで関数型プログラミ
ングを実践していきます。日本語で勉強したいならこちらです。

・リスト遊び
日本語だとこの辺も入門書です。あまり詳しく知りませんが、Emacs Lispの本です。
筆者はEmacs上でemailを読めるMewというソフトウェアの開発者でもあるそうです。

Lispの良さについてはネット上の文章を読む方がよろしいかと。適当に、LispとかPaul Graham
とかShiroとかのキーワードを探してみてください。
「ハッカーと画家」を読むのも良いですね。

Lispコミュニティにコミットするのがいちばんですが。

キーワードになってる shiroさんすげー。

ぢゃなくて。門外漢のわたしには良くわからんのですが、Schemeがまあ少なくとも 出だしはLispの一方言だったとして、「Lispに入門したいです」という相手に対して 問題なく勧められるものなんでしょうか?(^^;

いやまあ共通な部分も少なからずあるでしょうけど、 マクロとか継続とかはどうなのかなあと。 初心者がそこに行くにはしばらくかかるだろうから問題はない?

2008年06月19日

フリーってのは良いよ。忙しいときはお金がもらえるし、忙しくないと自由がもらえる。



  某ネットラジオ冒頭での某氏のお言葉

■_

あれとかあれとかあれとかたまってく一方なのに、お金とかは貯まらねえなあ(笑)

いけがみさん。 Inemuri nezumi diary

今回、唯一お会いできる機会である Tokyo Society for the Application of Currying (TSAC) 
はデフォルト英語みたいね、日本語のページないし。僕は、終始拙い英語で話す予定です。参加
しようと思う人は、TSAC のルールにしたがって事前に主催者に連絡を取ってください。英語で。

わたしにはとてつもなく高い障壁です○| ̄|_ ので、治療の成功とご平癒をお祈り申し上げておきまする。

Firefox 3。 ダウンロードはしたものの、微妙にアドオンの対応状況がナニなので ちょっと様子を見ることにする。 bbs2chreader と all in one gestureが…って 前者は先っちょが対応作業中だし、後者は今は使ってない模様(笑)

でもインストールしてごにょごにょするのは週明けからかなあ。

■_ ベータに移行

Python 3.0b1リリース。 .msi 形式はまだ用意されていないみたいなんだけど、自力でビルドしてみるかなあ。

Python 2.6b1 Release
Python 2.6

These are the alpha releases of Python 2.6. They are not suitable for production use. 
We're releasing it in order to solicit feedback from the wider Python development 
community. The NEWS file conains a listing of everything that's new in Python 2.6b1.
Python 3.0b1 Release
Python 3000

Python 3000 (a.k.a. "Py3k", and released as Python 3.0) is a new version of 
the language that is incompatible with the 2.x line of releases. The language is 
mostly the same, but many details, especially how built-in objects like dictionaries 
and strings work, have changed considerably, and a lot of deprecated features have 
finally been removed.

This is an ongoing project; the cleanup isn't expected to be complete until 2008. In 
particular there are plans to reorganize the standard library namespace.

この辺の文言は変わっていないっぽい。

■_ C++

Hexenkessel - 現在午前3時。眠いけど、これだけは書きたい。GCCをC++で書き直すらしいです。Ianすげー。...melancholic afternoon の6月18日分経由 http://airs.com/ian/cxx-slides.pdf

 C++ is a standardized, well known, popular language.
  C++ は標準化されていて、よく知られているポピュラーな言語
 C++ is nearly a superset of C90 used in gcc.
  C++ は gccで使われている C90 のスーパーセットに近い
 The C subset of C++ is just as efficient as C.
  C++ のサブセットとしての Cは 素のCと同じくらい効率が良い
 C++ supports cleaner code in several significant cases.
  C++ は いくつかの特定のケースにおいて明確なコードをサポートする
 C++ makes it easier to write cleaner interfaces by
 making it harder to break interface boundaries.
  C++ はインターフェースの境界を破ることを困難にすることで
  明瞭なインターフェースの記述を簡単にしている
 C++ never requires uglier code.
  C++ は uglier なコードを決して要求しない
 C++ is not a panacea but it is an improvement.
  C++ は panacea (万能薬) ではないが improvement (進歩) ではある
/* C */
typedef struct loop *loop_p;
DEF_VEC_P ( loop_p );
DEF_VEC_ALLOC_P ( loop_p, gc );
VEC ( loop_p, gc ) *superloops;
VEC_reserve ( loop_, gc, superloops, depth ) ;
VEC_index ( loop_p, superloops, depth )
VEC_qui c k push ( loop_p , superloops, father ) ;

// C++
typedef std::vector<struct loop * , gc_allocator> loop_vec;
loop_vec* superloops;
superloops−>reserve( depth );
superloops [ depth ];
superloops−>push_back ( father );
tree_contains_struct

/* C */
tree_contains_struct[VAR_DECL][TS_DECL_WITH_VIS]=1;
#define CONTAINS_STRUCT_CHECK(T,STRUCT) __extension__      \
({__typeof (T) const __t=(T);                              \
  if (tree_contains_struct[TREE_CODE(__t)][(STRUCT)]!=1   )\
tree_contains_struct checkfailed(__t, (STRUCT), __FILE__,  \
                                  __LINE__, __FUNCTION__); \
  __t;})

#define DECL_WITH_VIS_CHECK(T) CONTAINSSTRUCTCHECK(T,TS_DECL_WITH_VIS)
#define DECL_DEFER_OUTPUT(NODE)\
(DECL_WITH_VIS_CHECK(NODE)−>decl_with_vis.defer_output)
struct tree_decl_with_vis GTY(())
{
    struct tree_decl_with_rtl common;
    ...
    unsigned defer_output:1;
};

struct treevardeclGTY(())
{
    struct tree_decl_with_vis common;
};

//C++
template<T>T* check_non_null(T*p){gcc_assert(p); return p;}
#define IS_STRUCT_CHECK(T,STRUCT) (check_non_null(dynamic_cast<T*>(STRUCT))
#define DECL_WITH_VIS_CHECK(T) IS_STRUCT_CHECK(T, tree_decl_with_vis)
#define DECL_DEFER_OUTPUT(NODE) \
  (DECL_WITH_VIS_CHECK(NODE)−>decl_with_vis.defer_output)

class tree_decl_with_vis : public tree_decl_with_rtl
{
    ...
    unsigned defer_output:1;
};

class tree_vardecl:public tree_declwithvis{
};

TARGET or Target?
/* C */
/* target.h */
void (*init_ builtins)(void);
/* targhooks.h */
#define TARGET_INIT_BUILTINS hook_void_void
/* i386.c */
#undef TARGET_INIT_BUILTINS
#define TARGET_INIT_BUILTINS ix86_init_builtins
static void
ix86 init_builtins(void)
{
    . . .
}

// C++
// target.h
class Target
{
    virtual void init_builtins () { }
};

// i386.c
class Target i 386 : public class Target
{
    void
    init_builtins ()
    {
        ...
    }
};

htab or unordered map? 
ハッシュテーブル それとも (順序のない)マップ?
/* C */
htab_t exits ;

return  htab_find_with_hath(exits, e, htab_hash_pointer(e)) ;

slot = htab_find_slot_with_hath (exits, e,
                                 htab_hash_pointer(e),
                                 add ? INSERT : NO INSERT);
if (slot)
 {
    if (add)
        *slot = add ;
    else
        htab_clear_slot(exits, slot) ;
  }

// C++
typedef std::tr1::unordered map&lt;edge, struct loopexit*&gt; exit_map ;
exit_map exits ;

exit_map::iteratorp = exits.find(e) ;
return p != exits.end ( ) ? NULL : p−&gt;se cond ;

if (add)
    exits[e] = add ;
else
    exits.erase(e) ;
Garbage collection or smart pointers? 
ガーベジコレクションかスマートポインタか?

GCC generates temporary garbage which is only freed by ggc collect.
   GCC はggc collect によってのみ解放される一時的なごみを生成している
  ggc collect is expensive–scales by total memory usage.
   ggc collect は 総合定期なメモリ使用量の点で expensive-scales である

C++ permits reference counting smart pointers.
   C++ はリファレンスカウント形式のスマートポインタを許している
  Fast allocation.
    高速な割当て
  Lower total memory usage.
    少ないメモリ使用量の合計
  Copying a pointer adds an increment instruction.
    ポインタをコピーするときのicrement instruction を付加している
  Letting a pointer go out of scope adds a decrement and a test.
    ポインタがスコープから外れるときの decrement とテストを付加している
  Reference counts are normally in memory cache, unlike ggc collect.
    リファレンスカウントはggc collectとは異なり、通常メモリキャッシュに収まっている

We may want to use a mixture of reference counting and garbage collection.

Why not C++? 
なんでC++使わないの?

C++ is too slow! 
C++ は遅すぎるよ!
  C++ is only slower when using optional features which aren't in C.
  C++ が遅いのは、Cにはないような optionalな機能を使ったときだけだよ。

  Sometimes C++ is faster (e.g., STL functions).
  C++ が速いこともあるよ。STL functions とか。

  We would only use features which are worthwhile.
  利用価値がある機能だけ使うようにしよう。

C++ is too complicated! 
C++ 複雑すぎ
  It's just another computer language.
   単に別な言語なだけだって
  Maintainers will ensure that gcc continues to be maintainable.
   

C++ library is a bootstrap problem! 
C++のライブラリには bootstrap問題があるよ!
  C++ compilers are widely available, including older versions of gcc.
  C++ コンパイラは広い範囲で使えるようになってる。古いバージョンのgccも含めてね。

  We would have to ensure that gcc version N - 1 could always build gcc version N.
  あるgccのバージョン N-1 は常にバージョン Nのgccをビルドできることを保証する必要がある

  We will link statically against libstdc++.
  libstdc++ は静的にリンクするよ。

The FSF doesn’t like it!
FSFはC++嫌いじゃん!

  The FSF is not writing the code.
  FSFがコード書いているわけじゃない。
Proposal
ご提案

Permitting C++ in gcc will require steering committee approval.
gccに含まれるC++が steering committee approval を要求する

I plan to create a gcc-in-c++ branch for people to experiment with building gcc in C++.
C++ でgccを構築する人たちのための gcc-in-c++ ブランチを作ることを考えています。

  The interaction of garbage collection and STL constructs will need to be resolved.
    ガーベジコレクションと STLの constructs の interaction (相互干渉?) を解決する必要がある

■_

『Firefox 3』『Opera 9.5』『Safari』の速度を比較 | WIRED VISION

Firefox 3で最も大きな時間の節約になったのは、JavaScriptコードを処理する『Gecko』レンダ
リング・エンジンが大幅に改良されたことによると推測される。AJAXを多用したウェブ・アプリ
ケーションが登場して以来、JavaScriptのレンダリングはブラウザー開発の焦点となっている。

「JavaScriptのレンダリング」って表現にハゲシク違和感をおぼえるのだけどどうでしょうか。

Clock Browser Speeds with Webmonkey s Stopwatch - Webmonkey

The winner of the Webmonkey.com test is unclear — all browsers fall well within a very 
loose margin of error. The winner of the Picasaweb.google.com test is pretty clearly 
Firefox 3. The biggest time saves for Firefox 3 hypothetically result from the major 
improvements in the Gecko rendering engine that handles JavaScript code. Rendering 
JavaScript has become a focal point for browser development since the emergence of 
AJAX-heavy web applications.

あー原文にも“Rendering JavaScript has become ...” ってあるなあ。ふーん。

■_ わははすげーw

Clifford's Homepage - The Brainf*ck CPU

                +---------------+
                |               |
      clk ----->|               |----> addr [15:0]
      rst ----->|               |
                |  B F - C P U  |<-- data_r [7:0]
[7:0] data_o <--|               |--> data_w [7:0]
      enab_o <--|               |--> enab_w
                |    CW 6670    |
[7:0] data_i -->|               |
      enab_i -->|    CW 6671    |
      ackb_i <--|               |
                |               |
                +---------------+

VHDLでつくる Brainf*ck CPU(笑)

Clifford's Homepage - The Brainf*ck CPU
I've developed this hardware just to have a cool example for hardware development in 
VHDL.

Currently there are two revisions of the Brainf*ck CPU in existence: The CW6670 and 
the CW6671. While the CW6670 is a simple straight-forward implementation of a CPU 
executing native brainf*ck code, the CW6671 is an optimized version with an internal 1 
byte data cache.

The source archive contains a detailed README, the VHDL sources, a testbench, a 
Spartan-II based example implementation and demo Brainf*ck programs.

VHDLでのソースは公開されているそうです。

私たちのFirefox 3--今度のキツネはやっぱり爆速だった - コメント - builder by ZDNet Japan

Mozilla Firefoxの名称の由来になっているのは、レッサーパンダ(lesser panda)で、 キツネ
では、ありません!! 従って、「今度のキツネはやっぱり......」と云う題は、不適切だと思
います!!
たつをの ChangeLog
あと、「海の都の物語」を再読したくなりました。
これ、おすすめ本なんだけど文庫版が絶版なのが残念。
でも、ルネサンス著作集に入っているのでまた文庫化されるかも。

え、そうだったの? 中学生のときにハードカバー読んだんだよなあ。 もちろん自分で買うほど金に余裕はなかったので図書館で借りたのだけど。

void GraphicWizardsLair( void );  Links for 2008-06-18 [del.icio.us] 
  駄文 - そろそろ初級レベル(または初心者的)なことをブログに書いたらダメという空気を変えないか - IT戦記

それ以前に、嫉妬や粘着すらされなくなったら関心を引けなくなったんだと嘆いたほうがいい
  
専用パッカーを使う偽アンチウイルス・ソフト「XP Antivirus」:ITpro
全関数の詳細を説明すると時間がかかりすぎるので,コードの流れを軽く追って,興味深い部分
だけにコメントしよう。最初に気づいた点は,ローダーがkernel32.dllのイメージベースを探し
出す方法だ。よく知られたやり方だが,少しだけ難読化しようとしていた。プッシュしたESPレ
ジスタをEDIレジスタにポップしてからループを開始する。この処理の開始段階で,ESPレジスタ
にはkernel32.dllのメモリー上のアドレスが入っており,関数はこれを使う。

 論理シフト命令SHR/SHLを使ってkernel32.dllのアドレスを最も近いページのアドレスに丸め,
そのページのdwordデータを読み始める。そして,読み込んだdwordデータがハード・コーディン
グされたマジック・ナンバー(あらかじめプログラムに書き込まれている数値)に一致するまで,
ページの内容を読んでいく。この値はMZマーカーであり,後ろに2バイトのデータが続いている。
マジック・ナンバーそのものは,コード内に登場しない。値の比較前に必ずビット・ローテート
演算ROLを施したハード・コーディング値を使い,計算で求める。

2008年06月18日

めでたくもあり。めでたくもなし。

どこかでみたようなはなし

プログラミング系のブログ

32 デフォルトの名無しさん [] Date:2008/06/17(火) 20:29:50  ID: Be:
    よいサブルーチンを作成するための心がけ
    http://d.hatena.ne.jp/perlcodesample/20080616/1213635587

    基準が30行って小さすぎるだろ。
    行数と不具合の発生率は関係ないって調査結果が複数あるから、
    行数をサブルーチンの基準にするのって意味ないと思うし、
    あえて基準にするなら100行程度だな。



33 デフォルトの名無しさん [sage] Date:2008/06/17(火) 22:01:51  ID: Be:
    perlならそんなものじゃないかな。
    Cなら6,70行かもしれないけど。 

34 デフォルトの名無しさん [sage] Date:2008/06/17(火) 22:09:09  ID: Be:
    サブルーチンの行数は言語に関係ないでしょ。

35 デフォルトの名無しさん [sage] Date:2008/06/17(火) 22:12:27  ID: Be:
    ブログじゃないけど。

    C++ C言語について 質問1;なぜC++構造体は継承などができないのか?
    http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1417152074

    回答するガワもstructが継承できるって知らない感じ。

36 デフォルトの名無しさん [sage] Date:2008/06/17(火) 22:51:12  ID: Be:
    後のほうにまともな回答があるので、まだ救われる思い。 

37 デフォルトの名無しさん [sage] Date:2008/06/17(火) 23:00:15  ID: Be:
    なぜstructが継承できないと思い違いをしたのかを質問者に質問したい。 

38 デフォルトの名無しさん [sage] Date:2008/06/18(水) 00:09:46  ID: Be:
    俯瞰性じゃない
    スクロールせずに一目で追えるのは基準にはなると思う


Rubyについて(アンチ専用) Part003

334 デフォルトの名無しさん [sage] Date:2008/06/17(火) 23:44:07  ID: Be:

>>332 
別にTwitterがどうこうではないだろう。ただあれ以外にあまり有名なRubyの実績が 
ないってのをたてに叩く理由にするのも解るけど。 

その意味では、ニコニコ大百科の中の人の苦言は残念だし、Ruby開発陣からの 
コメントが欲しい所ではあるな。そういう動きはあんまりいし、それが>>327じゃない 
かと思った 

336 デフォルトの名無しさん [sage] Date:2008/06/18(水) 12:12:33  ID: Be:
    「ニコニコ大百科の中の人の苦言」が届いてないとか 

337 デフォルトの名無しさん [sage] Date:2008/06/18(水) 13:31:26  ID: Be:
    声が届いてると思うこと自体慢心のような気もするな

中の人の苦言てのはこれか。

x86_64環境でRubyからMySQLのクエリを実行するときの問題が示す根本的な問題… - グニャラくんのグニャグニャ備忘録@はてな

ニコニコ大百科というサービスをリリースしたわけですが、

開発言語を選定する際に

「最近書いてなくて忘れかけてるし、部下も書けるし、

 たまにはRubyで書いてみようじゃないか。」

とテキトーに決めたことをちょっと後悔。

特にRubyのbase64に関しては

   1. マニュアルの使用方法の項目にはencode64などの関数を直に使う方法が書いてあるが、生で使うと
      怒られる(encode64 is deprecated; use Base64.encode64 instead)。
   2. Base64.encode64()を使うと、今度は途中とお尻に勝手に改行が入る。マニュアルには書いていな
      い挙動(るびまには書いてあるが)。Base64.encode64().split.joinなどをして改行を除去する
      必要がある。
   3. さらに、urlsafeなエンコードをしようとすると、Base64.encode64().split.join.tr('+/', '-_')
      とする必要がある。

と正直ちょっとイラっとした。

Pythonだとurlsafe_b64encode()という関数がある。これはこれでやりすぎ感はあるけど、実用的。

その他にもCGIモジュール周りも結構手を入れたりして、

足周りを確保する作業を多く行いました。

Ruby、ロジックは非常に書きやすい言語なんだけどなー。

クラスの拡張なども非常にキレイかつ書きやすく出来てしまうので、

手元で問題を修正して満足しちゃって、

本家までパッチが上がらないのかもしれない。

ツッコミビリティの問題かなあ。

んで、そんなのはどうでもいいんだけど、

先日、サービスをちょっと高級なサーバにお引越ししたのです。

その際に、以下の擬似コードが動かなくてかなりあせった。

require 'mysql'
require 'pp'
my = Mysql.connect(host, name, pass, db, port)
st = my.prepare('SELECT ?')
st.execute(0xffffffff)
pp st.fetch
原因は、サーバのOSがi386版からx86_64版に変わったから。 x86_64版Rubyでは、0xffffffffはFixNumになります(irbで0xffffffff.classを見てみよう)。 基本、sizeof(long)*8-1ビットに収まる符号付数値の場合はFixNumになるみたいですね。 MySQL/Rubyのst_execute関数内で、渡されたパラメータの型によって分岐する部分があります。 FixNumなので、case T_FIXNUMのところにコードが遷移するわけです。 んで、そこでFIX2INTを呼んでいるんですねー。 sizeof(int)は4なので、符号を入れると1ビット足りない。 よって、integer 4294967295 too big to convert to `int' と怒られてしまうのだ。 この問題、ip2longした数値をカラムに入れるときに発覚しました。 パッチを書きたいところですが、 他のサービス修正で手が回らない…どこかにパッチ落ちてないかなあ。 FIX2INTをFIX2LONGにすればいいのかな… んで、バグは直せば済むのでよいのです! このようなすぐに見つかってもよさそうなバグが MySQLとの接続モジュールに残っているということで、 「本当にみんなサーバサイドでRubyを使っているんだろうか」 とちょっと不安になったりしたのでした… x86_64版のOSは今や珍しくなくなってきましたし… 追記 パッチ書いたお。 BigNumで64ビットフルに使っている場合に、is_unsignedを立てるとかいう処理はしていないけどね。 tmtmさんにもメールしよ→お返事きた。対応いただけるみたい。ヤッター!

あ、ひょっとして、とみたさんのこの話? → tmtm日記(2008-06-17)

Python 3.0も同じ問題を抱えているような気がするんだけど (2.xまでは長整数への自動変換はなかったよね?)対処済みかなあ?

■_ 俺は降りる

artonさんが環境変数設定用のバッチファイルの存在を教えていたけど、 それやってもまだ問題があるわけで。

C:\work\t\0618\mysql-ruby-2.7.5>ruby extconf.rb  --with-mysql-include=C:\tmp\mysql-4.1.22-win32\include --with-mysql-lib=C:tmp\\mysql-4.1.22-win32\lib\opt
checking for main() in libmysql.lib... yes
checking for mysql_ssl_set()... no
checking for mysql.h... yes
conftest.c
creating Makefile

C:\work\t\0618\mysql-ruby-2.7.5>nmake

Microsoft(R) Program Maintenance Utility Version 7.10.3077
Copyright (C) Microsoft Corporation.  All rights reserved.

        c:\ruby186\bin\ruby -e "puts 'EXPORTS', 'Init_mysql'"  > mysql-i386-mswin32.def
        cl -nologo -I. -I. -Ic:/ruby186/lib/ruby/1.8/i386-mswin32 -I. -MD -Zi -O2b2xg- -G6 -DHAVE_MYSQL_H -Ie:\mysql-4.1.22-win32\include -c -Tcmysql.c mysql.c
c:\ruby186\lib\ruby\1.8\i386-mswin32\config.h(2) : fatal error C1189: #error :
MSC version unmatch
NMAKE : fatal error U1077: 'cl' : リターン コード '0x2'
Stop.

C:\work\t\0618\mysql-ruby-2.7.5>vcvars32
Setting environment for using Microsoft Visual C++ tools.
C:\work\t\0618\mysql-ruby-2.7.5>nmake

Microsoft (R) Program Maintenance Utility   Version 6.00.9782.0
Copyright (C) Microsoft Corp 1988-1998. All rights reserved.

        cl -nologo -I. -I. -Ic:/ruby186/lib/ruby/1.8/i386-mswin32 -I. -MD -Zi -O2b2xg- -G6 -DHAVE_MYSQL_H -Ie:\mysql-4.1.22-win32\include -c -Tcmysql.c mysql.c
mysql.c(1506) : error C2632: 'long' と 'long' の 2 つの型指定子のあいだにコードがありません。
mysql.c(1508) : error C2632: 'long' と 'long' の 2 つの型指定子のあいだにコードがありません。
NMAKE : fatal error U1077: 'cl' : リターン コード '0x2'
Stop.

C:\work\t\0618\mysql-ruby-2.7.5>sed -ne "1506,1508p;1509q"
                    v = ULL2NUM(*(unsigned long long *)s->result.bind[i].buffer);
                else
                    v = LL2NUM(*(long long *)s->result.bind[i].buffer);


C:\work\t\0618\mysql-ruby-2.7.5>cd C:\InstantRails\ruby\lib\ruby\gems\1.8\gems\mysql-2.7.3-mswin32\ext 
C:\InstantRails\ruby\lib\ruby\gems\1.8\gems\mysql-2.7.3-mswin32\ext>dir /b
extconf.rb
mysql.c.in
mysql.c.in.patch
mysql.so
test.rb
C:\InstantRails\ruby\lib\ruby\gems\1.8\gems\mysql-2.7.3-mswin32\ext>grep "long *\*" mysql.c.in
    unsigned long* lengths;
    unsigned long* lengths;
    unsigned long* lengths = mysql_fetch_lengths(res);
	    *(long*)(s->param.bind[i].buffer) = FIX2INT(argv[i]);
		v = INT2NUM(*(long*)s->result.bind[i].buffer);

これを全部(は必要ないかもしれないけど)噛んで言い含めるように説明する気力はありませぬ○| ̄|_

■_ 6文字制限

ネタ元→ 6文字までのアトム (リリカル☆Lisp 開発日記)

6文字までのアトム (リリカル☆Lisp 開発日記)

1)アトムの印字名はアトムの属性リストにPNAMEという属性として含まれている。
2)印字名は印字名リストによって構成される。
3)文字列はフルワード領域という異なる場所に格納される。
4)フルワード領域の一つの箱に収めることが出来る文字数は機械によって異なる。

とのようにあります。
36bitが1ワードの機械では恐らく1つの箱に6文字が格納されます。

なんで6文字かってーと36bitマシンの場合に、 使える文字をASCIIでいうところの大文字と少しの記号(~0x3f)に制限すると 一文字が6bitの範囲に収まるので、36 / 6 → 6 だからなんだね♪

これでなにがうれしいかというと、ある“文字列”と“文字列”が等しいかの判定が メモリ領域を1バイト(一文字)ずつ比較していくなんてことをしないでも レジスタに入ったそれを数値と同じように比較してやればできちゃうんだって。 まあ今で云うハッシュ技法の原始的なものかもしれないね♪

というのを昔、LispぢゃなくてFORTRANだかの話を探しているときに見かけたんだけど どこだったかなあ。

さすがにその頃はわたしは現役プログラマではありませんので実体験の話じゃないぞ :-)

■_ Parrot

月イチリリースの日。 Parrot: Parrot 0.6.3 "Beautiful Parrot" Released!

use Perl | Parrot 0.6.3
On behalf of the Parrot team, I'm proud to announce Parrot 0.6.3 "Beautiful 
Parrot." Parrot is a virtual machine aimed at running all dynamic languages.

Parrot 0.6.3 is available via CPAN (soon), or follow the download instructions. For 
those who would like to develop on Parrot, or help develop Parrot itself, we recommend 
using Subversion on our source code repository to get the latest and best Parrot code.

Parrot 0.6.3 News:

    * Specification
          o updated pdd09_gc.pod
    * Languages
          o Cardinal:
                + dramatically improved parsing speed
                + added support for defining and instantiating classes
                + started fleshing out the builtin class hierarchy
                + added support for hashes and arrays
          o Chitchat: added the start of a smalltalk compiler
          o Pheme: updated to match PGE changes
          o Pynie: return statement, other minor updates
          o Rakudo:
                + added working list and hash contexts
                + added 'return' statements
                + added => pair constructor
                + added ?? !! ternary
                + added Range, range operators, Complex
                + added common List, Hash methods
                + refactored base classes
                + added Mutable, Perl6Scalar classes
                + added type-checking, is readonly/rw/copy for parameters
                + added make localtest, docs/spectest-progress.csv
                + fix named unaries
          o Squaak: implement return statement
          o Tcl: updated control flow exceptions to use new builtin types
    * Compilers
          o All tools converted to P6object metamodel
          o PGE:
                + is now a zero-width match
                + reduced backtracking to improve parsing speed
          o PCT:
                + added "return" PAST.op node type for subroutine returns
                + added "keyed_int" scoping to PAST::Var
                + fixed calls to closures
                + automatically transcode 7-bit unicode to ascii for faster processing
          o NQP: added "return" statement, ?? !! ternary operator
    * Configuration
          o expanded step gen::opengl
    * Implementation
          o updated function and macro names to match pdd09_gc.pod
          o removed Super PMC
          o add ".namespace []" as alternative to ".namespace"
          o "make codetest" target runs standard coding tests
    * Miscellaneous
          o added P6object class for Perl 6 interfaces to objects in Parrot
          o ported OpenGL/GLU/GLUT bindings to Win32, BSD, and more Mac OS X variants
          o generate OpenGL/GLU/GLUT bindings by parsing system headers
          o new OpenGL example shapes.pir, covering basic OpenGL 1.1 / GLUT 3 APIs
          o new float4.pir structure-packing benchmark
          o reduced memory use for variables
          o improved constant string caching
          o made code g++ and gcc (with optimizations) safe
          o the usual collection of bugfixes and optimizations

Thanks to all our contributors for making this possible, and our sponsors for 
supporting this project. Our next release is 15 July 2008.

さて早速ビルドだ。

2008-06-15 - 思っているよりもずっとずっと人生は短い。

最近、言語とかソフトウェアとか、要素技術のイベントが多いですが、フリーソフトウェア・オ
ープンソースの理念そのものとその実現について、延々話すような場があるとよいなと改めて思
いました。

あったら出てみたいけどなんとなくアウェイ感が (なぜなら、かずひこさんとは違って、わたしは条件付でプロプラなソフトウェアも あっていいんじゃないかと思っているから)。

Airs - Ian Lance Taylor » GCC Summit
Airs - Ian Lance Taylor » GCC Summit
I’m at the GCC Summit in Ottawa, and short on time. I gave a double presentation 
today, on gold (slides) and on writing gcc in C++ (slides).

さみっと、さみっと。

月額300円でATOKが利用可能に、ジャストシステムが月額課金を初採用:ニュース

ジャストシステムは2008年6月18日、Windows向け日本語入力ソフト「ATOK for Windows」を月額
課金制で利用できるサービス「ATOK定額制サービス」を発表した。月額300円で、ATOK for 
Windowsのすべての機能を利用できる。サービス開始は、2008年9月2日。同社が一般消費者向け
のソフトウエアに定額制を採用するのは初めてという。

 同サービスでは「ATOK for Windows 月額版」というソフトをダウンロードして、月々の使用
権を月額300円で購入する形となる(申し込み月は無料)。搭載する機能は、パッケージ版の
ATOK for Windowsと同等。利用期間中に新版がリリースされた場合は、追加料金なしでプログラ
ムをアップグレード可能。またATOKの無償の体験版(利用期間は30日)を利用しているユーザー
は、定額制サービスのキーを入力するだけでそのまま月額版として継続使用できる。

月額版を何ヶ月か使ったあとに通常のパッケージを買おうとすると 値引きとかしてくれるんだろうか?

C++…なんておそろしい

C++0x 3 

880 デフォルトの名無しさん [sage] Date:2008/06/18(水) 10:07:18  ID: Be:
    for文の改良ってしないの?

881 デフォルトの名無しさん [sage] Date:2008/06/18(水) 11:18:58  ID: Be:
    foreachってC++0xになかったっけ? 

882 デフォルトの名無しさん [sage] Date:2008/06/18(水) 16:00:02  ID: Be:
    入ったよ。
    for (int &entry: aContainer) { ... }

    Javaのクロージャを引数に取る拡張に比べるとつまらない。>>48
    C++的には最悪のセンスだと思う。

883 デフォルトの名無しさん [sage] Date:2008/06/18(水) 17:41:05  ID: Be:
    Javaから構文パクるなんてC++も地に墜ちたもんだな 

884 デフォルトの名無しさん [sage] Date:2008/06/18(水) 17:58:22  ID: Be:
    まあでもC++にeachとかinとかのキーワードを入れるのも有り得ないだろうし、
    これくらいしか書きようがないと思う。 

885 デフォルトの名無しさん [sage] Date:2008/06/18(水) 18:00:07  ID: Be:
    ところでこのループ変数は参照なの?
    参照が指す先変えながらグルグル回るの?

    キモッ 

886 デフォルトの名無しさん [sage] Date:2008/06/18(水) 18:21:35  ID: Be:
    別にキモくはないだろ。
    従来の、for無いのスコープで参照変数を宣言してるようなもの。 

887 デフォルトの名無しさん [sage] Date:2008/06/18(水) 18:29:26  ID: Be:
    for (int &&entry: aContainer) { ... } はあり? 

888 デフォルトの名無しさん [sage] Date:2008/06/18(水) 18:55:18  ID: Be:
    ぅん・・・ 

891 デフォルトの名無しさん [sage] Date:2008/06/18(水) 19:12:40  ID: Be:
    ついに参照の指し変えが認められてしまったのか… 


896 デフォルトの名無しさん [sage] Date:2008/06/18(水) 22:28:34  ID: Be:
    >>893-895
    ネタにマジレスw 

897 デフォルトの名無しさん [sage] Date:2008/06/18(水) 22:29:56  ID: Be:
    マジレスもできない奴は板を替えたほうがいい 

898 デフォルトの名無しさん [sage] Date:2008/06/18(水) 22:30:34  ID: Be:
    ネタにマジレスするのが最近のトレンドなんだぜ 

899 デフォルトの名無しさん [sage] Date:2008/06/18(水) 22:37:47  ID: Be:
    ネタに、というよりホラにマジレスだな 

902 デフォルトの名無しさん [sage] Date:2008/06/19(木) 00:36:13  ID: Be:
    >>891
    forの繰り返しの度に初期化が行われているとみるべきでは?
    例えが悪いかもしれないけど、今だってBOOST_FOREACHでは要素を受ける変数の型に参照が使える。 
【Perl,PHP】LLバトルロワイヤル2【Ruby,Python】
902 デフォルトの名無しさん [sage] Date:2008/06/18(水) 15:19:39  ID: Be:
    PHP で Windows のダイアログ出せるのにはワロタ 

903 デフォルトの名無しさん [sage] Date:2008/06/18(水) 20:50:53  ID: Be:
    そして、泣いた。

    ──それが僕の17歳の夏。

         ナ ゝ   ナ ゝ /    十_"    ー;=‐         |! |!   
          cト    cト /^、_ノ  | 、.__ つ  (.__    ̄ ̄ ̄ ̄   ・ ・   
                                             
    / ̄ ̄ ̄ ̄ ̄ ̄\      ──    / ̄ ̄ ̄ ̄ ̄ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄\
  /             \    \    /            /            \
 /         U      ヽ    \  /            /          U    ヽ
 l:::::::::               |.    / l            l               :::::::::| 
 |::::::::::U  (●)    (●)   |.  /   |::::: (●)    (●)|   (●)    (●)  ::::::::::|
 |:::::::::::::::::   \___/    |   ── |::::::::  \___/  .|    \___/  :::::::::::::::::|
 ヽ:::::::::::::::::::.  \/     ノ        ヽ::::::::  \/    ヽ     \/  ::::::::::::::::::.ノ

ソースを参照

coreutilsはさすがに広げてないので(笑) grep から。

isatty - odz buffer
■isatty

    stdout が,terminal かどうかはどうやって調べる?

    わからん。
    shell-mode での ls - GONE WITH THE MEDICINE

答え:isatty(3)

というか、こういうのは実際に GNU coreutils のソースコードとか読めばすぐわかるのになぁ。
#if defined(SET_BINARY)
  /* Set input to binary mode.  Pipes are simulated with files
     on DOS, so this includes the case of "foo | grep bar".  */
  if (!isatty (desc))
    SET_BINARY (desc);
#endif
      case COLOR_OPTION:
        if(optarg) {
          if(!strcasecmp(optarg, "always") || !strcasecmp(optarg, "yes") ||
             !strcasecmp(optarg, "force"))
            color_option = 1;
          else if(!strcasecmp(optarg, "never") || !strcasecmp(optarg, "no") ||
                  !strcasecmp(optarg, "none"))
            color_option = 0;
          else if(!strcasecmp(optarg, "auto") || !strcasecmp(optarg, "tty") ||
                  !strcasecmp(optarg, "if-tty"))
            color_option = 2;
          else
            show_help = 1;
        } else
          color_option = 2;
        if(color_option == 2) {
          if(isatty(STDOUT_FILENO) && getenv("TERM") &&
	     strcmp(getenv("TERM"), "dumb"))
                  color_option = 1;
          else
            color_option = 0;
        }
	break;

ちょっとわかりづらいか? でもまあ日頃からなんかしらのソースを眺めてないと、 いきなり見ても見当がつかないんじゃないですかねー。 …いまどきのlsだとどのくらいの行数なんだろう?

2008年06月17日

■_

えーと、ナニを書くつもりだったのだっけ?(^^;

■_ PyScripter

■_ -v

from どさにっき

どさにっき
grep -C

    _ まあ -A でも -B でも -C でもいいけど、GNU grep でマッチした行の前後も表示するというオプション。

        % yes '' | cat -n | head | grep -C 2 5
             3
             4
             5
             6
             7

    1 から 10 の連番のうち、5 を含む行と、その前後2行を表示する。

    _ 逆に、これらの行を削除しようとして -v と組み合わせると

        % yes '' | cat -n | head | grep -v -C 2 5
             1
             2
             3
             4
             5
             6
             7
             8
             9
            10

    機能しない。しくしく。

    _ なんかエレガントな方法ないかな。とりあえず今回は深く考えず sed やら awk やらでごまかしたけど。

どうも GNU grep だとどうしようもないようですね。 grep の一番キモのところを抜き出すとこんな感じなんですが

/* Scan the specified portion of the buffer, matching lines (or
   between matching lines if OUT_INVERT is true).  Return a count of
   lines printed. */
static int
grepbuf (char const *beg, char const *lim)
{
  int nlines, n;
  register char const *p;
  size_t match_offset;
  size_t match_size;

  nlines = 0;
  p = beg;
  while ((match_offset = execute(p, lim - p, &match_size,
				 NULL)) != (size_t) -1)
    {
      char const *b = p + match_offset;
      char const *endp = b + match_size;
      /* Avoid matching the empty line at the end of the buffer. */
      if (b == lim)
	break;
      if (!out_invert)
	{
	  prtext (b, endp, (int *) 0);
	  nlines++;
          outleft--;
	  if (!outleft || done_on_match)
	    {
	      if (exit_on_match)
		exit (0);
	      after_last_match = bufoffset - (buflim - endp);
	      return nlines;
	    }
	}
      else if (p < b)
	{
	  prtext (p, b, &n);
	  nlines += n;
          outleft -= n;
	  if (!outleft)
	    return nlines;
	}
      p = endp;
    }
  if (out_invert && p < lim)
    {
      prtext (p, lim, &n);
      nlines += n;
      outleft -= n;
    }
  return nlines;
}

-v オプション指定時には out_invert という変数に非0の値が入っています。 途中で呼ばれている prtext() というのが前後の行をあわせて出力する下請け関数だったりするんですが 関数の最後の方にある

  if (out_invert && p < lim)
    {
      prtext (p, lim, &n);
      nlines += n;
      outleft -= n;
    }

どうも問答無用で範囲内の行をぶちまけているような(笑) そもそもが

  while ((match_offset = execute(p, lim - p, &match_size,
				 NULL)) != (size_t) -1)

    {

マッチに成功したときにどうこうというループなので、 逆の出力を期待通りに行うためにはもうちょっと手を入れないといけないような。

むかーし -v と -l の合わせ技が期待通り動かないということで -L が新設されたような記憶があるので、希望を出せば通る可能性が?

  -L, --files-without-match only print FILE names containing no match
  -l, --files-with-matches  only print FILE names containing matches

■_ なんと

[ruby-dev:35140] Re: [ruby-list:44988] Re: 各ブランチの計画


In message "[ruby-dev:35130] Re: [ruby-list:44988] Re:  各ブランチの計画"
    on Jun.17,2008 00:34:01, <hogemuta / gmail.com> wrote:
> >  ruby_1_8_7、ruby_1_8、trunkでは既にrb_io_tに改名されています。
> >  ruby_1_8_5、ruby_1_8_6ではそれはバックポートしないという前提
> >  で、今の話のような問題が出てるので回避策を考えている、という
> >  状態です。
> 
> それは大変失礼しました。
> 
> #これで長年の懸念が

10年越しでしたもんねえ。
ちなみに昨年3月にようやく改名されました。

        ∧∧
       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄
     ̄

なんかそういう記憶もあったんだよなあ。 ソース見てから書けばよかった○| ̄|_

■_

Java meets Python - 第7回 ハリウッドの原則:CodeZine
《Tea Break》補助輪付き vs. ブレーキのない自転車

 補助輪付きの自転車でバランス感覚を養っていくと、やがて補助輪なしで走行できます。むし
ろ、上達するにつれて、補助輪が自由な走行を邪魔します。競輪用の自転車には、ブレーキが付
いていません。同様に、プログラミング言語も、アマ/プログラマーの仕様の棲み分けが必要か
もしれません。一般道では必要なブレーキも、競技場では邪魔な存在です。Java/C# の言語仕様
には、学習用には適切でも、アジャイル開発下では失速を余儀なくされるものも少なくありませ
ん。ステップ単位の開発コストを、他の言語(Ruby/Python 等)と比較してみるのも一興です。

例によってたとえ話は危険な部分があるのでそれは全力でスルーしておいて、 プログラミング初心者にプログラミングを教えるのに向いたもの、あまり向いていないもの というのはあるでしょうね。 後者も絶対それでやってはいけない、できないということではなくて、 言語以外のサポートがきちんとしていれば何とかなる部分というのは小さくないように思います。 裏を返すといつも云ってることになりますがね(笑)

■_ 正規表現とかパターンマッチとかそのへん

d.y.d.
ぱたーん☆まっち

パターンマッチ的な物の未来を考える、というか主に願望を垂れ流します (see also: NyaRuRu
さん、 きむら(K)さん)。 リンク先でも話題にあがっているように、パターンマッチの使い勝
手を考える上で 正規表現というのは近い位置にいるような気がするので、意図的にその辺りご
ちゃまぜに考えます。

http://d.hatena.ne.jp/NyaRuRu/20080615
http://www.kt.rim.or.jp/~kbk/zakkicho/08/zakkicho0806b.html#D20080616-3

    * とりあえず、文字列以外のリストも正規表現で処理したいということは自分の場合本気で
      結構あるので (日記に書いたのだと PQ Tree や 構文解析の話 ‐ "毎回スタックを
      覗く感じの実装" は非終端記号+構文木列スタックを正規表現で覗き込みたい ‐ など)、
      その辺り巧く統合されて正規表現でできることはパターンマッチでできて逆もまた可、って
      なると楽しい。

http://www.kmonos.net/wlog/57.php#_2254060120
http://www.kmonos.net/wlog/83.html#_1506080301
 
    * あるいは。 各種 LL の多重/アンパック/リスト代入は、私の感覚では、物凄く限定された形の
      パターンマッチなんですが、 Haskell や ML のようなフルのパターンマッチまで行かなくても、
      なにかもう一声欲しいよなーと思うことがあって、 そんなに大革命でなくても、今の言語に対
      するこのくらいの拡張でも便利なのでは…という消極的拡張。

      if a.size >= 2 then
        x = a[0]
        y = a[1]
        ...
      end

      よりも

      if a.size >= 2 then
        x,y,* = a
        ...
      end

      の方が感覚的には500倍くらいわかりやすくて、

      if x,y,* = a then
        ...
      end # 的な何かそういったもの


さらにこう書けたらもう500倍くらいわかりやすいなーと。

(ry
       
    * また積極的主張に戻る。 いやこれは私が色々使い方間違ってるだけな気がするんですが、
      たまにこういう正規表現書くはめになって

      mystr.scan( /(aaa)|(aab)|(abc)/ ) do
        case
          when $1 ...
          when $2 ...
          when $3 ...
        end
      end

      正規表現に括弧が増えるのが面倒くさい!あと、aaa の代わりに中で () 使うようなちょっと
      複雑な正規表現 が入ると、もう $1 の次が $3 なのか $4 なのか中身によって変わってしまっ
      て大変なことに! … などなどの理由で

      mystr.scan do-case
        when /aaa/ ...
        when /aab/ ...
        when /abc/ ...
      end # 的な何かそういったもの

      こういう風に書きたいなあと妄想してしまうことがよくあります。たぶん、「ブロック」を
      first-class のオブジェクトとして扱える言語がループ等の制御構造を自由自在に作り出せ
      るのと同じように、 「パターン」を first-class のオブジェクトとして扱える言語なら、
      こういう、ユーザー定義のパターンマッチ 制御構造みたいなのを書けるであろうなあ、とい
      うアレコレ。

(ry

なんか正規表現の話しかしてないな。なんでだろ。 「列」に対するパターンマッチの機能以外
は、 Extractor (Scala) とか [PPT] Active Pattern (F#) とか View Pattern (Haskell) とか 
で任意の抽象データ型に好きなだけパターンマッチできるようになった時点で、私的にはかなり
満足 できちゃってるんですよね、たぶん。あんんまり話を混ぜない方がよかった気がしてきた。
まあいいや。 みんなで混乱しましょう。

http://www.scala-lang.org/intro/extractors.html
http://www.kmonos.net/pub/Presen/POPL20070725.ppt
http://hackage.haskell.org/trac/ghc/wiki/ViewPatterns
(ry

えーとなにから書けばいいだろう(^^; まず、カッコが増えると番号がずれてわけわからん問題は(例によって) Larry Wallが Perlに導入した (?: ) 構造がひとつの解決策を提示していると思います。 正規表現におけるカッコというのは大きく二つの役割を担っていて、 ひとつはいくつかのパーツを集めてひとつの部品として扱えるようにすること。 つまり、foo* は fooの最後の 'o' しか繰り返しの対象にならないけれども、 (foo)* とした場合には 'foo' という文字列が繰り返しの対象になると。 まあごく初期には後者の使い方はできなかったっぽい(Beautiful Code でカーニハン大先生の 章にある正規表現ルーチンを見てもそれが伺えます)のと、W○ エディタみたいなものも ありますが。

もうひとつは、これはPerl起源ではありませんが(これはなにが一番最初なんだろう?)、 カッコによってまとめたグループに名前をつけるというものです。 名前によって参照すれば、後で構成が変わってカッコ群の中で順番の変更があったとしても その影響は受けないですむと。

もちろんこれは正規表現側からのアプローチなので、

      mystr.scan do-case
        when /aaa/ ...
        when /aab/ ...
        when /abc/ ...
      end # 的な何かそういったもの

      こういう風に書きたいなあと妄想してしまうことがよくあります。
  

というのもわかります(そのつもりです)。

前後しましたが、代入の話は賛成です。 が、なんか似たような話題を Dave Thomas が昨日今日あたりで書いていたような?

Perl 6のルールはわたしの好みにけっこうズバリと来ている仕様なんですが、 あれはいわゆる正規表現の「親玉」的でない、Haskellとかのパターンマッチのような 使い方はできたのかなあ?(よく知らない奴)



JALv2 2.4g Released - PLNews: Programming Language NewsJune 17, 2008
JALv2 2.4g Released
Posted: 2008-06-17 06:14:42
Languages :: JAL

JALv2 2.4g has been released. It extends Just Another Language with more variable 
types, a CASE statement, support for cooperative multitasking, and other features.

This release includes optimizations and fixes.

http://www.casadeyork.com/jalv2/


Wrapl 0.9.4 Released - PLNews: Programming Language NewsJune 17, 2008
Wrapl 0.9.4 Released
Posted: 2008-06-17 06:23:05
Languages :: WRAPL

Wrapl 0.9.4 has been released. "Wrapl is a high level, dynamically typed 
interpreted programming language."

http://wrapl.sourceforge.net/

RoRは…な人向け?



Ruby 初心者スレッド Part 19 [bbs2chreader]

863 デフォルトの名無しさん [] Date:2008/06/17(火) 11:40:57  ID: Be:
    質問させてください。
    現在Ruby on Railsの勉強をしています。
    しかし根本的な部分で躓いてしまいました。
    練習してみようとtsukaeru.netのシルバープランというVPSサーバーをレンタルいたしました。
    しかし、まったくこの上でrubyを用いたホームページを公開する方法がわかりません。

    ruby on railsははいっていますか?との質問にサポートは入っています。との解答でした。
    それ以上のサポートはできないとのことなので失礼ながらこちらで質問させていただきます。
    勉強をしている本は基礎Ruby on RailsというものなのですがこちらはWindowsで導入する方法でしかも
    ローカルで動く方法のみ書いてあったのでそれを一般に公開するという点では参考になりません。

    サーバ構築なども全く初体験なのです。
    rubyのプログラムは普通のHPのようにpublic_html直下にindex.htmlをおけば動くといったものではないのですか?
    公開するまでの具体的な方法をおしえてください。よろしくおねがいします。
    OSはLinux CentOS5(final)のようです。 

864 デフォルトの名無しさん [sage] Date:2008/06/17(火) 12:05:19  ID: Be:
    windowsで導入してローカルで動かせばいいじゃないか 

865 デフォルトの名無しさん [sage] Date:2008/06/17(火) 12:08:55  ID: Be:
    うむ 

866 デフォルトの名無しさん [sage] Date:2008/06/17(火) 13:43:28  ID: Be:
    >>863
    まず、その程度の知識でVPSに手を出すのが無謀
    組織の命令でやらざるを得ないのなら同情する

    ちなみに

    % ruby script/server

    を実行すれば、適当なポートでHTTPサーバが立ち上がるので
    あとは http://localhost:(ポート番号)/ にアクセスすれば、サンプルページは見えるはず
    よく分からないなら素直にWindows使って練習した方がいい。VPSはその後で 

867 デフォルトの名無しさん [] Date:2008/06/17(火) 15:19:46  ID: Be:
    まじすか
    そんなにハードル高いものだとは・・・orz
    Windowsでやるということは、それを公開するには自鯖を立てるしかないのでしょうかね?
    自鯖は少し理由があって立てられないのです。

    レンタルしているVPSサーバー上でruby script/serverとすると
    ruby: No such file or directory -- script/server (LoadError)
    と出てしまいます。ruby -vなどとすると正しくバージョンが出ますのでインストールされていることは
    確かなはずです。

    VPS以外で、もっとも簡単にRuby on Railsを公開するにはどうすればよいでしょう。。。
    もとからRubyが使えますよ~っと書いてあるレンタルサーバーでもどのようにしてつかえばいいのか
    さっぱりです。本でも読んで勉強もしますのでよろしければはじめの一歩でも教えてください。 

868 デフォルトの名無しさん [sage] Date:2008/06/17(火) 16:06:20  ID: Be:
    つか、なんで知識無い奴がRoRやってんの?
    CGIとHTTPとDBの知識無い奴がRoRなんか触ったって意味ないのに 

869 デフォルトの名無しさん [sage] Date:2008/06/17(火) 16:15:51  ID: Be:
    >>867
    Rails環境の構築は初心者には難しい
    お薦めの手順としては

    1.WindowsにRails環境を作って、そこでRailsの基礎を勉強する
    基礎Ruby on RailsにもRails環境入りのCDがあるけれど、ここは「InstantRails」を使うべき

    2.ある程度Railsアプリケーションをローカル(つまりWin)で作れるようになったらVPSでの公開を検討する


    遠回りかもしれないがまずはローカルでRailsを動かしてみよう
    学生さんですか?
    ここはRubyスレで微妙にスレ違いの話になるので、捨てアドでも晒してくれたら色々と教える事は可能

870 デフォルトの名無しさん [sage] Date:2008/06/17(火) 16:19:05  ID: Be:
    >>867
    >ruby script/server
    script/serverは、最初にrails generateで作ったディレクトリの中にある
    あとは分かるな?

    >VPS以外で
    自鯖が立てられないならほぼ不可能
    CGIスクリプトとして動かす手段もあるにはあるが、たぶん遅すぎて使い物にならない
    それでもやりたいなら「dispatch.cgi rails」でググれ 

871 デフォルトの名無しさん [sage] Date:2008/06/17(火) 16:22:14  ID: Be:
    >>868
    そんな事は無いだろう
    DBは必須だがCGIとHTTPの知識が無いRailsエンジニアなんてゾロゾロいるぞ
    もちろん誰かが作ってくれた環境上でアプリを作るだけしかできないが 

872 デフォルトの名無しさん [sage] Date:2008/06/17(火) 16:25:29  ID: Be:
    >>870
    いや、実はRails自体入ってないんじゃないかとオレは思ってるw
    867にはrails -vしてみて欲しいところだな 

873 デフォルトの名無しさん [sage] Date:2008/06/17(火) 16:32:10  ID: Be:
    >>868
    まあ、Railsはどこをどう見ても

    「わかってる人間が手早く作るための強力フレームワーク(※ 引き換えにパワー上限あり)」

    なんだが、Javaソリューションビジネスで負けた奴らが次点を求めてRoRにツバつけようと群がったもんだから
    「あなたにもRoRが簡単にできます」ビジネスの被害者が続出してる
    そういう被害者の人たちのフォローをするのも初心者スレの役目だとは思うぜ 

874 デフォルトの名無しさん [sage] Date:2008/06/17(火) 16:38:38  ID: Be:
    >>873
    Railsはシンプルでわかりやすいけど、それは「ある程度わかっている人」限定の話なんだよなぁ
    プログラミング未経験者ならRailsよりもPHPの方が簡単に入れるだろうとは思う 

875 デフォルトの名無しさん [sage] Date:2008/06/17(火) 17:01:38  ID: Be:
    Rubyの知識はあるのかなあ
    無いんだったら、俺ならダッシュで本屋行ってPHPに鞍替えするね 

876 デフォルトの名無しさん [sage] Date:2008/06/17(火) 17:19:53  ID: Be:
    おk
    >>867はPHPに乗り換えなさいw 

877 デフォルトの名無しさん [linksuplinksup@yahoo.co.jp ] Date:2008/06/17(火) 18:10:33  ID: Be:
    皆様ご回答ありがとうございます。
    現在の、ローカルのWindows環境では本にしたがい、localhost:3000で動くことはできました。
    それを一般に公開するなんて簡単だろうperlのcgiとおなじだろ~っと考えていたらみごとに躓きました。

    ご指摘のとおりrails -vしてみたところRails 1.2.2と返ってきたので入ってはいるみたいです。

    そしてRoRのソースやらが入っているディレクトリまでcdで移動して再度script/serverを打ってみると

    create
    File exists - script/server

    と帰ってきました。どうやらサーバーがたったようではなさそうな感じですが・・・

    あと一歩なんでしょうかorz

    ちなみに言語経験はC#とVBを少々でございます。
    捨てアドさらせば教えていただけるというとても親切な方がいらっしゃいましたのでアドレスを書いて見ます。
    よろしくお願いします。 

878 デフォルトの名無しさん [sage] Date:2008/06/17(火) 18:38:56  ID: Be:
    初心者か 

879 デフォルトの名無しさん [sage] Date:2008/06/17(火) 18:43:32  ID: Be:
    >>878
    まあ、初心者スレだからな

    来るのはRubyの初心者だけにして欲しかったもんだが
    2ch初心者とかネット初心者とかコミュニケーション初心者とかは正直勘弁 

880 デフォルトの名無しさん [sage] Date:2008/06/17(火) 18:44:48  ID: Be:
    つーか>>878とか>>868は上から目線すぎ
    誰だって知らない分野はあるだろ 

881 デフォルトの名無しさん [sage] Date:2008/06/17(火) 18:47:51  ID: Be:
    lololol 

882 デフォルトの名無しさん [sage] Date:2008/06/17(火) 18:49:54  ID: Be:
    >>880
    ほいほいメールアドレス晒したり
    Windows以外で動作させるための文献検索すらできてなかったりするのは
    どうにも擁護できんぞ
    「知らない分野」とかそういうレベルではない 

883 デフォルトの名無しさん [sage] Date:2008/06/17(火) 18:53:29  ID: Be:
    >>880は「お前には無理だからやめろ」とはっきり言ったほうがいいと仰っておられるのですよ
    RoR使うのやめろというレスを全部スルーしてるからな 

884 デフォルトの名無しさん [sage] Date:2008/06/17(火) 19:10:38  ID: Be:
    >>882
    自分のメールアドレス晒すのは、別に擁護する必要無いだろう。 

885 デフォルトの名無しさん [sage] Date:2008/06/17(火) 19:12:56  ID: Be:
    RoR以外の手段を使えというアドバイスですが、一応RoRについての文献をすでに購入してしまったことと
    また、RoRを勉強してみたいという意欲のもと始めましたので、別の言語は考えていません。
    LinuxにRuby と Railsを入れる方法についてはいろいろと調べまわったつもりなのですが具体的に
    公開手順を示されているサイトがみつかりません。
    メールアドレスを晒したのは>>869さんが親切にあのようにおっしゃってくれたからです。
    微妙にすれ違いとの事ですので、失礼しました。 

886 デフォルトの名無しさん [sage] Date:2008/06/17(火) 20:02:43  ID: Be:
    Rails云々とは関係なくHTTPとCGIについてよく書けている記事があったので晒してみる
    ttp://itpro.nikkeibp.co.jp/article/COLUMN/20080128/292199/?P=4&ST=oss

    これを書いたやつは見込みがあるな 

887 デフォルトの名無しさん [sage] Date:2008/06/17(火) 20:11:11  ID: Be:
    そのシリーズはなかなか良質
    抽象データのあたりとか、
    よくまあ説明が複雑になりがちな概念をここまで平易に 

888 デフォルトの名無しさん [sage] Date:2008/06/17(火) 20:18:50  ID: Be:
    タイトルで吹いたw 

889 デフォルトの名無しさん [sage] Date:2008/06/17(火) 22:58:25  ID: Be:
    直伝噴いた 

890 デフォルトの名無しさん [sage] Date:2008/06/17(火) 23:21:08  ID: Be:
    ここまで言うならぜひ言語を作って欲しい物だ 



初心者のためのプログラミング言語ガイド Part9 [bbs2chreader]

510 デフォルトの名無しさん [sage] Date:2008/06/16(月) 15:24:20  ID: Be:
    あれ、なんでだ>>1から読んだのに特に得るものが無かったぞ!
    途中にあったエロゲ体験記くらいか

511 デフォルトの名無しさん [sage] Date:2008/06/16(月) 17:00:48  ID: Be:
    初心者はタイトルに夢を見る。
    ↓
    経験者は好きな言語を薦める。
    ↓
    色々な言語がランダムに薦められる。
    ↓
    さらに迷う初心者…その果てに
    ↓
    何でも好きなのやれ、が結論になる。

    真実を教えよう。「何でもいいからやった者勝ちだ!」 

512 デフォルトの名無しさん [sage] Date:2008/06/16(月) 17:23:11  ID: Be:
    初心者はelispからはじめるのが幸せだと思う 

513 デフォルトの名無しさん [sage] Date:2008/06/16(月) 21:52:11  ID: Be:
    初心者はタイトルに夢を見る。
    ↓
    経験者は好きな言語を薦める。
    ↓
    色々な言語がガンダムに薦められる。

    に見えたw

    真実を教えよう。「こ、こいつ動くぞ!」 

514 デフォルトの名無しさん [] Date:2008/06/17(火) 21:14:32  ID: Be:
    株の分析ソフトを作りたいんですけど言語は何がよろしいか教えてたもれ。

    ・株価のデータを外部から入手する。
    ・そのデータを元にチャートを表示するようにする。
    ・そのチャートにマウスで線を引けるようにする
    (これは難しければ出来なくてもいいです)
    以上のことがやりたいんです。

    詳しく書くと
    日や月単位で株価を縦軸、出来高を横軸にした四角いボックスを
    表示するチャートが作りたいです。
    http://www.asumiru.com/analyze/cv_c.html
    こういうローソク足で出来高が多くなれば横に大きくなる感じです。 

516 デフォルトの名無しさん [sage] Date:2008/06/17(火) 21:30:34  ID: Be:


      ま  た  株  か


    自作は半年くらいかかるぞ
    C#かJavaかフィーリングに合うの選べ 

2008年06月16日

■_

本当に問題があったのは getaddrinfo ぢゃなかった○| ̄|_

■_ おや? どこかで聞いたような仕様ではありますまいか

PEP 372 -- Adding an ordered dictionary to collections

Abstract

This PEP proposes an ordered dictionary as a new data structure for the collections 
module, called "odict" in this PEP for short. The proposed API incorporates 
the experiences gained from working with similar implementations that exist in various 
real-world applications and other programming languages.

Rationale

In current Python versions, the widely used built-in dict type does not specify an 
order for the key/value pairs stored. This makes it hard to use dictionaries as data 
storage for some specific use cases.

現状のPythonでは、キーと値のペアの格納を特定の順序にしないような組み込みの辞書型が広
く使われています。この仕様は、ある特定の用途のためのデータ格納領域として辞書を使うことを
困難にしています。

Some dynamic programming languages like PHP and Ruby 1.9 guarantee a certain order on 
iteration. In those languages, and existing Python ordered-dict implementations, the 
ordering of items is defined by the time of insertion of the key. New keys are 
appended at the end, but keys that are overwritten are not moved to the end.

PHPやRuby 1.9のような一部の動的なプログラミング言語では、辞書に対して繰り返しを適用
したときにある特定の順序を保証するようになっています。また、Python には
アイテムの順序を辞書に登録したときの順番にするような
ordered-dict (順序着き辞書)がすでに実装されて存在しています。
新しいキーは末尾に追加されますが、すでに存在しているキーを上書きした場合には
そのキーが末尾に移動することはありません。


The following example shows the behavior for simple assignments:

次の例は単純な代入を行ったときの動作を示すものです:

>>> d = odict()
>>> d['parrot'] = 'dead'
>>> d['penguin'] = 'exploded'
>>> d.items()
[('parrot', 'dead'), ('penguin', 'exploded')]

むう。Pythonでも採用されるとは、結構需要があるものだったのでしょうか。

■_ ぱたーんまっち

Scalaオフ会&勉強会@豆蔵に行ってきた - NyaRuRuの日記
一昨日の話だけど.

    * id:HHa:20080614:1213399170
    * id:good_way:20080614:1213451132
    * id:ryugate:20080615:p1
    * Scala勉強会(mixi ScalaコミュOFF会)で話してきました。

感想とか

改めて言語組み込みパターンマッチが強力な言語は良いなぁ,とかおもた.特に型システムとの連携.

あと,正規表現なんかもまさに広義のパターンマッチの一種だけど,そういった「パターンマッ
チ的なもの」の整理・統合は今後の全部入り言語の標準機能としてじわじわ来そうな気がする.
じわじわ.

   String と同じメソッド群を持ち同じように振る舞うならそれは String である…っていう
   と Duck Typing になっちゃうか、えーとえーと、「Regexp が要求するあれとこれとそのメソッ
   ドを持ってれば全て正規表現検索対象にできます」っていうのが Structural Typing 的な考え
   方であって、"String" っていう"特定の"クラスだけを検索対象にできま
   す、っていうのは Nominal Typing 的な考え方だと思います。そしてもちろん、C++のregex は
   前者です。果ては Xpressive みたいな、正規表現を文字列以外の方法で記述できる実装だと、
  「文字」の「列」ですらなくても「文字とおなじようにふるまうもの」の「列」に対して正規表
   現使えちゃったりとか。intの配列から、100未満の値が繰り返されてる部分を取り出し!

   Structural C++ - d.y.d.

    要は、正規表現中のグループを取り出すことが出来る。

    グループが複数の場合はこんな感じ。

    val ptn1 = "([0-9]+).*".r
    val ptn2 = "([^0-9]+)([0-9]+).*".r
    val ptn3 = "[^0-9]*([0-9]+)([^0-9]+)([0-9]+).*".r

    val strs = List("hoge", "hoge123", "456piyo", "hoge789piyo", "hoge123piyo456HOGE")

    strs.foreach {
      case ptn3(x,y,z) => println("3:[" + x + "," + z +"],[" + y + "]")
      case ptn2(x,y) => println("2:[" + x + "],[" + y + "]")
      case ptn1(x)   => println("1:[" + x + "]")
      case x         => println("not found..." + x)
    }

    結果は・・・

    not found...hoge
    2:[hoge],[123]
    1:[456]
    2:[hoge],[789]
    3:[123,456],[piyo]

    便利!
    Regex#unapplySeq - ryugateの日記

あと,

    パターンマッチングとかよくわかってないけど、すごいことはよくわかった

    11:01 PM June 13, 2008 from web : Faith and Brave
    Twitter / Faith and Brave

とか見ていると,古き良き awk なんかが当たり前にやっていたプログラミングスタイルがロス
トテクノロジー化しちゃってて,今時の言語を通じて再発見されてるのかという気も.というか,
日々長ったらしいシェルスクリプトを書き散らかしている自分も再発見組だなぁ.3 日後ぐらい
に全く関係ない F# とか Scala とかのコードを読みながら,「ああそういえば,あれ gawk で
短く書けたなぁ」と気付くことが多い.

とまあ,偉い人に「それ gawk で」とかがんがんやって頂けると,それが新鮮さをもって受け入
れられそうな面白い状況に見える今日この頃.某雑記帖方面の人とかに期待.

    * The GNU Awk User’s Guide - Table of Contents

追記

この辺も読んだ.おもしろい.

    * Erlang, Oz/Mozart, Prolog, 単一化 : ホットコーナーの舞台裏
    * OCaml vs. Scala[パターンマッチ] - Rainy Day Codings
    * 情報隠蔽とパターンマッチ - Rainy Day Codings
    * F# の Active Pattern (で FizzBuzz) - Rainy Day Codings

変更履歴

    * 2008年6月15日
          o オーバーテクノロジー → ロストテクノロジー
    * 2008年6月16日
          o id:ryugate さんの記事へのリンクを追加
          o umejava さんの記事へのリンクを追加
          o 『F# の Active Pattern (で FizzBuzz) - Rainy Day Codings』へのリンクを追加


awkはプロトカルチャーの産物かなにかですか?(笑)

自分の感覚としては、OCamlとかHaskellとかで登場するパターンマッチと awkで出てくるパターンマッチは別物に感じるのですが、 考え直してみるとそうでもない?

でまあちょっと妥協を入れさせてもらった上でこんな感じでしょうか? 入力はリストの各要素を一行に置いたテキストファイルということで。

match($0, /[^0-9]*([0-9]+)([^0-9]+)([0-9]+)/, submatches) {
    print "3:[" submatches[1] "," submatches[3] "],[" submatches[2] "]"
    next
}
match($0, /([^0-9]+)([0-9]+)/, submatches) {
    print "2:[" submatches[1] "],[" submatches[2] "]"
    next
}
match($0, /([0-9]+)/, submatches) {
    print "1:[" submatches[1] "]"
    next
}
{
    print "not found... ", $0
}

あるパターンにマッチしたら、そのアクションではほかのパターンにマッチして しまわないように忘れずに next を実行しないといけないのと、 スクリプトの先頭近くにある順で線形にマッチを試みて行くので、 どのような順序でマッチングにトライさせるのかは書き手次第です。

not found...  hoge
2:[hoge],[123]
1:[456]
2:[hoge],[789]
3:[123,456],[piyo]

■_ shall

すでにコメント欄で解決しちゃいましたが。

grepで複数パターン - odz buffer
[UNIX]grepで複数パターン

    * ref:http://d.hatena.ne.jp/kanbayashi/20080615/p1

-e オプションを複数指定するとか GNU 拡張じゃないかと思ったが。

    Multiple -e and -f options shall be accepted by the grep utility. All of the 
    specified patterns shall be used when matching lines, but the order of evaluation is 
    unspecified.
 
    grep

ちゃんと規格に書いてた。shall なところが多少微妙なところではあるが。

あと、正規表現じゃない時は fgrep のがよいとかパターンは改行区切りで複数入力できるとか、
-f オプションでパターンをファイル入力にできるとかいろいろ。

shallだとなぜに微妙? RFCにも解説があったと思いますが、この場合のshallはmustとほぼ同じ意味。 つまり「実装しとかんとしばきあげるぞゴルァ」ということだと思うんですが。 参考→RFC-2119j(内田訳)

RFC-2119j(内田訳)
1. MUST

「MUST」という語や、「REQUIRED」あるいは「SHALL」は、その定義の要求を完全に守ることを要請しています。

    MUST This word, or the terms "REQUIRED" or "SHALL", mean that 
    the definition is an absolute requirement of the specification. 

ところで、複数の -e を受け付けるのはたぶんGNU grep が起源な様な気もしますが (根拠レス)、-f に関しては昔からあったのではないかと思います。 あと、GNU grep 限定(他にも同様のものがあるかもしれませんが)という話でよければ

   grep -e 'foo\|bar\|baz'

と、'|' 単独ではなく '\|' で選択になります。 Emacs Lispみたいですね :-)

Version 7 のgrepのソース (V7/usr/src/cmd/grep.c) をみると、

		case 'n':
			nflag++;
			continue;

		case 'e':
			--argc;
			++argv;
			goto out;

		default:
			errexit("grep: unknown flag\n", (char *)NULL);
			continue;
		}
out:
	if (argc<=0)
		exit(2);
	if (yflag) {

のようになってましたので、-e で指定できるのは一つだけですね。 …って、 case 'f' がないよ? (fgrep にはあった → V7/usr/src/cmd/fgrep.c)

■_ 老兵は死なず。ただ消え去るのみ。

【連載】Windows Server 2008で運用管理はどう変わる? (13) Windows Server 2008 でサポートが打ち切られた機能 | エンタープライズ | マイコミジャーナル

その他の、消滅したネットワーク関連機能

このほか、Windows Server 2008で消滅したネットワーク関連機能として、以下のものがある。
いずれも使用しているケースは少なかったと思われるが、念のために確認しておこう。

(ry

    ・SLIP(Serial Line Internet Protocol, シリアル回線インターネットプロトコル)
    ・ATM(Asynchronous Transfer Mode, 非同期転送モード)
    ・IP over 1394
    ・NWLink IPX/SPX/NetBIOS 互換トランスポートプロトコル

ああ、IPXなくなっちゃうのね。 最初にLAN引いたときの主役は Netware だったから、 必然的にIPXとかSPXを嫌というほど使ったわけで(笑) 確か当時の Netwareのバージョンも 2.11とかで、モジュール化もあまり進んでいない 今からするとちょっと扱いにくい面もあるけど、 PCでLANを組むのをすごくお手軽にしてくれた代物。値段も半端じゃなかったけどねw

なんのかんので Netwareは5.0までは使ったけど、その後はもう Windows だけで ネットワーク組むようになっちゃったなあ(ワークステーション関係は別系統)。

今の若い衆(笑)は NE2000 とか NE2000互換とかいっても通じないだろうなあ。 純正のNE2000って鬼のように高かったんだよなあ。

New Generation Chronicle:開拓者から改革者へ ネタで未来を切り開く男 大沢和宏 (2/6) - ITmedia エンタープライズ
少し前に、難しい難しいとか言われていたHaskellに興味があり、本買ったりしてみたのですけ
ど、難しくないことが分かった時点で飽きちゃいました。
Haskellのコードは一文字も書いていないけど飽きました。

マジっすか○| ̄|_

無償のIDE全盛の今、有償IDEの強みは「付加価値」にある--CodeGear - builder by ZDNet Japan

Rubyは元々、日本で開発された言語だからだろう。Ruby on Railsがデンマークで開発され、世
界的に人気も高まった。PHPについては、推測だが、日本に著名な開発者がいるのではないか?

PHPで有名な?

【C++】STL(Standard Template Library)相談室 9

641 デフォルトの名無しさん [sage] Date:2008/06/13(金) 20:31:07  ID: Be:
    \n とか \r\n とかが入った文字列を SetDlgItemTextすると
    char のときはちゃんと改行してるのに string だと改行されずに何も表示されないわけですが
    string って \n とかとは別に改行とかタブコードがあるんでしょうか? 

642 デフォルトの名無しさん [sage] Date:2008/06/13(金) 20:40:55  ID: Be:
    実際のコード貼ってみれ 

643 641 [sage] Date:2008/06/13(金) 21:37:36  ID: Be:
    あははははは!!!!!
    エディットコントロールのマルチラインがFalseなだけだった
    俺市ねw 

644 デフォルトの名無しさん [sage] Date:2008/06/13(金) 22:13:13  ID: Be:
    641は死んだの? 

645 デフォルトの名無しさん [sage] Date:2008/06/13(金) 22:49:25  ID: Be:
    >>644
    今日までの641は氏に、また一歩成長したプログラマーとして
      生まれ変わるのです。 

646 デフォルトの名無しさん [sage] Date:2008/06/14(土) 12:34:34  ID: Be:
    >>645が良い事言った 

647 デフォルトの名無しさん [sage] Date:2008/06/14(土) 15:25:44  ID: Be:
    フェニックスシングルトンなわけですね。 

648 デフォルトの名無しさん [sage] Date:2008/06/14(土) 15:30:12  ID: Be:
    シングルトンを真面目に考えるとややこしい事限りないなあ。 

649 デフォルトの名無しさん [sage] Date:2008/06/14(土) 15:31:25  ID: Be:
    非常に優秀なデザインパターンの1つだと思うな 

650 デフォルトの名無しさん [sage] Date:2008/06/14(土) 15:36:29  ID: Be:
    インスタンスの数が1個に限定される分、むしろ単純にならないか? 

651 デフォルトの名無しさん [sage] Date:2008/06/14(土) 15:39:16  ID: Be:
    Modern C++ Design を読むと
    シングルトンのややこしさがよく分かる。
    Scala みたいに言語的にサポートしてくれればいいんだが。 

652 デフォルトの名無しさん [sage] Date:2008/06/14(土) 15:48:11  ID: Be:
    作るのはいいけど削除のタイミングが面倒くさいんだよね。 

653 デフォルトの名無しさん [sage] Date:2008/06/14(土) 15:53:21  ID: Be:
    いつでもnewdelete出来るように改良した、って自慢げに変なシングルトン使いまくる奴ならいたな 

654 デフォルトの名無しさん [sage] Date:2008/06/14(土) 15:58:26  ID: Be:
    deleteしたら自動的に新しいインスタンスが作られて、
    newしたら自動的に今あるインスタンスが削除されるシングルトン 

655 デフォルトの名無しさん [sage] Date:2008/06/14(土) 16:51:25  ID: Be:
    >言語的にサポート
    使う人間のスキルへの依存度が高いC++に期待してはいけないものだよ。 

656 デフォルトの名無しさん [sage] Date:2008/06/14(土) 16:59:25  ID: Be:
    シングルトンて心太に似てるよね 

657 デフォルトの名無しさん [sage] Date:2008/06/14(土) 18:36:28  ID: Be:
    STLを軽く弄るためにこのスレを覗きにくるC++ビギナーはフェニックスシングルトンと
    ModernC++Designをどうやって関連付けて考えるだろうか。 

658 デフォルトの名無しさん [sage] Date:2008/06/14(土) 18:37:22  ID: Be:
    「スレ違い」 と関連づけて考える事だろう 

659 デフォルトの名無しさん [sage] Date:2008/06/14(土) 19:42:54  ID: Be:
    mapはどうやってfindなどで入力されたキーが木にあるキーと同じかどうかを見るんでしょうか?
    比較関数ならstd::less<T>がデフォルトで入っていてこいつを使えば良いと分かるんですか、
    これと同じ様に一致関数をテンプレート引数で指定できませんか? 

660 デフォルトの名無しさん [sage] Date:2008/06/14(土) 19:45:23  ID: Be:
    比較関数をltとすると、
    !lt(x, y) && !lt(y, x)
    で一致判定してる 

661 デフォルトの名無しさん [sage] Date:2008/06/14(土) 19:46:43  ID: Be:
    マップのキーは、その比較関数を使って一致を判断する
    !(a < b) && !(b < a) なら a と b は一致していることになる 

662 デフォルトの名無しさん [sage] Date:2008/06/14(土) 20:12:24  ID: Be:
    そして等価と等値の話が始まる。 

663 デフォルトの名無しさん [sage] Date:2008/06/14(土) 22:07:44  ID: Be:
    重要な概念だしな 

664 デフォルトの名無しさん [sage] Date:2008/06/15(日) 09:53:59  ID: Be:
    そしてEffective STL が売れる 

665 デフォルトの名無しさん [sage] Date:2008/06/15(日) 10:08:08  ID: Be:
    そして日本語版Modern C++ Designが叩かれる。 

Perl6すげえ! 

1 デフォルトの名無しさん [] Date:2008/06/09(月) 13:39:06  ID: Be:
    http://homepage1.nifty.com/kazuf/perl6.html

    > Perl6の動向は2001年最大の関心事になる。
    > 6月にはαリリースが予定されていたが、Damian Conwayによれば、
    > デザイン完了が今年末、来年2002年5月にα、7月にβ、10月にPerl6.0.0が出る予定だ。
    > PerlインタプリタやコンパイラからC,Java,C#などのコードを生成できるようになるらしい。
    > Unicodeのサポートが実際的なものになるかどうかにも注目!ラクダがマスコットから外れるという話も・・・[2001]


    オラわくわくしてきたぞ! 

2 デフォルトの名無しさん [] Date:2008/06/09(月) 13:57:45  ID: Be:
    2なら拓大合格 

3 デフォルトの名無しさん [sage] Date:2008/06/09(月) 15:41:24  ID: Be:
    あと何年かかるんだろね 

4 デフォルトの名無しさん [sage] Date:2008/06/09(月) 18:08:31  ID: Be:
    難産だねえ 

5 デフォルトの名無しさん [sage] Date:2008/06/09(月) 19:29:45  ID: Be:
    ほとんど誰も待ってないのがしんどいね。 

6 デフォルトの名無しさん [sage] Date:2008/06/09(月) 21:21:05  ID: Be:
    Pugsってどうなったの? 

7 デフォルトの名無しさん [sage] Date:2008/06/10(火) 01:59:13  ID: Be:
    Parrotな。
    このまえコンパイルしたときは一応RubyやPythonも動いてた。
    ただめちゃくちゃ遅かったけどな。やっぱVMはその言語専用のものに
    最適化されたもののほうがいいよ。 

8 デフォルトの名無しさん [sage] Date:2008/06/10(火) 15:29:59  ID: Be:
    JRubyやJythonは、本家より速いみたいだが… 

9 デフォルトの名無しさん [sage] Date:2008/06/10(火) 21:09:55  ID: Be:
    開発のための資金使っちゃったんじゃなかったっけ

    というかもうオワタよな 

10 デフォルトの名無しさん [sage] Date:2008/06/10(火) 21:30:46  ID: Be:
    http://www.parrotcode.org/docs/parrothist.html
    2001/09 0.0.1
    2004/02 0.1.0
    2005/05 0.2.0
    2005/10 0.3.0
    2005/12 0.4.0
    2007/11 0.5.0
    2008/03 0.6.0
    3008/08 0.7.0?

11 デフォルトの名無しさん [sage] Date:2008/06/10(火) 23:00:30  ID: Be:
    千年かけるなw 

12 デフォルトの名無しさん [sage] Date:2008/06/11(水) 13:23:18  ID: Be:
    たぶん封印して欠番バージョンになって、忘れた頃にPerl Xとして蘇るに違いない 

13 デフォルトの名無しさん [sage] Date:2008/06/12(木) 14:30:12  ID: Be:
    ↓のように鼻息が荒かった時代もあったのだが…

    Effectiveness of Parrot Compiler Toolkit

    Pynie - Python on Parrot (Feb 2007)

    * Language spec to basic working compiler in six hours
    * (blocks, function definitions, basic operators)
    * http://svn.perl.org/parrot/trunk/languages/pynie/

    LOLCODE on Parrot

    * Will Coleda and Simon Cozens
    * Four hours to learn toolkit, set up basic LOL compiler
    * variables, basic operations
    * http://svn.perl.org/parrot/trunk/languages/lolcode/

    http://www.pmichaud.com/2008/pres/dfwpm-rakudo/slides/slide43e.html#end

十戒

あーまだ途中だけど今日はこの辺で止めておこう。 寝る。

2008年06月15日

いろいろと

週に一回の楽しみであるところの銭湯ですが、今日(15日)に行ったら値上げしてますた○| ̄|_ (430円→450円)

お知らせは出ていたらしいんだけど見落としていたわいな。 まあ原油高だなんだであるだろうとは思ってたけど不意を突かれたのでダメージがでかいw

ということで乗ってきました副都心線。 考えてみれば、副都心線も東京メトロの地下鉄なので、 同じ東京メトロの半蔵門線から乗換えがしにくいわけがなかった(笑) 半蔵門線渋谷駅のホームに、副都心線への連絡通路への入り口がしっかりできていました。 副都心線渋谷駅のホームに行くにはちょっと歩きましたが、JRへ乗り換えるときと違って 外に出ないでいいし混雑しているところを通らなくてもいいということでプラス1。

P1000471 P1000473 P1000475 P1000476

すでに東横線の乗り入れの準備ができているのか(予定は2012年ですが) ホームは4線分ありました。現状では真ん中の二本は未使用で、 1番が各駅停車専用、4番が急行専用? P1000479
なんかたくさんの人がトンネルの向こう側を写真に撮っていましたが、 何があったのか確かめている時間がありませんでした。
P1000481

ということで急行に乗車。 渋谷を出ると新宿三丁目に停車し、その次は池袋。 P1000485

池袋駅のホームドアのところにあった広告。 ナニモノなんでしょうか? P1000488

ということで池袋駅で降りてジュンク堂を目指したのですが、 副都心線の乗り場は東武デパートのある方で、ジュンク堂は反対側の西武デパート(やビックカメラ)の ある方ということで、400メートルほど地下道を進んで地上へ。 P1000493

池袋のジュンク堂到着。 P1000494

ジュンク堂で時間を掛けすぎて、帰りには新宿三丁目で降りて ジュンク堂の新宿店と紀伊国屋書店南新宿店を回って帰ろうという目算が外れました○| ̄|_ んで、渋谷での乗り換えはよしとしても、池袋側では結構歩くのと 渋谷→池袋の料金が副都心線利用で190円。JRでは160円。 ということでちょっと考えちゃいますねー。 所要時間は急行でなくても短縮されてそうな気はしますが。

ジュンク堂で目撃したブツの数々。 あおきさんのpopハケーン。
080615-164012 080615-163056 080615-163039

ML for working programmer とか Lisp in small pieces とかあったんですけど 値段が半端ぢゃないのでとても買えませぬ(前者が11000円弱、後者が15000円強)○| ̄|_
080615-163410 080615-163348

ということでこんなのを買ってみたり (C Programming: A modern approach)。
080615-162813
巻末付近に ANSI以前→C89→C99の間の変更点がまとめてあったりしたので物は試しと。 訳本がすぐに出たら泣く(笑)

再起再帰禁止?



C言語の質問です!! - Yahoo!知恵袋回答日時: 2008/6/15 10:31:03 	回答番号: 51,861,940

N回繰り返すには、他の方のとおり以下で。

for(i=0;i<N;i++) {
    KANSUU();
}

再帰は使わないように心がけましょう。
  プログラムが暴走する元です。
うちのコーディングルールでは、
  再帰の使用は禁止してます。


【肥大化】C++ を見捨てたヤシ 2人目【複雑化】 

337 デフォルトの名無しさん [sage] Date:2008/06/13(金) 00:02:48  ID: Be:
    Mozilla 素敵

    http://developer.mozilla.org/ja/docs/C%2B%2B_Portability_Guide 

338 デフォルトの名無しさん [sage] Date:2008/06/13(金) 00:29:19  ID: Be:
    ほほう、面白いな。
    でも、あまり古いコンパイラに束縛されるのも考え物だな。この辺は臨機応変かな。 

339 デフォルトの名無しさん [sage] Date:2008/06/13(金) 10:51:15  ID: Be:
    >>337
    C++大好き派なんだけど、こういうのが逆に一番効くな(´Д`;)
    これをもって、「こんなに制限されるなら、
    初めからCで書いた方が良くね」って言われたら中々反論し難い・・・。

    俺がC++の開発でいつもおかしいと思ってるんだけど、
    何でC++ソースからネイティブバイナリに一気に変換するんだろうか・・・。

    cfrontは例外が実装(Cのソースで妥当なオーバヘッドで)出来なくて
    逝ったらしいけど、各プラットフォームのコンパイラが、
    例外に対応した C+0.1 くらいの中間言語を用意すれば、
    開発者PC上で C+0.1 までは変換しておける。

    そうすればnamespace、テンプレート、実行時型情報、inline最適化などは、
    開発者PC上のコンパイラ側の問題になる。

    役割分担せずにフルスペックでやろうとするから、
    こんなアホな状況になったと思うんだよな~。 

340 デフォルトの名無しさん [sage] Date:2008/06/13(金) 11:09:03  ID: Be:
    表現が変だったので訂正。

    各プラットフォーム用のフルスペックのC++コンパイラを用意せずに、
    C+0.1 くらいの中間言語(禿げ達で策定)のコンパイラだけ用意すれば良い。
    ってことね。 

341 デフォルトの名無しさん [sage] Date:2008/06/13(金) 11:12:09  ID: Be:
    C++の実行形式作成には、
    linkerもC++対応が必要なことは理解できてる?
    あまりよく知らないcfrontの話は混ぜないで考えた方がいいよ。

342 デフォルトの名無しさん [sage] Date:2008/06/13(金) 11:18:34  ID: Be:
    具体的にどんなの?
    名前マングリングとかの話なら、
    必要最小限を中間言語で扱えばいいし。

    リンカも含めても良いけど、
    フルスペック実装しようとするのが間違いって俺は言ってる。 

346 デフォルトの名無しさん [sage] Date:2008/06/13(金) 20:04:02  ID: Be:
    C++に必要だったのはCのリンカやコンパイラ資産を使えること、
    だから今言ってもしょうがない。
    中間言語に変換するコストだって20年前なら馬鹿にならなかっただろうし、
    そんな言語をもう一つ作るような手間のかかることしてたらISO規格になれず
    マイナー言語で終わっていただろう(と言うような事をD&Eでは繰り返し述べている)。

    つーか結局の所それなんてC++/CLI?ってことになるんじゃ。 

347 デフォルトの名無しさん [sage] Date:2008/06/13(金) 21:09:13  ID: Be:
    >>346
    流石に斜め読みし過ぎです・・・。

    最初のC++コンパイラcfrontにとって
    実質C言語を中間言語とするものだった。

    でも例外を実装しようとしたとき、
    スタック巻き戻しなどがC言語の表現では出来なかった。
    (コスト度外視すればもちろん出来るけど)

    そこで、直接ネイティブコードを作ることで
    問題を解決したんだけど、
    その方法でなく、C言語に必要最小限の拡張を加えたものを
    「cfrontのために」用意する方法でも良かったんじゃないかと。

    そうすればマイナーな環境において、
    「完全なC++コンパイラ」を用意しなくても、
    「ちょっと拡張されたCコンパイラ」を用意するだけで
    済んだのでは、という話。

    今何か言った所で現実が変わることは無いってのは
    分かってるけどね。

    あと、D&Eで書かれてたのは、
    あの時代に理想の言語を作ろうとしてたら、の話だよね。
    C++/CLIは現実主義ベースだと思うけど。 

348 デフォルトの名無しさん [sage] Date:2008/06/13(金) 21:14:29  ID: Be:
    LLVM の C++ は一旦 C にコンパイル出来るみたいね
    ストラウストラップには無理でも他の人間がやれば出来る 

349 デフォルトの名無しさん [sage] Date:2008/06/13(金) 21:22:32  ID: Be:
    >>348
    > LLVM の C++ は一旦 C にコンパイル出来るみたいね

    病院行ってこい。 

350 デフォルトの名無しさん [sage] Date:2008/06/13(金) 21:23:11  ID: Be:
    何言ってんの? 

351 デフォルトの名無しさん [sage] Date:2008/06/13(金) 21:33:11  ID: Be:
    試したことないから、まるで実用にならないの知らないみたい。

352 デフォルトの名無しさん [sage] Date:2008/06/13(金) 21:35:16  ID: Be:
    何言ってんの? 

355 デフォルトの名無しさん [sage] Date:2008/06/13(金) 22:40:15  ID: Be:
    >>353
    C++→Cじゃなくて、
    C++→LLVM→Cだからひどいソースだよw 

356 デフォルトの名無しさん [sage] Date:2008/06/13(金) 22:57:45  ID: Be:
    そういう話じゃないだろ 

357 デフォルトの名無しさん [sage] Date:2008/06/13(金) 23:05:30  ID: Be:
    例外を有効にすると壊滅的に遅いからデフォールトはオフ。> LLVM
    巻き戻しポイントで常にsetjmp。

358 デフォルトの名無しさん [sage] Date:2008/06/13(金) 23:17:17  ID: Be:
    http://llvm.org/docs/FAQ.html#translatec++

    そう書いてあるね。ストラウストラップごめん。
    今度はもう少しまともな言語作ってくれな。 

359 デフォルトの名無しさん [sage] Date:2008/06/13(金) 23:26:10  ID: Be:
    ちょっと疑問に思ったんだが、最初C++はCのトランスレータとして
    誕生したよな。

    そんで例外処理がCだけでは記述不可能なのでネイティブコン
    パイラが作られたと聞いてるんだが、LLVMは例外処理をどのように
    吐き出してるの? 

360 デフォルトの名無しさん [sage] Date:2008/06/13(金) 23:30:41  ID: Be:
    あ~やっぱ遅いのか・・・。残念。
    まぁ、手があるならcfrontでやってるはずだしね。

    >>359
    setjmp/longjmp
    コスト無視ならsetjmp使わなくてもどうにでも実装出来るよ。 

361 デフォルトの名無しさん [sage] Date:2008/06/13(金) 23:47:48  ID: Be:
    >>360
    サンクス。やっぱそれしかないよね。
    MinGW用のバイナリが出てるみたいだから遊んでみるかな 

362 デフォルトの名無しさん [sage] Date:2008/06/14(土) 07:05:24  ID: Be:
    LLVMのC backendは、
    Cへのトランスレータだけだった頃のcfrontと同じリンク時の問題抱えているよ。
    LLVMは言語独自の機能のロードタイムサポート持ってるんだけど、
    ネイティブコンパイラはcrt0.sなんかも使ってかなりトリッキーな事してるから。

    しかしこの話題はスレ違いではw 

363 デフォルトの名無しさん [sage] Date:2008/06/14(土) 09:17:14  ID: Be:
    そんなに面倒という話を聞くと、Windowsが例外処理を直接提供するというのも頷ける。 

364 デフォルトの名無しさん [sage] Date:2008/06/14(土) 09:48:29  ID: Be:
    ネイティブ・コンパイラや
    例外の機能を持っているC--を中間言語に使うなら何も問題ない。 

365 デフォルトの名無しさん [sage] Date:2008/06/14(土) 11:04:32  ID: Be:
    デクリメントかよw 

366 デフォルトの名無しさん [sage] Date:2008/06/14(土) 11:20:59  ID: Be:
    これだな。
    http://www.cminusminus.org/

    LLVMもCに変換して実行しないなら、
    C++のコンパイラ何の問題もない。g++改だし。 

367 デフォルトの名無しさん [sage] Date:2008/06/14(土) 20:48:15  ID: Be:
    環境に応じて言語が拡張していくものはすきじゃないな。

368 デフォルトの名無しさん [sage] Date:2008/06/14(土) 21:22:57  ID: Be:
    環境って?

    いや、言語が拡張ってことは、
    所謂OSとか処理系とかのこととは違うのかなって思って。 

369 デフォルトの名無しさん [sage] Date:2008/06/14(土) 21:31:32  ID: Be:
    >>367
    環境に応じて拡張されるのはライブラリで、言語仕様は変更しない。C++はマジでそれを実践している。
    文字列のクラスを例にすると、メモリが潤沢な環境ではstd::stringを使い、
    メモリの少ない組み込みでは社内ライブラリの文字列クラスを使うなど選択できる。 

荒れてるなあ

しかも週末にまとめて(^^;

突っ込もうと思ったら - 神様なんて信じない僕らのために
もうid:bleis-tiftさんが突っ込んでた。

きむら(K)さん経由。

C++ C言語について質問1;なぜC++構造体は継承などができないのか?質問... - Yahoo!知恵袋

しかし、その解答はそこに書き込んでいる人には理解できない、とか思ったりもして。

さすがはC++、そこに痺れる、憧れるぅ。

しかし、Bjarne Stroustrupの名前がでているのに継承できないことになってる不思議!!

bleis-tiftbleis-tift 2008/06/15 23:01
 >その解答はそこに書き込んでいる人には理解できない、とか思ったりもして
あ、やっぱりですか^^;
でもなんでこんなに勘違いしている人が多いのか疑問です。
なんか間違ったこと書いてある本でもあったのか・・・

都市伝説(?)の起源を探れ。とか。 ちょっとプログラム片書いて試せば継承できるかできないかは すぐにわかることなのになぜ誰もやらないのか、とか、 きちんとした資料にあたろうとしないとか。 まあOKWaveでも「専門家」にとんでもないこと書く人いますしねw

クイックソートの問題

ちょっと前に書いたクイックソートの問題云々ですが、 やはり「プログラミングの壷」に記述がありました。 とはいえ自分が考えていたのとはちょっと違っていて、 多少記憶が混乱しているようです。

問題のエッセイはシリーズ一巻目の「ソフトウェア設計編」の エッセイ8 カオスから秩序へ にあります。 かいつまんで説明しますと、

プラウガー氏がカーニハン大先生と共著した Software Tools in Pascal で Software Tools(ソフトウェア作法)では RATFOR を使って書かれていた クイックソートのサンプルプログラムを Pascal で書き直したときに 手続きの最後の部分が

  if (low < hi) then begin
    ...
    if (l - lo < hi - i) then begin
      rquick(lo, l-1);
      rquick(l+1, hi)
    end
    else begin
      rquick(i+1, hi);
      rquick(lo, l-1)
    end
  end

のようにしていて、これは一見エレガントな対称形になっているように見えるけれども 分割したどちらを先にやっても結果は変わらない(=無駄がある)。 そしてなにによりパフォーマンスバグ(performance bug)を抱えてしまっている。 どういうことかというと、最悪な並びの巨大なデータを喰わせると再帰のレベルが 深くなりすぎてスタックが溢れる可能性があるということ (これを避けるやり方はいくつかあります。shiroさんが書かれたのもそのひとつ)。

この本では結局、

  while (low < hi) then begin
    ...
    if (l - lo < hi - i) then begin
      rquick(lo, l-1);
      lo := i+1
    end
    else begin
      rquick(i+1, hi);
      hi := i-1
    end
  end

というものを最終形としています。

伝統?(プ

mixi経由で。

 モンスターペアレントの存在が確認され始めたのは、90年代後半から。わが子が通う学校に
理不尽な要求をするバカ親のことだ。当時、小・中学生だった「わが子」も社会人に。モンスタ
ーペアレントは、いよいよ会社を“標的”にし始めた。人事部は対応に手を焼いているらしい。


●わが子の研修、残業、配属にクレーム


 ある電機メーカーの人事課長はこう言って嘆く。


「新人研修は家電量販店で自社製品を販売。わが社の伝統なのに、ある新入社員の親が『ウチの
息子は、量販店に就職したわけじゃない。いますぐ量販店研修をやめさせろ』と人事部に乗り込
んできた。『息子が量販店のマネジャーにしかられて、泣いて帰ってきた』と言うのです」


 泣いて帰る息子も息子だが、会社に乗り込んでくる親も親じゃないか。


 研修にイチャモンをつけるぐらいだから、残業なんてもってのほか。黙っていられない親もいる。


  

なんのために量販店の店頭に立たせるか、ですよね。 わたしの場合は飛び込み営業でしたが(笑) 技術職という名目でとっておいて、 会社を良く知るためとか何とかいって研修ではこれですからね。 まあいろいろと表に出せないこともあるらしいですけど、某社では量販店に出向かせる 研修はありませんのでわたしは良く知りませんよ?(笑)

ほかの(残業時間(微妙だけど)とか営業のノルマ)はともかくこれに関しては その「伝統」とやらのほうがおかしいと思うがね。

疲れた。

2008年06月14日



Yahoo!辞書 - ひょうぼう【標榜】

ひょうぼう[へうばう] 0 【標▼榜】

(名)
スル
[1]	人の善行をたたえて、その事実を記し衆人に示すこと。
[2]	主義・主張や立場などを、公然と表すこと。公然と唱えること。

	・	民主主義を―する

Yahoo!辞書 - ひょう‐ぼう【標榜】

ひょう‐ぼう〔ヘウバウ〕【標×榜】

[名](スル)

1 善行をほめたたえ、その事実を記した札を立てて世に示すこと。また、その札。

2 主義・主張などをはっきりと掲げ示すこと。「自由と民主主義を―する政党」



三省堂 Web Dictionary  辞書検索

ひょうぼう [標▲榜]
	


〈スル〉 自分の主義・主張を公然と示すこと.

昨日貼り忘れていたもの。 例の自分を売り込んできた彼(?)のメールに添付されていたrarアーカイブの中身。 a.out とか .bak が入ってたり。 もーちょっと注意せいよ(^^ → メールに添付されていたアーカイブ中のファイル一覧

東京メトロの新線、副都心線が開業しましたが今日のところはスルー。 始発電車には相当人が乗ったらしいですが(笑) 渋谷→新宿三丁目(ジュンク堂新宿店)→池袋(ジュンク堂池袋本店) というまるでわたしのために作ってくれたんですかと 云いたいくらいのルートを通るので早いところどんなもんかチェックしたいんですけどね。 2012年に予定されている東急東横線との乗り入れは…んーどうなんだろう。 出かけるときは田園都市線のほうにでちゃうからなあ。

a=int(raw_input("Enter the minimum valuer:"))
b=int(raw_input("Enter the maximum value:"))

def fib():
    yield 0 # F0
    yield 1 # F1
    yield 1 # F2
    n1 = 1
    n2 = 1
    while (True):
        n = n1 + n2 #F(n+2) = F(n) + F(n+1)
        yield n
        n1, n2 = n2, n


for i in fib():
    if a <= i <= b:
        print i
    if i >= b:
        break

http://tabesugi.net/memo/cur/cur.html#132301 http://tabesugi.net/memo/cur/cur.html#132354



Boost総合スレ part6 [bbs2chreader]

131 デフォルトの名無しさん [sage] Date:2008/06/11(水) 14:40:50  ID: Be:
    力作を送れば採用してもらえるかも?

    そういえばboostに日本人作のものって入ってるの? 

134 デフォルトの名無しさん [sage] Date:2008/06/11(水) 17:12:18  ID: Be:
    boost.rubyができれば強制的に入ることになるかも 

135 デフォルトの名無しさん [sage] Date:2008/06/11(水) 18:26:59  ID: Be:
    >>131
    boost::rangeの一部(MFCコンテナ用range)は日本人っぽい名前だったような。
    あとこないだまでレビューしてたboost::eggも多分そう。 

136 デフォルトの名無しさん [sage] Date:2008/06/11(水) 19:29:51  ID: Be:
    「C++なぞ問題外」と書いたまつもと氏のRubyがboostに入るわけですか
    boostは心が広いなぁ、ホント素敵! 

137 デフォルトの名無しさん [sage] Date:2008/06/11(水) 19:40:03  ID: Be:
    いいえ、RubyをベースにしたRuby++言語の処理系をboostベースで実装します 

138 デフォルトの名無しさん [sage] Date:2008/06/11(水) 19:53:23  ID: Be:
    boost なぞ問題外.^^;;; 

139 デフォルトの名無しさん [sage] Date:2008/06/11(水) 20:50:38  ID: Be:
    どうでも良いが個人的にまつもと氏に0xに改善されても尚C++が問題外かどうかを訊ねたい。 

146 デフォルトの名無しさん [] Date:2008/06/12(木) 06:56:32  ID: Be:
    >>139
    http://jp.rubyist.net/magazine/?0018-Legwork
    こんな記事も書いてたぞ。 

147 デフォルトの名無しさん [sage] Date:2008/06/12(木) 12:29:48  ID: Be:
    >>139
    悪いものに何を付け足しても良くならないと考えるんじゃない? 

148 デフォルトの名無しさん [sage] Date:2008/06/12(木) 13:59:50  ID: Be:
    Ruby より優れた言語はこの世に存在しない。 

149 デフォルトの名無しさん [sage] Date:2008/06/12(木) 14:07:47  ID: Be:
    スクリプト言語と普通の(?)言語を一緒にされても・・・ 

150 デフォルトの名無しさん [sage] Date:2008/06/12(木) 17:46:02  ID: Be:
    Rubyでブートローダーとかデバイスドライバとかゲームとか作れるのかよ。 

151 デフォルトの名無しさん [sage] Date:2008/06/12(木) 18:03:27  ID: Be:
    boostはpythonをサポートしてるから、boostスレでわめいてもRubyの布教に効果ないよ。 

152 デフォルトの名無しさん [sage] Date:2008/06/12(木) 18:10:52  ID: Be:
    空飛ぶパイソンvsキリスト 

153 デフォルトの名無しさん [sage] Date:2008/06/12(木) 18:28:07  ID: Be:
    boostがrubyに対応させる?
    rubyがboostに対応させる?

154 デフォルトの名無しさん [sage] Date:2008/06/12(木) 19:38:59  ID: Be:
    まー、Java(笑)なんかよりは優秀だろ
    Rubyは 

155 デフォルトの名無しさん [sage] Date:2008/06/12(木) 20:09:15  ID: Be:
    Java言語がいかに貧弱だろうとJVMが優秀だからJavaが有利 

156 デフォルトの名無しさん [sage] Date:2008/06/12(木) 21:15:45  ID: Be:
    最近じゃscalaとかあるしなぁ 

157 デフォルトの名無しさん [sage] Date:2008/06/12(木) 22:19:12  ID: Be:
    Fortran「」←帰れと退けたくなる様な事言わせろ 

158 デフォルトの名無しさん [sage] Date:2008/06/12(木) 22:25:49  ID: Be:
    >>157
    あなた様がいなければ、CやC++といった素晴らしい言語は生まれませんでした 

160 デフォルトの名無しさん [sage] Date:2008/06/12(木) 22:32:13  ID: Be:
    Fortran「全部大文字で書いてくれ。俺の名前も」(1977) 

164 デフォルトの名無しさん [sage] Date:2008/06/13(金) 15:10:55  ID: Be:
    boost.rails
    しかもMPL使いまくりなのを


Pythonのお勉強 Part 27 [bbs2chreader]

14 デフォルトの名無しさん [sage] Date:2008/06/14(土) 08:39:25  ID: Be:
    PythonでCGIプログラムを作ってるんだけど、printで出力するときUTF-8にするにはどうすればいいの?
    勝手にShift_JISに変換されて困ってるんだが。 

15 デフォルトの名無しさん [sage] Date:2008/06/14(土) 09:04:21  ID: Be:
    print ustr.encode('utf-8') とかなんとか 

16 デフォルトの名無しさん [sage] Date:2008/06/14(土) 09:09:59  ID: Be:
    print('テスト'.encode('utf-8'))だと
    b'\xe3\x83\x86\xe3\x82\xb9\xe3\x83\x88'
    になってしまいます。 

17 デフォルトの名無しさん [sage] Date:2008/06/14(土) 09:14:07  ID: Be:
    print 'テスト'.decode('sjis').encode('utf-8')
    print u'テスト'.encode('utf-8')

    お好きなほうで 

18 デフォルトの名無しさん [sage] Date:2008/06/14(土) 09:21:52  ID: Be:
    >>17
    Python3なので、uとdecodeは無いみたいです。 

19 デフォルトの名無しさん [] Date:2008/06/14(土) 10:36:48  ID: Be:
    >>18
    #-*- coding:utf-8 -*-
    を追加して、エディタで文字コードUTF-8で保存して実行してみ。 

20 デフォルトの名無しさん [sage] Date:2008/06/14(土) 10:44:06  ID: Be:
    どういう意図があって、3.0αなんてつかっているの? 

21 デフォルトの名無しさん [sage] Date:2008/06/14(土) 10:45:06  ID: Be:
    きっと大きい数字の方がいいと思ったのだろうよ・・・ 

22 デフォルトの名無しさん [sage] Date:2008/06/14(土) 10:45:16  ID: Be:
    printはコンソール出力用だからsys.stdout.write使っとき。 

23 デフォルトの名無しさん [sage] Date:2008/06/14(土) 10:49:14  ID: Be:
    >>18
    このスレでPython3を使っているのは、たぶん君だけだw

    sys.setdefaultencoding()で設定しても駄目かな? 

24 デフォルトの名無しさん [sage] Date:2008/06/14(土) 10:51:38  ID: Be:
    試してる人はいるとは思うから
    質問するときは明記した方がまともな回答がつきやすいとは思う 

25 デフォルトの名無しさん [sage] Date:2008/06/14(土) 11:27:52  ID: Be:
    >>24
    それ以前のレベルでしょ
    初めてのPythonを読みつつ、人のコードを読んで、いじったりして
    2.xでcgiをいくつか組んで、それから3.xじゃないの
    資料が少なすぎて、開発しづらいと思うよ 

26 デフォルトの名無しさん [sage] Date:2008/06/14(土) 12:00:25  ID: Be:
    >>19
    最初からそうしてるけど、効果ないみたいです。
    >>22
    やっぱりShift_JISに変換されてしまいます。
    >>23
    その方法を使いたくなくて(sitecustomize.pyを編集する必要があるため)
    Python3にしたくらいなので、それ以外の方法を探しています。 

27 デフォルトの名無しさん [sage] Date:2008/06/14(土) 12:03:53  ID: Be:
    ん~、何か非常に特殊な環境と状態にいるみたいが、
    そこら辺、詳細に説明しておいた方がよくないか 

28 デフォルトの名無しさん [sage] Date:2008/06/14(土) 12:05:43  ID: Be:
    釣りとしか思えない件 

29 デフォルトの名無しさん [sage] Date:2008/06/14(土) 12:38:02  ID: Be:
    Python3だと、エンコード設定はファイルオブジェクトが持っているから
    stdoutの設定を変えないと駄目っぽいね。
    ちょっと見た感じだと、まっとうな方法はないかも?

    とりあえず、それっぽいのを見つけてきた。
    ttp://mail.python.org/pipermail/python-3000/2008-February/012144.html
    ttp://mail.python.org/pipermail/python-3000/2008-February/012170.html 

30 デフォルトの名無しさん [sage] Date:2008/06/14(土) 12:51:15  ID: Be:
    >>29
    おおすごい。
    ありがとうございます。
    sys.stdout = io.TextIOWrapper(sys.stdout.buffer, 'utf-8')
    でできました。 

31 デフォルトの名無しさん [sage] Date:2008/06/14(土) 12:54:09  ID: Be:
    sys.stdout._encoding = 'utf-8'でもいいみたいですね。 

おお、これはなんか参考になる情報。 sys.stdout._encoding ってのは stdout の持っている属性とか?



Win32API質問箱 Build67

240 デフォルトの名無しさん [sage] Date:2008/06/14(土) 08:27:48  ID: Be:
    fprintf等でUTF-8 LF形式で出力したいのですが、どうしてもできません。
    どうかご教授おねがいします
    。

    FILE* fp;
    _tfopen_s( &\1fp, _T("hoge.txt"), _T("w,ccs=UTF-8"));
    fseek(fp, 0, SEEK_SET );
    _ftprintf_s( fp, _T("hogehoge"));
    _setmode( _fileno( fp ), _O_BINARY );
    _ftprintf_s( fp, _T("\n"));
    _setmode( _fileno( fp ), _O_TEXT );
    _ftprintf_s( fp, _T("あいうえお"));
    fclose(fp);

    MSDN見る限りではこう作れってかいてあるのですが、どうも_setmodeの挙動がおかしいようで... 

241 デフォルトの名無しさん [sage] Date:2008/06/14(土) 09:14:00  ID: Be:
    どうせccs=UTF-8なんてVC++限定なんだから、
    自分でメモリ上にUTF-8, LF改行のデータを作って、
    ただのバイナリモードで一気に書きこんだらどうかと思う。

    というかスレ違い。 

242 デフォルトの名無しさん [sage] Date:2008/06/14(土) 10:13:39  ID: Be:
    >>240
    _setmode( _fileno( fp ), _O_U8TEXT); 

_O_U8TEXT ってナニ? …知らなかった。

訳語



Pythonのお勉強 Part 26 [bbs2chreader]

978 デフォルトの名無しさん [sage] Date:2008/06/13(金) 18:04:57  ID: Be:
    リスト内包に表記をつけて「リスト内包表記」と書いてある例が
    目につくけど、なんでわざわざ「表記」をつけるんだろうと思う。

    書籍とかでも結構ある。訳語としておかしいと思うんだけど。
    何でこんな変な訳が流行ったのか理由ご存知のかたいます?

    ちなみに英語ではList Comprehension。 

979 デフォルトの名無しさん [sage] Date:2008/06/13(金) 18:18:29  ID: Be:
    構文糖なんて表記の上での違いしかないから 

980 デフォルトの名無しさん [sage] Date:2008/06/13(金) 18:25:11  ID: Be:
    あ 

981 デフォルトの名無しさん [sage] Date:2008/06/13(金) 18:32:08  ID: Be:
    失礼、ミスった

    ネット上には用例が少ないけど、set comprehensionの定訳が、集合の内包表記だったから。 

982 デフォルトの名無しさん [sage] Date:2008/06/13(金) 19:17:51  ID: Be:
    そういうterminologyにいい訳を求めても仕方がない
    むしろ重要なのはその言葉が何を意味しているかはっきりと区別できるという言葉本来の役割である
    従って、論文なり技術誌なりで最初に使われたそれらしい言葉がそのまま使われるというのはよくある話

    理由は皆がいろいろな訳語を使うと紛らわしいから
    技術的な側面を持っている以上、必要なのは言葉の綺麗さなどではなくuniqueである事 

983 デフォルトの名無しさん [sage] Date:2008/06/13(金) 19:31:11  ID: Be:
    用語は日本語に訳せず英語のまま使いましょうって? 

984 デフォルトの名無しさん [sage] Date:2008/06/13(金) 19:33:47  ID: Be:
    うん 

985 デフォルトの名無しさん [sage] Date:2008/06/13(金) 19:33:52  ID: Be:
    一番いいと俺が思うのは専門用語は 日本語(英語) で書いてある奴かな 

986 デフォルトの名無しさん [sage] Date:2008/06/13(金) 19:34:56  ID: Be:
    >>981
    なるほど。ありがとう。

    >>982
    それはそうではあるけど、リスト内包"表記"が気持ち悪いんですよ
    ね。まぁリスト内包でも普通に通じるから、自分でそういう表現使
    うときにはちゃんと表記を削って書いて、周りにも強制するように
    します。 

987 デフォルトの名無しさん [sage] Date:2008/06/13(金) 19:45:07  ID: Be:
    そこまで気持ち悪いと思うんだったら英語で書けばいいと思うけどなぁ
    リスト内包という日本語自体も大概変な日本語だし 

988 デフォルトの名無しさん [sage] Date:2008/06/13(金) 23:03:42  ID: Be:
    確かにList comprehensionがリスト内包になるのならわかるが、
    リスト内包表記はないよな。どっから沸いてきたんだって感じ。
    >表記 

989 デフォルトの名無しさん [sage] Date:2008/06/13(金) 23:09:29  ID: Be:
    リスト内包を文字で表記するための構文なんだから全然問題ないと思うが 

994 デフォルトの名無しさん [sage] Date:2008/06/13(金) 23:51:13  ID: Be:
    英語と日本語が1対1で対応するわけじゃないんだから、原語に無い言葉を
    足してはいかんとは思わないな。「リスト内包」では日本語としておかしいし。
    「内包表記」が良い訳だとは思わないけどね。
    リスト内包構文くらいの方がいいかね。

    そもそも、俺の辞書だと内包の意味だとuncountableとなっているが、
    原文はList Comprehensionsと複数形だし、内包という訳も怪しい。 

996 デフォルトの名無しさん [sage] Date:2008/06/13(金) 23:52:01  ID: Be:
    http://ja.wikipedia.org/wiki/リスト内包 

997 デフォルトの名無しさん [sage] Date:2008/06/13(金) 23:54:54  ID: Be:
    http://ja.wikipedia.org/%E3%83%AA%E3%82%B9%E3%83%88%E5%86%85%E5%8C%85
    4件中1 - 4件目の検索結果を表示

    http://ja.wikipedia.org/%E3%83%AA%E3%82%B9%E3%83%88%E5%86%85%E5%8C%85%E8%A1%A8%E8%A8%98
    3件中1 - 3件目の検索結果を表示

1000 デフォルトの名無しさん [sage] Date:2008/06/13(金) 23:56:53  ID: Be:
    リスト閉包式が正しい役だろJK 


uncountableてのはなにか別のものを指してないか? 自分の事情を云うと、“comprehenstions”のスペルを思い出せないことがしばしばあるから 英語表記で書きたくても書けない(笑) でまあ確かに 994 の云うとおりで「リスト内包」で止めてしまうと なんとなくしっくりこない感じはある。



Pythonのお勉強 Part 27 [bbs2chreader]
12 デフォルトの名無しさん [sage] Date:2008/06/14(土) 05:01:44  ID: Be:
    前スレの>>994

    英語を日本語にする事を考えたときは英々辞書引いたほうがいい。
    たとえば↓みたいな。
    http://dictionary.reference.com/browse/comprehension

    で、↑にもあるようにcomprehensionはcomprehendの名詞な
    ので、comprehendの説明挙げておく
    1.to understand the nature or meaning of; grasp with
    the mind; perceive: He did not comprehend the significance
    of the ambassador's remark.

    2.to take in or embrace; include; comprise: The course
    will comprehend all facets of Japanese culture.

    ↑の2見てわかるように、やっぱりリスト内包でいいんじゃね?
    表記はいらんでしょ。 

13 デフォルトの名無しさん [sage] Date:2008/06/14(土) 05:37:08  ID: Be:
    >>12
    英語で覚えるのが理想だよね

    概念や用語を日本語に置き換えるのに無理があるし、意味がわかりにくくなる 

「内包」と書くとサ変動詞の語幹のような感じが強くするので、 さっきも書いたけど「リスト内包」ってなんかむずがゆいんですよね。 でもがんがん使ってたりしますけど(笑)

List comprehensions をどのように日本語表記するかは Fe2+ さんが昔なにか書いていたような?

あった。これだ。 Floating Log 10.12.2006

長くなりそうなので、先にまとめを言ってしまう:

「リスト内包表記」の代わりに「内包リスト」と言おう。

(ry

list comprehension を訳す時に、「リスト内包」では収まりが悪いから「表記」と、
つまり構文糖衣だという主張も織り交ぜて落ち着かせたと考えられる。

(ry

逆に言うと「ジェネレータ式」と訳すなら「リスト内包表記」はもう少し軽くなって欲しい。と
いったようなイメージを一瞬で通り過ぎて、じゃあ「内包リスト」で良くないか、という結論が
飛び込んできたのだった。

前後を逆転させることで、結局のところリストであるということが強調される。悪くない訳語だ
と思うがどうだろう。 
  

当時納得して自分もこれを使おうと思ったはずなのにいつの間にか忘れていたようです○| ̄|_

関連→ Floating Log 1.12.2006

うーむ winsock の getaddrinfo ってglibcとかのと仕様が微妙に違ってたりするんだろうか。 わけわかんNEE。… winsockだものなあ。



松浦晋也のL/D:  人の世の理とこの世の理

理系文系をことさらに峻別するのは無意味なことだが、大きく分ければ理系とは「世界の理を知
る」知識体系であり、文系は「人の世の理を知る」知識体系だ。人は社会を形成して生きている
ので、人の世を動かすのは文系の知識である。法学であったり経済学であったり会計学であった
り——みな政治に密接に関係している。

 だから、かどうかは断言できないが、どうも政治や行政の関係者は「世界の理」を軽く見てい
るのではないか、と感じられることがある。実際には、世界の理は、人の世の理より強い。今日
中に仕事が片づかないから太陽が沈むのを呼び戻す、平清盛のようなことはまず間違いなくでき
ない。

(何個目かの)十戒

Download the Builder.com Ten Commandments of Egoless Programming

日曜日中に訳せるか?

The Ten Commandments

What we need is a set of rules or guidelines to help developers keep themselves (their 
egos, actually) separate from their code. Hence our Ten Commandments for Egoless 
Programming, which you can also download in handy "stone tablet" format:
  
  1. Understand and accept that you will make mistakes.
  2. You are not your code.
  3. No matter how much "karate" you know, someone else will always know more.
  4. Don't rewrite code without consultation.
  5. Treat people who know less than you with respect, deference, and patience.
  6. The only constant in the world is change.
  7. The only true authority stems from knowledge, not from position.
  8. Fight for what you believe, but gracefully accept defeat.
  9. Don't be "the guy in the room."
  10. Critique code instead of people—be kind to the coder, not to the code.

2008年06月13日

■_

久しぶりにZedの新作がががが。 ZSFA -- 2008-06-13

今週は jijixiさんマクロスFの一言コメント出してないなあと思ったら サッカーで休止かッ(それはTBSです)

■_ 今日の

[ruby-list:45045] Re: WindowsでMySQL/Rubyを使おうとするとmysql.so (LoadError)

> では、Apache上ではなくてコマンドラインでrequireできますか?
> ruby -rmysql -e ''

「コマンドラインでrequire」というデバッグ方法もあるのですね。
この発想は無かった。

        ∧∧
       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄
     ̄

■_ なんじゃこれ?

見慣れない宛先からメールが届いたんだけど、 宛先がものすごい(笑) 適当に変形しますがこんな感じ。

  gnu-prog@
  rms@
  arnold@
  Ralf.Wildenhues@
  skasal@
  eliz@
 わしの@
  ajschorr@
  spcecdt@
  mmlpz@
  kasal@
  matthew@
  rankin@
  mwoehlke@
  vle@
  tleneis@
  eggert@
  mw_triad@
  ajschorr@
  kzak@
  jpazdziora@
  mwoehlke@
  Ralf.Wildenhues@
  ldv@
  swegener@
  bruno@
  eggert@
  tackett_galen@
  kito@
  jim@
  andrewsumner@
  haus@
  akim@
  arnold@
  mc@
  gazelle@
  eggert@
  eggert@

これを手当たり次第といわずになんと云うかw 自分のところにも来たのが疑問だけど、たぶん gawk の ChangeLog にアドレスが載っているからだろう。 せっかくだから晒してやる。えいッ(笑)

文中の差出人のアドレスもごにょごにょしてあるのでよろしく。

Hi,

The simple script done mostly same as  gawk with creating numeric & string
variables. The numeric  variables has  arithmetic operations of +,-,*,/ . It
has print statement which dump the all the variables in the hash. This is
small work done as a hobby. Just  to show my interest  I read the GAWK
3.1.6 source code and created the script.

My  body, mind, heart, soul  wants to do even small work to the GNU
software if possible on GAWK.  Any one give me chance to do it, once again I
have to god and you.   Now I am  Senior Web Developer in  PHP.  

I am ready to do any bug fixing  in any of the GNU software , I have
knowledge on C , GAWK, PHP, bash shell programming. But I don't know  where
to start, please any one guide me. 

File list

1.       Input Source File=> input.txt 

2.       Header file =>calc.h

3.       Bison file => calc.y

4.       build.sh

Running program

Sh build.sh

Personal Mail id :  dml2ZWthbmFuZGFuOEB5YWhvby5jb20=, dml2ZWthbmFuZGFuOEBnbWFpbC5jb20=

If this mail disturbs any one, really  my heart fades down & god wish you. 

Regards,

Vivekanandan.


ツッコミどころはまだあって、メールにはソースコード一式のアーカイブが添付されているんだけど なんと、 「RAR形式」です。 誰が開けるんだこんなのw (や、自分はちょっと前にただで配られたときにサービスアカウント登録してるんでできますが 基本的にはこれってWindows上で動くプロプラなアーカイバで、圧縮方式も オープンにはなってないんじゃなかったかと)

で、改めてメールの本文を読んでみると、

My  body, mind, heart, soul  wants to do even small work to the GNU software if possible on GAWK.

自分を売り込んでるのか? まあ意気込みはわからんでもないが、

X-Priority: 1 (Highest)
X-MSMail-Priority: High
X-Mailer: Microsoft Office Outlook 12.0
Content-Language: en-us
Importance: High

rmsを宛先に入れといてこれはないと思うがな(^^;

あと、アーカイブされていたプログラム(yacc使ってる低機能電卓?)も見たけど あれじゃあ逆効果だなw 自分の腕を見せるつもりで実力のなさを露呈している(^^; まあしばらくは技術向上のために努力しておくれ。

■_

Ruby 1.8.7とRuby on Rails 2.0.2の組み合わせは、問題が発生する (山本隆の開発日誌)
マイナーバージョンアップなのに、この互換性の低さ。
Rubyの面目躍如でしょうか。

2008年06月12日

■_

スティグリッツ先生の入門経済学。 近くの公立図書館にあったのでそこで借りてみた。 のはいいが、2週間の貸出期限で読みきれそうになかったりw

以前にもその図書館に登録していたのだけどなんやかんやで足が遠のいていて 実際に本を借りたのは十数年ぶりだった。 ということで以前の貸し出し券はめでたく期限切れ(2年だか3年で切れるらしい)ということで 新しく作り直す。

その際に「パスワードを登録すればネットで検索した後そのまま予約もできますよ」 とか云われる。まあweb使って検索してその図書館に行ったので知ってたんですけどw とはいえ無碍に「僕は知ってたな」な反応をするのはあまりといえばあまりな話なので 適当に知らない振りして話を合わせてたのですが、 わたしがほぼ一貫して「インターネットで」という表現を使っていたのに対して 職員さんの方は「ネットで」と言う表現をお使い。 …ふつー逆じゃねーか?(笑)

■_ ぶはははは

よくできてるw → http://www.flickr.com/photos/hobbified/668680956/ TransformedPlanet

ネタ元は use Perl

■_ PCがきどうするまで

How Computers Boot Up : Gustavo Duarte

メモリマップのあたりスゲー複雑(笑) まあリアルモードを未だに引きずってりゃあ仕方がないか。

■_ スピードを比較する(Rubyの式展開とか文字列連結とか)

Hack to Learn : Ruby Performance :: Use Double Quotes vs. Single Quotes

Hack to Learn : Ruby Performance :: Use Double Quotes vs. Single Quotes
require 'profilings'
include PeepcodeProfiler

MAX = 900000

###
# Quoted Strings
###

time_this("Single Quotes (append):") {
  x = ''
  (0..MAX).each do |i|
    x = 'This is a test ' << i.to_s
  end
}


Timings for Single Quotes (append):
Thread ID: 218880
Total: 11.150243

 %self     total     self     wait    child    calls  name
 58.47     11.15     6.52     0.00     4.63        1  Range#each (ruby_runtime:0}
 20.99      2.34     2.34     0.00     0.00   900001  String#<< (ruby_runtime:0}
 20.55      2.29     2.29     0.00     0.00   900001  Fixnum#to_s (ruby_runtime:0}
  0.00      0.00     0.00     0.00     0.00        1  <Class::Object>#allocate (ruby_runtime:0}
  0.00     11.15     0.00     0.00    11.15        0  PeepcodeProfiler#time_this (./profilings.rb:8}

time_this("Double Quotes (append):") {
  x = ""
  (0..MAX).each do |i|
    x = "This is a test #{i}"
  end
}

Timings for Double Quotes (append):
Thread ID: 218880
Total: 7.385500

 %self     total     self     wait    child    calls  name
 66.64      7.39     4.92     0.00     2.46        1  Range#each (ruby_runtime:0}
 33.36      2.46     2.46     0.00     0.00   900001  Fixnum#to_s (ruby_runtime:0}
  0.00      0.00     0.00     0.00     0.00        1  <Class::Object>#allocate (ruby_runtime:0}
  0.00      7.39     0.00     0.00     7.39        0  PeepcodeProfiler#time_this (./profilings.rb:8}

Even more interesting, is how the string substitution barely blinks when it is in the 
middle of the string vs. at the end. To get the same effect using 2 appends with 
single-quoted strings, takes twice as long as double-quoted strings with substitution 
in the middle:

 Very slow
# BEGIN single_quotes_middle
time_this("Single Quotes: (in middle)") {
  x = ''
  (0..MAX).each do |i|
    x = 'This is a test ' << i.to_s << 'x'
  end
}
# END single_quotes_middle

Timings for Single Quotes: (in middle)
Thread ID: 218880
Total: 15.146328

 %self     total     self     wait    child    calls  name
 56.51     15.15     8.56     0.00     6.59        1  Range#each (ruby_runtime:0}
 28.00      4.24     4.24     0.00     0.00  1800002  String#<< (ruby_runtime:0}
 15.49      2.35     2.35     0.00     0.00   900001  Fixnum#to_s (ruby_runtime:0}
  0.00      0.00     0.00     0.00     0.00        1  <Class::Object>#allocate (ruby_runtime:0}
  0.00     15.15     0.00     0.00    15.15        0  PeepcodeProfiler#time_this (./profilings.rb:8}

# BEGIN double_quotes_middle
time_this("Double Quotes (in middle):") {
  x = ""
  (0..MAX).each do |i|
    x = "This is a test #{i}x"
  end
}
# END double_quotes_middle

Timings for Double Quotes (in middle):
Thread ID: 218880
Total: 7.410465

 %self     total     self     wait    child    calls  name
 65.51      7.41     4.85     0.00     2.56        1  Range#each (ruby_runtime:0}
 34.49      2.56     2.56     0.00     0.00   900001  Fixnum#to_s (ruby_runtime:0}
  0.00      0.00     0.00     0.00     0.00        1  <Class::Object>#allocate (ruby_runtime:0}
  0.00      7.41     0.00     0.00     7.41        0  PeepcodeProfiler#time_this (./profilings.rb:8}

ダブルクォートの中で式展開を使ったほうが、文字列を連結するより早いというのは 後者が文字列オブジェクトを三個作ってまとめるから。かなあ?

Parrot上で動くコンパイラをつくる

なんか続きがでたw

Parrot: Implementing the 'return' statement in Squaak

Implementing the 'return' statement in Squaak
Squaak に 'return'文を実装する


Recently, Patrick Michaud made first steps to extend the Parrot Abstract Syntax Tree 
(PAST) to handle return statements. In this short report, I'll show how to implement a 
return statement in Squaak, the PCT tutorial language we created earlier. First, 
however, we'll have a quick review of why implementing 'return' is not straightforward. 
Parrot has these fancy calling conventions, right? So why not just use the .return 
directive?

つい最近、Patrick Michaud が
Parrot Abstract Syntax Tree (PAST Parrot抽象構文木)が return 文を扱えるようにする
拡張の最初のステップを踏みました。
この短いリポートでは、わたしがどのように
(以前わたしたちが作ったPCTのチュートリアル言語である)Squaak
にreturn文を実装するかについてお見せします。
とはいえまず初めはなぜ 'return'の実装が straightfoward に行かないのかについて
簡単に考察してみましょう。Parrotは fancy な呼び出し規約を持っています。いいですか?
ではなぜ、ただ単に .return ディレクティブを使うということをしないのでしょうか?

The reason for this is that the PCT implements blocks (or scopes) as PIR subroutines. 
Consider the following Squaak code snippet:

その理由は、PCTではブロック(とスコープ)をPIRサブルーチンとして実装しているからです。
以下のような Squaakによるコード片があったとしましょう:

    sub foo() 
      do
         do
           return 42
         end
      end
    end

The subroutine foo translates to three different blocks, or scopes: one for each 
do-end pair, and one for the subroutine itself. Each block is represented by a PIR 
subroutine, which are nested (using the PIR :outer flag, if you were curious). I'll 
not go into details, because I'm sure this will be explained in more detail by others 
later on, but I just want to explain the basics here. When a .return directive is 
executed by Parrot, it will return to the calling subroutine. As the foo subroutine 
above consists of three subroutines, the return statement above will return to its 
outer block (which invokes its nested block), and not to the caller of the foo 
subroutine.

このサブルーチン foo は三つの別々のブロックもしくはスコープに変換されます。
一つが do-end のペア。もう一つがサブルーチン自体。
各ブロックはネストしているPIRサブルーチンによって表現されます
(using the PIR :outer flag)。

.return ディレクティブがParrotによって実行されたとき、それによって呼び出しもとの
サブルーチンへと復帰します。上述のサブルーチン foo  は三つのサブルーチンから構成
されていて、return文はその文を囲む外側のブロック(ネストしたブロックを起動したもの)
へ復帰するのであって、fooを呼び出したところに返るのではありません。


Instead of using the .return directive, Parrot will use the exceptions subsystem to 
implement control constructs such as return statements. Now, as I predicted before, 
I'm sure someone will explain all this in much more detail, but for now, we just want 
to get an idea how to actually use all this and implement a return statement. So let's 
not talk any longer, and look at how to do this.

Parrot は .return ディレクティブを使うのではなく、例外サブシステム(exceptions subsystems)
をreturn文のような制御構造の実装のために使用します。ここで、先に説明したように
わたしたちは実際にどのようにこれらを使ってreturn文を実装するという考え方を知りたいだけですから
長々と書くことは止めてどのようにするかを実際に見ていきましょう。


First, we should extend the grammar of Squaak. As the return statement is a statement, 
add an alternative to the statement rule, like so:

まず始めに、Squaakの文法を拡張した方が良いでしょう。
return 文を文の一つとし、statement rule に以下のような変更を加えます:

    rule statement {
       ...
       | <return_statement> {*}  #= return_statement
    }

    rule return_statement {
       'return' <expression>
       {*}
    }

In order to allow for syntax like "x = foo()", we need to extend the rule 
for term. Note that sub_call should come before primary. (Once Longest Token Matching 
is implemented, this is no longer necessary).

"x = foo()" のような構文を許すために、わたし達は
termに対するルールを拡張する必要があります。
ここで、primary よりもさきに sub_call が来ていなければならにことに
十分注意してください。

    rule term {
       ...
       | <sub_call>   #= sub_call
       | <primary>    #= primary
       ...
    }

Now, that was easy huh? Let's look at the actions. The action method for statement 
will just dispatch to the action method in the key specified after #=.

ほら、とても簡単でしょう?
アクション部分を見てみてください。
文にアクションメソッドは

    method return_statement($/) {
        my $expr := $( %SEL_HTMLIFIED%lt;expression> );
        make PAST::Op.new( $expr,
                           :pasttype('return'),
                           :node($/) );
    }

If you read the PCT tutorial, this code should be easy to read. First, we get the 
result object for the expression. Then we create a new PAST::Op node, this time of the 
new pasttype 'return'. Now, you might think this is all, but not quite. We have to 
specify that the block representing the subroutine is doing the actual returning.
This is done using the following line of code in the action method for sub_definition:

あなたがPCTのチュートリアルを読んでいれば、このコードは読みやすいでしょう。
まず式に対応する結果オブジェクトを得ます。
それから新しい PAST::Opノードを生成します。そしてこのときの実体は
新しい pasttypeである 'return'になっています。
さて、あなたはこれですべて完了したと思うかもしれませんが、そうではありません。
わたしたちはここで実際に復帰を行うところのものであるブロックを特定する必要があります。
この作業は sub_definition のためのアクションメソッドで使われる以下のコードを使って
行われます。


    $past.control('return_pir');

So, now we have implemented the return statement in Squaak, let's see what happens. 
Rebuild Squaak, and start the Squaak interpreter in interactive mode:

さてこれでreturn文が実装されたSquaakができました。
何が起きるか実行してみましょう。
Squaakを再ビルドしてから対話モードでSquaakインタープリターを起動します。

    $ ../../parrot squaak.pbc

Now type:
そしてこのようにタイプします

    sub main() return 42 end x = main() print(x)

You could also store this in a file, and then specify the file when running the Squaak 
compiler, but this is easier for now. After hitting return (no pun intended), you'll 
see:

あなたはこれをファイルに落とすこともできて、そのファイルをSquaakコンパイラが実行される
ときに指定することも可能ですが、今回はこのようにします。
入力してからリターンキーを押すと、
次のような結果が得られることでしょう。


    > 42

Isn't the Parrot Compiler Toolkit a fabulous tool?

Parrotコンパイラツールキットって fabulous なツールじゃないですか?

2ちゃんねるからネタ拾い(ム板限定)

なんか興味深い本が出版予定にあるらしい。 出版社がオーム社なので、Amazonさんにはまだ登録されていない?

Lisp Scheme Part22 [bbs2chreader]
544 デフォルトの名無しさん [sage] Date:2008/06/12(木) 21:41:28  ID: Be:
    来月「Practical Common Lisp」の訳書が出るっぽい
    http://www.bk1.jp/product/02997001 

545 デフォルトの名無しさん [sage] Date:2008/06/12(木) 21:47:48  ID: Be:
    >>544
    原著よりも安いのか。
    園城さんって、LispUser.netの人ですね。
【入門】Common Lisp その4【質問よろず】 [bbs2chreader]
886 デフォルトの名無しさん [sage] Date:2008/06/12(木) 22:14:13  ID: Be:
    http://www.bk1.jp/product/02997001

    Practical Common Lispの日本語版がとうとうでるみたいだね。原著の
    評判はかなりいいので楽しみですね。
    今は洋書の値段も上昇ぎみだって時だから、5000円って高価だけど
    和書のほうが易くすみそうですね。
    個人的には原著を持ってるのでかわないけど、訳が素晴らしければ
    おすすめできますよ。でもね。なまえをみてonjoさん(lispuse.netの中
    の人)でしょ。それなら予約しても大丈夫だと思う。 

887 デフォルトの名無しさん [sage] Date:2008/06/12(木) 22:17:02  ID: Be:
    訳者も出版社も勇気あるなあ
    モニタに向かってPDFで読むの好きじゃないから出たら買わせてもらうよ 

888 デフォルトの名無しさん [sage] Date:2008/06/12(木) 23:12:11  ID: Be:
    訳書のタイトルは『実用Common Lisp』になるのかな、と思ってたけど、違ってたか。 

889 デフォルトの名無しさん [sage] Date:2008/06/12(木) 23:23:41  ID: Be:
    表紙が心配だな 

890 デフォルトの名無しさん [sage] Date:2008/06/12(木) 23:31:58  ID: Be:
    まだ翻訳作業中?らしいんだが来月ってマジか? 

891 デフォルトの名無しさん [sage] Date:2008/06/12(木) 23:43:13  ID: Be:
    Schemeと違って教科書採用もあてにできないし、数がでないから高いんだろうな…。

892 デフォルトの名無しさん [sage] Date:2008/06/12(木) 23:49:45  ID: Be:
    サイズは書いてないけど、原書の太さを考えるとそこそこの太さになるんじゃないか? 

893 デフォルトの名無しさん [sage] Date:2008/06/13(金) 00:45:05  ID: Be:
    原書が昨日届いたばかりだ。
Lisp Scheme Part22 [bbs2chreader]

493 デフォルトの名無しさん [] Date:2008/06/12(木) 01:55:43  ID: Be:
    scheme初心者なんだけどほんとに再帰って難しい
    入門書読んでて再帰の便利さはなんとなく伝わったけど・・・

    やっぱ上級者になると普通に使えるんですよね
    俺ってやっぱりダメな子・・・

             |        |/(-_-)\|
              |        |  ∩ ∩   |
              |           ̄ ̄ ̄ ̄ ̄
            :::, ―――、
           ::::/./^^^^^^'vl
         :::::::| | /  \ ||
          :::::::(sl rェ , rェ |') ウツダ
          :::::゙ゝ、 -  ノ
         :::::/ l  ̄ ̄lヽ
         :::::|-|/l⌒l⌒l-|
         :::::\二、_)二ノ _____________
          :::::|||  |:|  |
          /`ー(⌒)(⌒)
         /;;;;;;;;;;;;;;;; ̄;;;;; ̄
       /
     /

494 デフォルトの名無しさん [sage] Date:2008/06/12(木) 02:10:18  ID: Be:
    >493
    昔むかし、Pascalの授業の宿題で再帰を使わないと事実上解けない問題を
    「再帰呼び出しと言うものを全く知らずに」何とか解こうと悪戦苦闘した
    俺よりはマシw。 

495 デフォルトの名無しさん [sage] Date:2008/06/12(木) 02:14:54  ID: Be:
    ちなみにその教科書にはその問題が記述されている箇所以前に
    再帰呼び出しを説明している部分がほとんど無かった。

    今なら考えられない教科書だと思う。 

496 デフォルトの名無しさん [sage] Date:2008/06/12(木) 02:19:25  ID: Be:
    極めて教育的な良い教科書だな 

497 デフォルトの名無しさん [sage] Date:2008/06/12(木) 02:22:45  ID: Be:
    一行一行その時の値がいくつになるか紙に書いてみたらわかると思う 

498 デフォルトの名無しさん [sage] Date:2008/06/12(木) 02:23:14  ID: Be:
    「再帰」という単語をほとんど使わずに
    それを記憶に焼き付けさせたのか 

499 デフォルトの名無しさん [sage] Date:2008/06/12(木) 02:32:13  ID: Be:
    さらにちなみに俺の場合(Pascalでの再帰の場合)は
    見かけ上、同じ名前の変数や関数でもシンタックス(戻り番地など)と
    共にスタック上に別もの扱いで次々と積まれて行く事が分かって
    ようやく納得が行ったよ。

    そこに気づくまでは訳が分からなかった。 

505 デフォルトの名無しさん [sage] Date:2008/06/12(木) 08:09:22  ID: Be:
    >>494 >>499
    Pascalの機能として知らなかったのなら話はわかるが、
    再帰の概念がわからなかったっていうのは・・・
    高校の数学をさぼってたと考えられる。 

516 デフォルトの名無しさん [sage] Date:2008/06/12(木) 13:17:31  ID: Be:
    >>493
    上級者になると、ていうより基礎中の基礎。
    ドラゴンボールで言えば舞空術。
    囲碁で言えばシチョウ。
    でもあのポール・グレアムでさえ
    プログラムを習いたての頃は反復アルゴリズムしか知らず
    再帰を使いたいなどと考えたことはなかったし
    (Ansi Common Lisp)
    19歳の時には
    「たぶんLispを学ぶべきなんだろう。しかしLispはあまりに異質に見える。」
    (Lispがそんなにすごいなら ---If Lisp Is So Great---)
    などと考えてたんだから
    頑張れ! 

519 デフォルトの名無しさん [sage] Date:2008/06/12(木) 13:34:59  ID: Be:
    >>493の書き込みを見て、ふと思った。
    再帰を見て、わざわざこんなことしなくても・・・と思ってしまう問題が多い。
    たまに再帰があって良かったなと思う程度。
    僕は、きっとLispに向いてない。


    ちなみに、ほとんどLispはできません。 

520 デフォルトの名無しさん [sage] Date:2008/06/12(木) 13:51:53  ID: Be:
    >>519だが、連投すまん。
    この質問に的確に答えてくれる人がいたら、
    みんなの(僕の)ためになるんじゃないかと思って。

    たとえば、再帰を使うめっちゃ初歩的な関数lengthがあるよね

    (defun length (lst)
    (if (null lst)
    0
    (+ 1 (length (cdr lst)))))

    再帰がわからない人って、読むときにlengthって関数の
    意味が知りたいのに(わかってないのに)、lengthを使われても
    わかるわけないじゃんってことじゃない? 

521 デフォルトの名無しさん [sage] Date:2008/06/12(木) 13:55:28  ID: Be:
    その辺について、ANSI Common Lispで言ってたね。
    以下、それを引用しているページから引用。

    初めのうちは再帰は理解するのが難しいと思う人が多い。
    難しいと思ってしまうのは、主に関数に対して誤ったメタファ(比喩)をあてはめていることによる。
    人々は関数をマシンの一種ととらえがちである。
    原料がパラメータで届き、ほかの関数に下請けに出して処理し、最後に完成品を組み立てて、
    返り値として出荷する。
    関数に対してこのメタファをもっていると、再帰は不可能ということになる。
    マシンがどうやって作業を自分自身に下請けに出すのか?
    動作中のマシンにはそんな余裕などないじゃないかと思ってしまうことになる。

    関数は進行しつつあるプロセスであると見る方が、メタファとしては適当であろう。
    再帰はプロセスの中では自然なものである。日常生活でも再帰的なプロセスをよく見る。
    たとえば、ヨーロッパ史における人口変化に関心をもっている歴史家を考えてみよう。
    資料を調べるプロセスは以下のようなものだろう。

    1. 1 つの資料を手に入れる
    2. 人口変化に関する情報を探す
    3. その資料がほかの役立ちそうな資料に言及していたら、ほかの資料を調べる

    このプロセスは理解しやすいものだが、第 3 ステップにより同じプロセスが何度か
    適用されることがあるので、再帰的なプロセスになっている。 

522 デフォルトの名無しさん [sage] Date:2008/06/12(木) 14:00:20  ID: Be:
    >>520
    なるほど、そういう風に悩むのか。

    まず、lengthの中のlengthが使われるのはnullでないときだけ、
    つまり () に対する length の値は length を使わずに 0 と決まっている。
    で、それ以外については length を使うわけだが、だんだん短くなっていつかは 0 が返る。

    という具合にステップバイステップで考えていくと判りやすいんじゃないかな。 

523 デフォルトの名無しさん [sage] Date:2008/06/12(木) 14:02:50  ID: Be:
    文系の奴は頭だけで理解しようとするからイカン
    グダグダ言ってないで手も動かせ

    そう言っていた数学の先生がいたとかいないとか
    The Little Schemerなんかもそのクチか 

524 デフォルトの名無しさん [sage] Date:2008/06/12(木) 14:05:57  ID: Be:
    でもまぁ実際には、理系にとっても「体感」というのは大事だよな。 

525 デフォルトの名無しさん [sage] Date:2008/06/12(木) 14:20:38  ID: Be:
    数学的直観って言葉があるくらいだからね。

    自分は数列、漸化式が得意で好きだったから、
    再帰は何も悩む所がなかった。

    実装手法もPコードですぐに理解できた。(東大ではありません>>501)
    浮動点による意味づけを知った時には、
    漸化式みたいでわくわくした。

526 デフォルトの名無しさん [sage] Date:2008/06/12(木) 14:43:07  ID: Be:
    >>521
    名文をありがとう。

    >>522
    う~ん、自分流に噛み砕くと、
    (1)停止することを確認
    (2)cdr部分を取って、空リストになるまでは1足し続ける(lengthの場合)
    ってことですかね。

    >>525
    うらやましい。 

527 デフォルトの名無しさん [sage] Date:2008/06/12(木) 15:00:29  ID: Be:
    部分問題に分けて、(car, cdr)
    部分問題毎に適切な処理、(1, length)
    部分問題の解を統合。(+)
    部分問題の収束地点の設定。(null, 0)

    分割統治法の一番極端な形、一要素とそれ以外に分ける。
    後は下請け(再帰的関数呼出し)に任せる 

528 デフォルトの名無しさん [sage] Date:2008/06/12(木) 16:27:08  ID: Be:
    いちいちcarとかcdrみたいな「処理」で取り出させるのが前時代的なんだよなー
    LISt Processorなのにパターンマッチが標準で無いってどういうことよ 

529 デフォルトの名無しさん [sage] Date:2008/06/12(木) 16:28:49  ID: Be:
    >>528
    簡単に作れるからでは? 

530 デフォルトの名無しさん [sage] Date:2008/06/12(木) 16:31:19  ID: Be:
    >>529
    簡単に作れるものほど言語が準備すべきだと俺は思う。
    そうでないと人によってそれぞれの実装ができてしまって
    言語の「中に」バベルの塔ができちゃうからね(実際Lispはそうなっちゃってるのでは?) 
Pythonのお勉強 Part 26

917 デフォルトの名無しさん [sage] Date:2008/06/12(木) 08:03:10  ID: Be:
    Rubyと比較してPythonが優れているのはどんなところでしょうか? 

918 デフォルトの名無しさん [sage] Date:2008/06/12(木) 08:14:37  ID: Be:
    ネイティブスレッド 

919 デフォルトの名無しさん [sage] Date:2008/06/12(木) 08:52:00  ID: Be:
    ドキュメント 

920 デフォルトの名無しさん [sage] Date:2008/06/12(木) 09:30:37  ID: Be:
    異教徒にも優しい 

921 デフォルトの名無しさん [sage] Date:2008/06/12(木) 09:42:00  ID: Be:
    書籍が多い

    ttp://www.amazon.co.jp/dp/4777513688/

922 デフォルトの名無しさん [sage] Date:2008/06/12(木) 11:07:22  ID: Be:
    「恥ぱい」だけに、恥の上塗り。 

923 デフォルトの名無しさん [] Date:2008/06/12(木) 11:13:24  ID: Be:
    Pythonの方がOSのネイティブの機能を使いやすいって思うんだけど
    それは単に俺がルビーでの扱い方に慣れて無いから? 

924 デフォルトの名無しさん [sage] Date:2008/06/12(木) 11:38:58  ID: Be:
    パッケージ名がエロ
    ttp://d.hatena.ne.jp/seiunsky/20080417/1208454191

925 デフォルトの名無しさん [sage] Date:2008/06/12(木) 12:56:19  ID: Be:
    ライブラリが揃っていること
    scipy,numpy等の数値計算周りが便利 

926 デフォルトの名無しさん [sage] Date:2008/06/12(木) 13:09:16  ID: Be:
    >>917
    PC初心者(英語圏の人)からプロまで扱えるように設計されている
    だまされたと思って、「初めてのPython」を買って、勉強するよろし 

927 デフォルトの名無しさん [sage] Date:2008/06/12(木) 13:42:08  ID: Be:
    >>917
    Rubyと違って、プログラミング言語だ。
    (Rubyはプログラミング言語っぽいオモチャ) 

928 デフォルトの名無しさん [sage] Date:2008/06/12(木) 13:46:36  ID: Be:
    >>927にGuidoも思わず苦笑 

929 デフォルトの名無しさん [sage] Date:2008/06/12(木) 13:50:41  ID: Be:
    >>928
    苦笑しながらGuidoはこう言った。
    Ruby is just a toy, indeed. 

930 デフォルトの名無しさん [sage] Date:2008/06/12(木) 14:07:18  ID: Be:
    糊言語として優秀 

933 デフォルトの名無しさん [sage] Date:2008/06/12(木) 17:21:39  ID: Be:
    やっぱり作者が痛くないという所が最大の違いだろうな 

934 デフォルトの名無しさん [sage] Date:2008/06/12(木) 17:32:45  ID: Be:
    Rubyの作者がイタいみたいなこと言うなよ。Matzに失礼だぞ。 

C++0x 3/a>

816 デフォルトの名無しさん [sage] Date:2008/06/11(水) 20:54:49  ID: Be:
    139 名前:デフォルトの名無しさん[sage] 投稿日:2008/06/11(水) 20:50:38
    どうでも良いが個人的にまつもと氏に0xに改善されても尚C++が問題外かどうかを訊ねたい。 

817 デフォルトの名無しさん [sage] Date:2008/06/11(水) 21:31:56  ID: Be:
    >>816
    もっとだめと言うに100万ペリカ

    ところで初心者向けと言えば、やっぱりテンプレート絡みの
    エラーメッセージがまともになるという1点においてコンセプトが
    一番簡単にアピールできる機能だと思う。
    コンセプト自体は、入門書で取り上げられるような内容ではないだろうけど。 

818 デフォルトの名無しさん [sage] Date:2008/06/12(木) 08:16:26  ID: Be:
    禿は0xむけに第4版出すんだろうか 

819 デフォルトの名無しさん [sage] Date:2008/06/12(木) 10:28:13  ID: Be:
    第4版よりD&\Eの第2版がほしい 

820 デフォルトの名無しさん [sage] Date:2008/06/12(木) 14:25:24  ID: Be:
    D&Eの続編書いて欲しいな。別の本で。
    >>693のGregorとか。
    一人で大幅な改訂してる暇はたぶんないだろ。
    WG21 papers、かなり名前出てくてるからな。 

825 デフォルトの名無しさん [sage] Date:2008/06/12(木) 18:01:42  ID: Be:
    >>824
    文脈的には>>821が美少女中学生だと思う

    TC++PLやD&Eの続編って書く予定ないのかな と思って禿のページ見に行ったら
    なんかいまC++の入門書書いてるみたいだね 

827 デフォルトの名無しさん [sage] Date:2008/06/12(木) 20:21:40  ID: Be:
    >>825
    おお、それは期待したい

mixiのC系某コミュ。

自分の読解力のなさを棚に上げておいて

あのぉ…reallocに関して書かれているページは色々とあったんですけど、 
NULLで初期化しておかないといけないという風なことを書いてある 
ページは見当たりませんでした。 

僕の見たページがあんまし良くなかったんでしょうね。

そこまで人のせいにしたいか。

2008年06月11日

■_

まあ後出しなら何でも云えるんで、 話百分の一ででも流してもらって結構なんですが MOONGIFT: » その正規表現で大丈夫?Mac OSX向けの正規表現チェッカー「Reggy」:オープンソースを毎日紹介 おんなじことやろうと考えてたよ○| ̄|_

Anotated Turing 到着。 読む暇ないけどなッ!w

■_ xxxxpy?

Big Sky :: pythonでコンソールが扱えるライブラリConsoleを試してみた

Big Sky :: pythonでコンソールが扱えるライブラリConsoleを試してみた
試しに作ってみた。以下ソース

Oppai.py

これはやっぱり   と読むのでしょうか?(笑)

Big Sky :: pythonでコンソールが扱えるライブラリConsoleを試してみた
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys, time, codecs
import Console

class Oppai:
  def __init__(self):
    self.nest = 1

  def __getattr__(self, name):
    if name == 'Oppai':
      self.nest += 1
      return self
    else:
      return self.__dict__[name]

  def __call__(self):
    aa = [u"""
    _  ∩
  ( ゜∀゜)彡 おっぱい!おっぱい!
  (  ⊂彡
   |   | 
   し ⌒J
""", u"""
    _  ∩
  ( ゜∀゜)彡 おっぱい!
  (    | 
   |   | 
   し ⌒J
""", u"""
    _  
  ( ゜∀゜)  おっぱい!
  (  ⊂彡
   |   | 
   し ⌒J
"""]

    c = Console.getconsole()
    c.title("Oppai")
    for n in range(self.nest * 4):
      c.page()
      oppai = aa[n % 4 in (0, 2) and (n % 4)/2+1 or 0]
      l = 0
      for line in oppai.split("\n"):
        c.text(0, l, line.encode("mbcs"))
        l += 1
      time.sleep((n % 4) in (0, 2) and 0.5 or 0.15)
Oppai = Oppai()

if __name__ == '__main__':
  Oppai.Oppai.Oppai.Oppai()
Windows Console Driver
Comment:

I experienced random crashes on WinXP/Py2.5 when using the publicly available releases. 
I think there is an error in the *_dealloc functions: //PyMem_DEL(self); should be 
PyObject_Del(self);

Posted by K (2007-05-05)

Comment:

In addition, you could make Console non-blocking by using the relevant macros, like: // console_get

Py_BEGIN_ALLOW_THREADS 
status = ReadConsoleInput(self->in, &event, 1, &count); 
Py_END_ALLOW_THREADS 
// console_getchar 
PyObject *result = NULL; 
Py_BEGIN_ALLOW_THREADS 
for (;;) { 
    status = ReadConsoleInput(self->in, &event, 1, &count);
    if (status &:& count == 1 && event.EventType == KEY_EVENT &&  event.Event.KeyEvent.bKeyDown) { 
        char* sym = keysym(event.Event.KeyEvent.wVirtualKeyCode); 
        if (sym && sym[0]) { 
            result = Py_BuildValue("s", sym);
            break; 
        } else { 
            result = Py_BuildValue( "c", event.Event.KeyEvent.uChar.AsciiChar );
             break; 
        } 
     } 
} 
Py_END_ALLOW_THREADS 
return result; 

I hope the code sections will come out allright :)

Vistaだとさらにまた手を入れなきゃならないんだろうか。

■_ わかんねー

gethostbyaddr(127.0.0.1な値)は問題ないのに gethostbyaddr(自分に割り当てられたアドレスな値)が失敗するのってなンで? telnet で同じアドレス、同じポートにアクセスすると問題ないんだよなあ。

■_ あれ?

http://www.saiani.net/article/100109779.html


『鉄腕バーディー DECODE』放送情報更新。主題歌アーティスト決定

●新作テレビアニメ『鉄腕バーディー DECODE』公式サイトにて、各局の放送日時を公開したほ
か、主題歌アーティストの情報を公開。

◇テレビアニメ放送情報◇
・テレ玉
 2008年7月4日(金)25:00?
・KBS京都
 2008年7月4日(金)25:30?
・サンテレビジョン
 2008年7月4日(金)26:10?
・tvk(テレビ神奈川)
 2008年7月4日(金)26:15?
・TOKYO MX
 2008年7月5日(土)22:30?
・BS11
 2008年7月5日(土)23:00?
・TVQ九州放送
 2008年7月7日(月)25:53?
・CBC(中部日本放送)
 2008年7月9日(水)26:15?
・チバテレビ
 2008年7月9日(水)26:30?
・アニマックス
 2008年7月14日(月)22:00?
 ※リピート放送あり
・北海道放送
 2008年7月23日(水)26:25?


わーい、tvkでの放送時間がマクロスFと被ってるよー○| ̄|_

■_ ふと気になって調べてみた

以前にもやったかな?

Yahoo!辞書 - しょうこうぐん【症候群】
しょうこうぐん[しやう―] 3 【症候群】
「しょうこうぐん」を大辞泉でも検索する

ある特定の疾患もしくは病的変化を基盤として出現する一群の身体・精神症状。原因の異なる疾
患が同一の症候群を現すことがある。シンドローム。
症候群とは - はてなダイアリー
病気。

身体にみられるようになった病的変化、症候(symptom)が多彩かつ纏まった状態で形成されみら
れる病的状態。シンドローム。

先天性のものや精神性のもの、化学物質、日常習慣による影響など発病原因は単独ないし複数で
いずれも多岐に渡る。

近年では特定の社会現象によって病的傾向をみせる人々の動向を指す接尾語に用いられることも
あり、医学的根拠の無いものや公称性が低いものが増加している。

まあそのなんといいますか、ソムリエ辺りとは違って(全くもって個人的主観) あまり目くじら立てる気はないんですが(「軽シン」とかあるしいw)、 それでも症候「群」でないのに「症候群」とつけるのはどーよ。という気はします。 某blogを見てふと思ったナリ。

そしてソムリエといえば。 もう何でもありでんなw → 星空の案内人 「星のソムリエ」広まる - ITmedia News

■_

まあそれでもまだ移る気はないけどねw

iPhone 3G、日本のモバイル業界を変えるか:CNET Japan オンラインパネルディスカッション - CNET Japan

Mac OSの次期版White Leopardは「新機能ゼロ」と公言する一方で、LLVMコンパイラの採用、ブ
ロック構文のサポートにより行儀の良い並列化を自動で行ってくれるGrand Central Dispatcher、
GPUを暗号などの汎用演算処理にも解放するOpenCLの採用など、テクノロジーフォーカスはむし
ろ先鋭化しており、「デベロッパを中心としたAppleの生態系が未来を作るのだ」という強い意
志を感じます。
元ソニー会長出井氏が語る~デジタル時代の日本進化論/Tech総研

例えば、ソフト系とメカ系は似ているんです。それに対して電気・電子系は違う。電気・電子系
は楽観的で、例えば、9回裏でも二死満塁で逆転ホームランを打って勝てると思っているタイプ
の人が多い。これはこれでいいんです。ただ、メカ系の考え方は違う。コツコツと積み上げない
とメカはできない。だから、9回裏2死満塁でホームランはないと思っている。そして電気・電
子系は、メカ系のそういうところをよくわかっているわけです。

 ではソフト系はどうかというと、メカ系に似ているんです。電気・電子系の人は、そこを理解
しているかどうか。バグが付きものだということも、わからないといけない。バグのないソフト
なんてないと、認めないといけない。でも、ソフト系のエンジニアに対して、従来型のマネジメ
ントをしてしまう電気・電子系の管理職が少なくないんです。スペックを決めるのは、電気・電
子系かソフト系か。ソフト系のエンジニアがレポートを出すのは、誰か。そういう細かいところ
が、実は明暗を分ける結果になっているのではないかと思う。

ある言語を「知っている」とは?

You don’t know that programming language

You don’t know that programming language Or maybe you do?
How about your favourite programming language? What does it take to say that one “knows” it?

michaelp asks:

    When exactly do you “know” a language?

There’s a gradient of choices to pick from.


1. You know of the language — “I hear they call it Java.”
   彼らがそれをJavaと呼んでいるのを聞いたことがある。

2. You’ve memorized the “hello world” program — <?php echo ‘Hello World’; ?>
   hello world がそらで書ける

3. You know something unique about the language — “Ruby has closures, but Java does not.”
   その言語の「ウリ」を知っている

4. You have all of the documentation memorized — because looking things up is much too slow.
   ドキュメントを丸暗記

5. And just to get to the other extreme, you wrote a compiler for the language… in 
   itself. (That’s actually not rare, and is termed bootstrapping.)
   その言語を使ってその言語のコンパイラを書いた。

So what does it take for a programming language to make it onto a resume? Apparently 
not much, if you are a student. “Know” is more like “know of”. Though perhaps that 
is fair enough. A lot of skills are transferable, and it’s quite easy to pick up on 
new languages with similar paradigms. I’ve done this myself before:

    Even though I had no experience with PHP or Oracle, I was fairly familiar with 
   Ruby and MySQL. My job offer relied on the claim that such web development is 
   logistically similar, having substituted Ruby documentation for PHP.

Dan agrees.

    I don’t think “knowing” a language is any where close to as important as 
    knowing the concepts of computer science and software engineering. Once you have a 
    good grasp of the basic and more advanced concepts, changing languages is trival and 
    becomes easier with the more experience you have.

So perhaps it would be more honest to focus on what really matters — algorithms, 
design patterns, etc. Memorizing the syntax / API will let one type out that bubble 
sort faster, though that arguably demonstrates the lack of knowledge that matters.

I recall the first drafts of my resume, as I’ve started out in co-op at University. I’
d list a dozen different programming languages that I knew of. Now I would probably 
list none. That is not to say that I have unlearned things over the years but, on the 
contrary, that it’s true that the more you know, the more you realize of how little 
you know in the grander scheme of things.

So, with a few exceptions, I don’t think one gets to “know” a programming language. 
I also think that this shouldn’t matter.

参考→ 2008/06/09 言語習得度合いゲージ (HiNa) - fetus Diary - fetus

リスト内包の内側(CPythonとPyPyとの相違)

PyPy Status Blog: List comprehension implementation details
Monday, June 9, 2008
List comprehension implementation details

List comprehensions are a nice feature in Python. They are, however, just syntactic 
sugar for for loops. E.g. the following list comprehension:

リスト内包はPythonのナイスな機能です。
とはいうものの、それは単なる for loop に対する構文糖(syntactic sugar)にすぎません。
つまるところ

def f(l):
    return [i ** 2 for i in l if i % 3 == 0]

is sugar for the following for loop:

このようなリスト内包を使った表記は次のようなfor ループに構文糖という砂糖を塗りたくった
ものなのです。

def f(l):
    result = []
    for i in l:
        if i % 3 == 0:
            result.append(i ** 2)
    return result

The interesting bit about this is that list comprehensions are actually implemented in 
almost exactly this way. If one disassembles the two functions above one gets sort of 
similar bytecode for both (apart from some details, like the fact that the append in 
the list comprehension is done with a special LIST_APPEND bytecode).

もし誰かがこれら二つの関数を逆アセンブルしたならば
同じようなバイトコード列が二つ得られることになるでしょう。
(リスト内包を使った方では、特殊なバイトコード LIST_APPENDを使っているものに
なっているのでちょっと違いますが)

Now, when doing this sort of expansion there are some classical problems: what name 
should the intermediate list get that is being built? (I said classical because this 
is indeed one of the problems of many macro systems). What CPython does is give the 
list the name _[1] (and _[2]... with nested list comprehensions). You can observe this 
behaviour with the following code:

このような拡張を行うときにはいくつかの classical problems が存在しています。
intermediate list (中間リスト?)が構築されるときにそれがどのような名前であるべきか。
わたしがここで 'classical' と書いたのは、この種の問題が
多くのマクロシステムが抱えている問題の一つだからです。


$ python
Python 2.5.2 (r252:60911, Apr 21 2008, 11:12:42)
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> [dir() for i in [0]][0]
['_[1]', '__builtins__', '__doc__', '__name__', 'i']
>>> [[dir() for i in [0]][0] for j in [0]][0]
['_[1]', '_[2]', '__builtins__', '__doc__', '__name__', 'i', 'j']

That is a sort of nice decision, since you can not reach that name by any 
"normal" means. Of course you can confuse yourself in funny ways if you want:

これは良い類の判断です。なぜなら、その名前に到達することが“通常の”意味では
できないのですから。無論、お望みとあらば funny なやり方で自分で自分を混乱させることも
できますけど。


>>> [locals()['_[1]'].extend([i, i + 1]) for i in range(10)]
[0, 1, None, 1, 2, None, 2, 3, None, 3, 4, None, 4, 5, None, 5, 6, None, 6, 7, None, 7, 8, None, 8, 9, None, 9, 10, None]

Now to the real reason why I am writing this blog post. PyPy's Python interpreter 
implements list comprehensions in more or less exactly the same way, with on tiny 
difference: the name of the variable:

さて、そろそろこのエントリで云うつもりだった本音に行きましょう。
PyPyによるPythonインタープリタはリスト内包を概ね上で述べたようなやり方と同様なやり方で
実装しています。本当にちょっとした違いはあるんですけどね。変数の名前で。

$ pypy-c-53594-generation-allworking
Python 2.4.1 (pypy 1.0.0 build 53594) on linux2
Type "help", "copyright", "credits" or "license" for more information.
``the globe is our pony, the cosmos our real horse''
>>>> [dir() for i in [0]][0]
['$list0', '__builtins__', '__doc__', '__name__', 'i']

Now, that shouldn't really matter for anybody, should it? Turns out it does. The 
following way too clever code is apparently used a lot:


次に挙げるコードはちょっと技巧に走りすぎですね

__all__ = [__name for __name in locals().keys() if not __name.startswith('_') '
               or __name == '_']

In PyPy this will give you a "$list0" in __all__, which will prevent the 
import of that module :-(. I guess I need to change the name to match CPython's.

PyPyでは、これはモジュールの importを阻害してしまう $list0 というものを __all__
に作ってしまいます :-(
CPythonのそれにマッチした名前に変更する必要があるんじゃないかとわたしは考えています。

Lesson learned: no detail is obscure enough to not have some code depending on it. 
Mostly problems on this level of obscurity are the things we are fixing in PyPy at the 
moment.


一つ前へ 2008年6月(上旬)
一つ後へ 2008年6月(下旬)

ホームへ


Copyright (C) 2008 KIMURA Koichi (木村浩一)
この文書の無断転載はご遠慮ください(リンクはご自由にどうぞ)。

メールの宛先はこちらkbk AT kt DOT rim DOT or DOT jp