ときどきの雑記帖 めぐりあい電脳空間編

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

一つ前へ 2010年4月(中旬)
一つ後へ 2010年5月(上旬)

ホームへ

2010年04月30日

■_

4月終わり。

■_ Perl 6

S05 だけは目ざとくチェックするw

http://use.perl.org/~chromatic/journal/40332?from=rss

The Perl 6 design team met by phone on 21 April 2010.
Larry, Allison, Patrick, Will, Jerry, and chromatic attended.

Larry:

   * been under the weather, so didn't get much done other than keeping up with questions
   * S05 now allows negative quantifier ranges on reversible patterns
   * S02 now defines the term now to return the current instant
   * like rand and self, it does not parse as a function, since it never takes arguments
   * we now specify what kinds of math are allowed on instants and durations
   * improved error message on attempt to use old-school backreferences in regexes
   * STD now implements the now term and several other time-related names
   * we now allow enum names to be "constant variables" so that a class enum can declare
     an accessor
   * thinking alot about a better unification of the semantics of protos
   * this may also solve the current ambiguity in the meaning of postfix parens
   * in any case, this is for post Rakudo *

  

えーと、negative quantier ? あ、いや on reversible patterns で negative quantifier ranges を受け付けるようになったと。

■_ 継承


【初心者歓迎】C/C++室 Ver.72【環境依存OK】
500 デフォルトの名無しさん [sage] 2010/04/25(日) 19:32:40  ID: Be:
    virtualメソッドに実行時コストがあるのは関数ポインタ経由してるから、とかるんですが
    virtual継承にも実行時コストがあるのはなぜ何ですか?
    コンパイル時に解決出来そうな気がするんですが 

502 デフォルトの名無しさん [sage] 2010/04/25(日) 23:07:04 ID: Be:
    >>500
    解決できそう?

    #include <iostream>
    #include <vector>
    class Animal {
      public: virtual void bark() { };
    };
    class Dog : public virtual Animal {
      public: virtual void bark() { std::cout << "bow wow" << std::endl; }
    };
    class Cat : public virtual Dog {
      public: virtual void bark() { std::cout << "meaow" << std::endl; }
    };
    int main() {
      std::vector<Animal*> animal;
      animal.push_back(new Dog());
      animal.push_back(new Cat());
      animal[0]->bark(); // Dog
      animal[1]->bark(); // Cat
    }

503 デフォルトの名無しさん [sage] 2010/04/26(月) 02:46:24 ID: Be:
    なにその猫こわい 

504 デフォルトの名無しさん [sage] 2010/04/26(月) 03:57:09 ID: Be:
    凡ミスがこんなに怖いとはw 

505 デフォルトの名無しさん [sage] 2010/04/26(月) 05:32:17 ID: Be:
    ワロタ     ww

506 デフォルトの名無しさん [sage] 2010/04/26(月) 05:56:15  ID: Be:
    違うよ全然違うよ凡ミスじゃないよ犬だってネコにもタチにもなりうるんだよ

    じゃなくて、virtual継承が仮想継承のことを言っていると見せかけて
    実は仮想関数のオーバーライドを指してるんじゃないかと思ったから
    両方入れてみたんだよ 

507 デフォルトの名無しさん [sage] 2010/04/26(月) 06:28:24 ID: Be:
    我が輩は猫であるが犬でもある。名前はまだ無い。 

508 デフォルトの名無しさん [sage] 2010/04/26(月) 07:50:34 ID: Be:
    >>502-503 の流れでワロタwwww

    >>506
    それはわかったけど、クラス名のチョイスがじわじわ来た 


509 デフォルトの名無しさん [sage] 2010/04/26(月) 09:32:24 ID: Be:
    今は亡き加藤和彦が木村カエラをボーカルに呼んで再結成したサディスティックミカバンドの歌で、
    「犬だってにゃぁ」とか「猫だってわん」とかって歌詞があるのを思い出した。 

510 デフォルトの名無しさん [sage] 2010/04/26(月) 09:41:18 ID: Be:
    今後クラスの継承の話する時このネタ使わせてもらうわw

511 デフォルトの名無しさん [sage] 2010/04/26(月) 14:55:14 ID: Be:
    class Animal {
    public: virtual void bark() = 0;
    };

犬のサブクラスな猫てw

■_ 顔文字?


プログラミング言語 Scala 3冊目

339 デフォルトの名無しさん [sage] 2010/04/29(木) 19:22:51 ID: Be:
    プログラミング初心者じゃないけど Scala は少しハードルが高く感じる
    関数型言語は Lisp とか Scheme とか使ってたんで抵抗は無いけど、
    それでも記法がちょっと独特で迷う 

340 デフォルトの名無しさん [sage] 2010/04/29(木) 20:06:48 ID: Be:
    はっきりいって文法がきもい 

341 デフォルトの名無しさん [sage] 2010/04/29(木) 21:44:17 ID: Be:
    まぁ素のJavaよりはマシだけどそれだけなんだよな 

344 デフォルトの名無しさん [sage] 2010/04/29(木) 22:59:08 ID: Be:
    >>340
    とりあえず、>>340は文法がきもくないと思う言語を挙げてみてくれ
    主観できもいとだけ言われても、どういう美的感覚持ってるのかがわからんと
    ピンと来ない 

347 デフォルトの名無しさん [sage] 2010/04/30(金) 15:00:21 ID: Be:
    >>344
    340ではないが、型を名前の後に置くこと(i:int, s:String) に馴染めない。
    これを int i, String s と書けるようにするだけで、だいぶ違うだろ。

348 デフォルトの名無しさん [sage] 2010/04/30(金) 15:33:34 ID: Be:
    IDE使うの大前提だと後置式のがいい。 

349 デフォルトの名無しさん [sage] 2010/04/30(金) 18:29:03 ID: Be:
    >>347
    それは、そうした方がJavaから移行したユーザが馴染みやすいって意味だよね
    それはその通りだと思う。

    ただ、Scalaの場合変数の型を省略できる、というか省略するのが普通なのでその点は
    考えなければいけないと思う。もし、Java式の型宣言にするなら、型を省略したときは、
    別途val x = 3とかvar x = 3みたいにしなければいけなくなって、構文的な整合性の観点
    からはあまり良くない。C#は型宣言を省略する場合はvarと書くという方式だけど、あれは
    後付けだから仕方ないのであって、新しく言語作るときにああするのはどうかねえ… 

350 デフォルトの名無しさん [sage] 2010/04/30(金) 18:39:09 ID: Be:
    構文的には後置のほうが混乱が少ないと思う
    それに関数型言語は後置にするのが多いからね
    まあ、慣れの問題だね 

351 デフォルトの名無しさん [sage] 2010/04/30(金) 20:21:44 ID: Be:
    慣れの問題と思うけど、単純に Scala のコードは読みにくい 

352 デフォルトの名無しさん [sage] 2010/04/30(金) 20:30:16 ID: Be:
    型が前置じゃなきゃ嫌だってのは、
    つまりC系統の言語しか触ってないってことだからね
    もっといろんな言語に触れたほうがいいと思うよ 

353 デフォルトの名無しさん [sage] 2010/04/30(金) 20:40:33 ID: Be:
    型情報を明示しないって思想だから後ろに来るのは当然だと思うけどな。

    つか、そうしないと文法的整合性が取りにくい 

354 デフォルトの名無しさん [sage] 2010/04/30(金) 21:20:47 ID: Be:
    C++も設計でscalaと同じ書き方を検討してたんだよ
    Cとの整合性をとって採用されなかったけど 

355 デフォルトの名無しさん [sage] 2010/04/30(金) 21:56:16 ID: Be:
    そしてObjectiv-Cみたいな意味不明なのができる 

356 デフォルトの名無しさん [sage] 2010/04/30(金) 22:51:07 ID: Be:
    前置にするとvarとvalの区別が面倒になる。Javaみたくfinalだらけになるのはイヤだ。 

357 デフォルトの名無しさん [sage] 2010/04/30(金) 23:18:53 ID: Be:
    Groovyがそんな感じだね。 

358 デフォルトの名無しさん [sage] 2010/04/30(金) 23:42:15 ID: Be:
    後ろ置きは、慣れの問題でなんとかなりそうな気がする。ていうか、慣れれば、結構好きかも。

    でも、アンダースコア _ は、どうかなあ。。。

    ( _ > _) とか書いていると、顔文字に見えてくるんだよね。 

確かに顔文字に見えるなw

■_ 本日の巡回から

■_ くらべてみよう

はじめに

F#(エフ・シャープ)は関数型プログラミング言語のための新しいプログラミング言語です。関数
型言語は、C#、Visual Basic、C++、Javaなどの手続き型言語(命令型言語ともいう)とは違って、
関数を記述することによってプログラムを作成します。たとえば、条件分岐を行うifや繰り返し
のforでさえ、F#では関数として評価できる式文です。

(略)


さらに、F#は、オブジェクト指向プログラミングの方法を取り入れています。関数型プログラミ
ングとオブジェクト指向プログラミングの両方の技術を利用できるということは、F#をマスター
するためには両方の概念と用語、そして、それらを結合する新しい概念とその用語を学ぶ必要が
あるということです。しかし、本書では「Hello, F#」を出力するための単純なプログラムから
始めて、徐々に高度な内容になるので、誰でも楽しく気楽にF#を学ぶことができます。

(略)


F#のプログラムは、F#インタープリターまたはCRL(Common Language Runtime)上で動作します。
また、F#プログラムは.NET Frameworkを完全に利用することができ、F#と.NET Framework上の他
の言語(Visual Basic、C#、C++など)のモジュールが混在したプログラムを作ることさえできま
す。このような理由から、実践的なF#のプログラミングは.NET Frameworkライブラリをいかに利
用するかである、ということもできます。実際、.NET Framworkライブラリまたは.NET 
Framework上の他の言語についての知識があればあるほど、F#を容易に学ぶことができるでしょ
う。しかし、他の言語について何も知らなくても、F#プログラミングを学習しながら、必要な
.NET Frameworkの知識を得ることもできます。

本書はF#の入門書です。本書を活用してF#プログラミングの世界を楽しんでください。そして、
本書でF#の基礎をマスターしたら、奥深いF#の世界にさらに踏み込んで行くとよいでしょう。

はじめに

Scala(スカラ)はオブジェクト指向と関数型プログラミングを結合した、比較的新しいプログラ
ミング言語です。2種類のプログラミング技術を結合しているので、Scalaを使うとプログラムを
簡潔に書くことができます。たとえば、他のプログラミング言語で書くと十数行になるコードを、
わずか数行で書くことができます。そのため、コードの入力(タイピング)の手間が減るだけでな
く、プログラムが短く読みやすくなることで間違いが紛れ込む可能性もそれだけ減り、結果とし
て楽にプログラミングできます。

オブジェクト指向と関数型プログラミングの両方を利用できるということは、Scalaをマスター
するためには両方の概念と用語、そして、それらを結合する新しい概念とその用語を学ぶ必要が
あるということです。しかし、本書では「Hello, Scala」を出力するための単純なプログラムか
らはじめて徐々に項dna内容になるので、誰でも気楽にScalaを学ぶことができます。

Scalaのプログラムは、ScalaインタープリターまたはJavaの仮想マシン(VM)上で動作します。
JavaのVM上で動作するコンパイルされたScalaプログラムはJavaのVMバイトコードです。また、
ScalaプログラムはJavaのクラスを利用することができ、ScalaとJavaのモジュールが混在したプ
ログラムを作ることさえできます。このような理由から、ScalaはJavaとの親和性が強調されま
す。実際、Scalaプログラミングを学習しながら、必要なJavaの知識を得ることもできます。本
書を使ってScalaを学ぶためには、Java以外のプログラミング言語の知識は不要ですが、知って
いて損はありません。特に、C#や最新のVisula Basicの知識は役に立つでしょう。

本書はScalaの入門書です。本書を活用してScalaプログラミングの世界を楽しんでください。そ
して、本書でScalaの基礎をマスターしたら、巻末に示した参考リソースなどを参照して、奥深
いScalaの世界にさらに踏み込んで行くとよいでしょう。

はたしてテンプレは存在するや否や?

2010年04月29日

■_

・ドヤ顔
最近になってよく目にする(耳にする)ような気がするんだけど、 なーんか聴きたくないというかなんというか。 ドヤ街とかはそれほど拒否反応ないんだけどね。

・今月の皇帝陛下
ちょっといい話(?)。でも、エジブト遠征のこれからを考えるとあのシェフ志望の彼はたぶん以下略

・コンビニDMZ
最終回でした。

ヴェネツィア史
Amazon.co.jp: ヴェネツィア史 (文庫クセジュ): クリスチャン ベック, Christian Bec, 仙北谷 茅戸: 本 これなんかが、「海の都の物語」では書かれていなかった部分を埋めてくれるのかなあ。

中世からルネッサンスにかけて繁栄したヴェネツィアは、今なお大勢の人々を魅了してやまな い町。その通史を1冊にまとめたお奨め本です。 歴代ドージェのリストが巻末に載っているの も親切で、われわれの理解を助けてくれます。 ただ、この叢書シリーズの性質上、興味深い史話や逸話の類をほとんど省略に付してあるので、 やや「面白さ」に欠けるのが玉に瑕というべきでしょうか。

ふみゅ。

■_ 違うんです

Leon Timmermans at blog.perls.org: Why Perl 6 is different

Why Perl 6 is different

By Leon Timmermans on April 20, 2010 1:54 PM

Let's be honest. Perl 5, Python, Ruby, they're almost the same. There are some 
differences, but when your compare them with C, Java, Haskell or some such they 
suddenly feel rather superficial. They suitable or unsuitable for pretty much the same 
tasks, occupying a niche that Perl pioneered: that of a high manipulexity and 
whipuptitude.

正直になりましょう。Perl 5、Python、Ruby、といった言語はほぼ同じものです。これらの間に
はいくつかの違いはありますが、それぞれを C や Java、Haskell と比較してみれば、それら同
士の違いは表面的なものに過ぎないと感じられることでしょう。Perl 5などの言語は、同じ 
task に対して suitable であったり逆に unsuitable であったりして、Perl が切り開いたニッ
チを占めています: that of a high manipulexity and whipuptitude.


They each operate at the same abstraction level. Even if a language is lacking a 
feature that the others have, it's easily implemented using other constructs. There 
are plenty of valid reasons to prefer one over the other (taste, library availability, 
programmer availability), but they all offer the same power. Perl 6 is going to change 
that.


仮にある言語でそのほかの言語が持っている何かが欠けていたとしても、そのようなものはその
言語の持つ別の構造を使って容易に実装できます。ある言語をほかのものよりも好む正当な理由
というものは少なからずあります(taste、ライブラリの availability、プログラマーの 
availability)。しかしそれらはすべて同じ power を offer しているのです。Perl 6 はそれを
変えようとしています。


Perl 6, like Perl 5, Ruby and Python steals a lot from other languages. As you may 
expect, it steals too many things to mention from Perl 5. It steals chained 
comparisons from Python, objects from Smalltalk (in particular Squeak's traits should 
be mentioned). It thankfully steals nothing from PHP.

Perl 6は、Perl 5、Ruby、Python などと同様に他の言語から多くのものを取り入れてきました。
あなたが expect するであろうように、Perl 6 では Perl 5 からは言及しきれないほど多くの
ものを、Python からは chained comparisons を、Smalltalk からはオブジェクト (とくに
Squeak の trait は mention すべきものです) を取り入れました。
It thankfully steals nothing from PHP.


It has been said that Ruby is Smalltalk with a perly syntax. Perl6 extends on that: 
Perl 6 is Lisp with a perly syntax.

Ruby は perl的な構文を持った Smalltalk であると言われてきました。では Perl 6 はどうな
のかというと、Perl 6 とは perl 的な構文を持った Lisp なのです。


Perl 5 is already more lispy than most outsiders realize, but Perl 6 takes that to a 
new level. It is built around a MOP and multimethods. Lists are quite important in it 
(though their semantics are more like Haskell than Lisp in being lazy). And it has 
macros.

Perl 5 の時点ですでに most outsiders realize よりも lisp 的になっていましたが、Perl 6
はそれを新しいレベルに引き上げました。It is built around a MOP and multimethods.
リストは非常に重要なものです (ただしそのセマンティクスは Lazyであると言う点で、Lisp の
それというよりは Haskell のそれに近いものです)。そしてマクロがあります。


Macros in Lisp are one of its most powerful features. It gives the programmer the 
power to mold Lisp into any shape he wants it. In Lisp macros are possible because its 
uniform syntax of trees of symbols. In Perl 6 macros are made possible by its key 
innovation. One of the feature it didn't steal from another language: rules and 
grammars.

Lisp のマクロは Lisp が持つ最も強力な機能の一つです。マクロはプログラマーに、Lisp を彼
が望む任意の形状に変形する力を与えます。Lispでは統一されたLisp 構文でのシンボルツリー
によってマクロが可能になっていますPerl 6ではその key innovation によってマクロが可能に
なりました。ほかの言語から拝借してきたものではない機能の一つである rules と grammars 
です。

Regular expressions is the most stolen feature from Perl among other languages. It's 
ironic that even Python, whose community is most critical about Perl's syntax, took 
its ugliest feature in essentially unmodified form. (For an overview of all that is 
wrong with it, see the introduction of Apocalypse 5). It's no coincidence that this 
part of the language has been redesigned from the ground up. In doing so, Larry 
profoundly changed the language. To quote A5:“Regular expressions are our servants or 
slaves”; in Perl 6 he emancipated rules and grammars to first class citizens.

正規表現は Perl からほかの言語に最も盗まれた機能です。皮肉なことに Perl の構文に関して
最も critical なコミュニティを持つ Python でさえPerl の ugliest feature を essentially 
unmodified form で取り込んだのです
(For an overview of all that is wrong with it, see the introduction of Apocalypse 5)。
言語のこの部分がその ground up から再設計されたということは no coincidence です。
それを行う際に、Larry は profoudly に言語を変更しました。

# coincidence 暗号、合致、偶然の一致、形式の一致

To quote A5:
“Regular expressions are our servants or slaves”;
in Perl 6 he emancipated rules and grammars to first class citizens.


Rules are like regexps, but also like methods/functions. Grammars are like classes for 
rules. This makes rules vastly more powerful. So powerful in fact that Perl 6's syntax 
itself is defined in rules and thus in Perl 6 itself.

rules は正規表現に似ていますが、メソッドや関数にも似ています。grammars は rules に対す
るクラスのようなもので、 rules をとても強力なものにします。事実とても強力なので、Perl 
6の構文それ自体がrules と Perl 6自身によって定義されているのです。


I can't overstate how profound I think that change is. I think it's no less profound 
than when Lisp made functions first class citizens. For the first time it will be 
possible to have all the metaprogramming power Lisp has without having to compromise 
on having syntax. Regardless of the success of Perl 6 (though obviously I do hope it 
will be successful), I predict that this feature will be its long term contribution to 
language design.

その変更がどれほど profound であるのかをわたしがどのように考えたのかをoverstate するこ
とはできません。Lisp が関数を first class citizens にしたときよりもprofound であるもの
はないと思っています。Perl 6では、初めて構文的な妥協の必要なしに Lisp の持つメタプログ
ラミングの力をえるのを可能にしました。Perl 6の成功とは無関係に(わたし自身は成功して欲
しいと願ってはいますが)、の機能が言語設計に対して long term contribution になるであろ
うとわたしは予測しています。

■_ バグハンター

巡回先で複数回目にしたので。 いやー、自分だったらこの手のバグの原因突き止められるか まったく自信がございません ○| ̄|_


Island Life - バグハンターg新部さん
バグハンターg新部さん

    『俺の名はg新部、宇宙一のバグハンターだ---ビットの宇宙を舞台にした、アドベンチャー
    ヒーロー物語』 

この間、g新部さんにGaucheのstrict aliasing違反のバグを 突き止めて頂いたのだが、その裏
では他にも色々すごいバグハンティングの エピソードがあったそうだ。

    * g新部、バグを追う旅 2010 

4番目のforkとthreadとキャッシュ絡みの話題はこちら。これはすごい。

    * http://permalink.gmane.org/gmane.linux.ports.parisc/2751 

印象だけで言うと、forkのメカニズムは当初はとてもうまいhackだったと思うけれど、 スレッ
ドが一般的になっちゃった今となっては色々forkが足を引っ張ってる 気がしないでもない。

自分以外の全スレッドを止めるシステムコール、みたいなのが あるといいのになあ、とも思う
けれど、プロセスから生きてるスレッドを 効率良く辿るのが面倒だったりするかな? 

このページに貼られていた書籍を見てうけました (星野之宣作品は大好きなので)。


melancholic afternoon
4月28日_
FSIJのg新部、バグを追う旅 2010に行ってきた.

packageのメンテナーは枯れてないマイナーな環境にも対応しないといかんので大変. 
"Threads and fork on machine with VIPT-WB cache"はマルチスレッドでforkしたと
き, メモリcacheを物理アドレスではなく仮想アドレスで管理するCPU(intelのは大丈夫)上のOS
が正しくcacheを破棄しないと非常によくわからないバグになるという話.

マルチスレッドでforkしたらあかんやろと思ったけどロギングのためにsystem()関数を呼んだだ
け(?)と言われるとやってしまいそうな気もする.

帰ってからマルチスレッドのプログラムでのforkはやめようとかマルチスレッドのプログラミン
グ(Sunのpdf)の「プロセスの生成時のforkの問題」を眺めて, やっぱり難しいと再認識した. 

大学時代、なぜ UNIX では子プロセスを起動するのに fork → exec という手順を踏むのかとか話したような記憶が。 あれ、お師匠様から聞いただっけかな。

■_ かいほう


Floating Log 29.4.2010
プログラミング Clojure

Stuart Halloway「プログラミング Clojure」オーム社(2010)。 ここ数日主に通勤時間に電車の
中で読んでいた。 つまり、一切動かしてみたりはしていないが、意外と面白い言語だと思った。 
ただ JVM に縛られているのはやっぱり感覚的にはすっきりしないものがある。

訳についてだが、一貫して「開放」を使っているのが気になった。 「ロック管理の悪夢から開
放された並行性」(p.1)とか「リソースの開放」(p.82)とか。 むしろどっちも「解放」が正しい
はずだ。 

あ、確かに。 この手の誤字には目ざといはずなのに気がつかなかった。 Shiro:ProgrammingClojure の正誤表にもないですね。

■_ 深読みすると面白いかもしれない

Rasmus Lerdorf - Wikiquote伝説のPHP作者「Rasmus Lerdorf」名言集を聞くと嫌PHP厨がファビョる からかな?


【Perl,PHP】LLバトルロワイヤル10【Ruby,Python】 
480 デフォルトの名無しさん [sage] 2010/04/29(木) 18:51:09 ID: Be:
    伝説のPHP作者「Rasmus Lerdorf」名言集を聞くと嫌PHP厨がファビョる
    ・今のPHPを作ったのは、何十人もの開発者ですよ。私は1人目の開発者だったに過ぎません。
    ・問題を解くのが好きなだけで、プログラミングは大嫌いです。
    ・いかにプログラミングを避けるかを考えていたら、コードを再利用するためのツールとしてPHPができました。
    ・PHPは、歯ブラシみたいなものですね。毎日使うものですけど、だから何でしょう?誰が歯ブラシの本なんて読みたがります?
    ・パーザを書くのは苦手です。本当にダメなんです。今でもね。
    ・PHPには「protected属性」も「仮想メソッド」もありますよ。情報学科の教官が「重要だ」っていうやつは何でもね。僕自身は、こんなものどうでもいいと思ってますけど。
    ・プログラミングを好む人がいるのは知ってますが、全く理解できないですね。
    ・僕はホンモノのプログラマではありませんから、やっつけ仕事ですよ。ホンモノのプログラマは、「動いてるように見えるけど、メモリリークだらけじゃないか。直す必要があるかもね」なんて言うでしょう?僕なら、10リクエストごとにApacheを再起動しますね。
    ・いえ、メモリリークはちゃんと気をつけてますよ。でも、プログラミングってほんとクソだなと思いますね。
    ・プログラミング言語を作るつもりはありませんでした。どうやって作るのかも知りませんし。論理的に必要だと思われるものを足していっただけなんです。
    ・僕の発言に怒ってる人がいるようですね。僕がプログラマとしてひどいのは認めますけど、でも、多分あなたたちよりマシだと思いますよ(笑)。 

481 デフォルトの名無しさん [sage] 2010/04/29(木) 18:57:33 ID: Be:
    これ、PerlでPHPを書いた人?
    それなら、わからんでもないし功績は認めるので、これくらいの事は言ってもいい 

482 デフォルトの名無しさん [sage] 2010/04/29(木) 19:25:41 ID: Be:
    ・PHPは、トイレットペーパーみたいなものですね。
    毎日うんこを拭うものですけど、だから何でしょう?
    誰がうんこの本なんて読みたがります?

483 デフォルトの名無しさん [sage] 2010/04/29(木) 19:31:48 ID: Be:
    ・PHPを好む人がいるのは知ってますが、全く理解できないですね。 

484 デフォルトの名無しさん [sage] 2010/04/29(木) 20:07:15 ID: Be:
    スレタイ言語は全部こんなもんだろ 

485 デフォルトの名無しさん [sage] 2010/04/29(木) 20:40:44 ID: Be:
    偉そうにしてかっこいいのはLisperのみ 

486 デフォルトの名無しさん [] 2010/04/29(木) 20:59:23 ID: Be:
    (e)

487 デフォルトの名無しさん [sage] 2010/04/29(木) 23:25:23 ID: Be:
    >>485
    確かにあの言語はクールだが、それにしてもカッコつけすぎだろ。 

488 デフォルトの名無しさん [sage] 2010/04/29(木) 23:32:12 ID: Be:
    それ、あんまりPHP褒めてないよな。
    PHPってRasmusが関わってた初期の頃は良かったと思うんだけど、PHP5くらいから妙にエンタープライジーになってセンス最悪になったと思う。
    Rasmusってウェブフレームワークとかも否定的なんだよな。そんなもの使う必要ないって。 

489 デフォルトの名無しさん [sage] 2010/04/29(木) 23:51:37 ID: Be:
    Pythonistこそ偉そうにして良い 

490 デフォルトの名無しさん [sage] 2010/04/29(木) 23:54:41 ID: Be:
    何でみんなPHPを馬鹿にするの(´;ω;`) 

491 デフォルトの名無しさん [sage] 2010/04/30(金) 00:02:36 ID: Be:
    素人がすぐに手を出せるのがPHPの弊害というのなら
    PHPなんかよりRailsで作られたRubyのプログラムの方が酷い場合が多いぜ 

492 デフォルトの名無しさん [sage] 2010/04/30(金) 00:04:48 ID: Be:
    別にどれでも素人がすぐ手を出せるだろ
    print "hello, world"
    とかで済むんだから 

493 デフォルトの名無しさん [sage] 2010/04/30(金) 00:20:44 ID: Be:
    エラーでも勝手にcontent-type: text/htmlを出してくれるってアイディアが最高 

■_ 本日の巡回から

2010年04月28日

■_

「やさしいF#入門」と「やさしいScala入門」の文章のどれくらいが 共通しているのか調べたくなってきたでござる。 まあ手間がかかりすぎるので実際にはやらんでしょうけど。

■_

thunk thunk thunk modad~♪ってのを思いついたけど 多分元ネタ誰もわからないなw

Thunks and Haskell | Ethan Fast

Thunks and Haskell (サンクと Haskell)

By Ethan | Published: April 4, 2010

I've been spending a bit of time this weekend playing with Haskell, and I came across 
an interesting problem while writing a few functions that, overtly, would seem quite 
simple. Notably, Haskell is a lazy language, storing promises of later evaluation in 
what are called thunks.

この週末、わたしは多少の時間を掛けてHaskellで遊んでいました。そして明らかに (overtly) 
単純と思える関数をいくつか書いているときに興味深い問題に遭遇したのですHaskell は明確に 
lazy な言語で、遅延評価の promises をサンク (thunks) と呼ばれるものに格納します。


Having some reasonable amount of experience in Clojure, lazy evaluation did not 
disconcert me. However, consider the following code:

Clojure での経験があったので、遅延評価はわたしを disconsert しませんでしたが
次のようなコードを見たとき:

foldl (+) 0 [0..5000000]

In a result that was initially somewhat surprising to me, running this produces a 
stack overflow. I later found out the reason; namely, all the thunk promises are being 
stored on the stack, building upon each other and taking up a great deal of space. 
Conceptually, it might look something like:

その結果、この手続きを実行するとスタックオーバーフローが起きたということはわたしを
驚かせるものだったのです。後になってからわたしはその理由を理解しました。
すべてのサンクの promises はスタックに格納され、building upon each other するので
結果として非常に大きな空間を使用します。

概念としては次のようなものです:

(...(((((0 + 1) + 2) + 3) + 4) + ...) + ... 5000000)

For something as simple as addition, it is far more efficient to force evaluation as 
foldl builds upon itself. In this specific case, Haskell has us covered with foldl' 
which is a strict version of fold. The following code runs just fine:

加算のように単純なものに対しては、foldl が自分自身を build するように評価を強制するの
は効率が良いとは言い難いものがあります。このような特殊なケースでは、Haskell は fold の 
strict version である foldl'によってわたしたちを cover しています。以下のコードは何の
問題もなく走ります:

foldl' (+) 0 [0..5000000]

One might think of is as executing something like this:

これは次のように実行されると考える人がいるかもしれません:

foldl' (+) 0 [1..5000000]
foldl' (+) 0 [1..5000000]
foldl' (+) 1 [2..5000000]
foldl' (+) 3 [3..5000000]
... (eventually)
foldl' (+) 12500002500000 []

Here, the expensive saving of thunks is unnecessary. To see how this might be possible, 
take a look at seq, a function which forces the evaluation of its first argument. All 
told, this served as a nice and innocuous reminder that I should be more careful with 
the implications of using a lazy language.

ここではサンクの expensive saving は不要です。これがどのように might be possilble にな
るのかを確認するためにその第一引数の評価を強制する関数である seq に注目してみましょう。
All told,
遅延評価を行う言語の implecations of using に
より注意深くなるべきだという nice で innocuous な reminder として
これは serve しました。

#要するに遅延評価でどうなるか予想がつきやすくなる?

One Comment

   1. Anonymous  Posted April 4, 2010 at 7:57 pm 

      Turn optimization on, the optimizer will remove the lazy thunk creation in this case
      and turn it into a loop.


Powered by WordPress. Built on the Thematic Theme Framework. Copyright 2009 by Ethan Fast

■_ ネタスレ

すぐに止まるかなー。 マ板なので書き込みが少なくても結構生き延びるかもしれないけど。


バグとテストと残業中 

1 仕様書無しさん [] 2010/04/21(水) 12:49:54 ID: Be:
    勢いで立てた。
    後悔はしていない。

2 仕様書無しさん [sage] 2010/04/21(水) 13:12:16 ID: Be:
    日付がかわるまでが定時です 

3 仕様書無しさん [sage] 2010/04/21(水) 17:39:05 ID: Be:
    >>1
    日本語でおk 

4 仕様書無しさん [] 2010/04/22(木) 01:01:03 ID: Be:
    略してバグテス

5 仕様書無しさん [sage] 2010/04/22(木) 01:36:35 ID: Be:
    IT業界の勤務時間は、9時5時です。

    ただし、朝9時~翌朝5時です。 

6 仕様書無しさん [] 2010/04/22(木) 01:42:35 ID: Be:
    >>5
    リアリティを感じるところが笑えない。 

7 仕様書無しさん [sage] 2010/04/22(木) 20:57:37 ID: Be:
    ネスカフェ エクセラ 

8 仕様書無しさん [] 2010/04/22(木) 23:32:15 ID: Be:
    ごくフツーにこの世に生まれ、
    ごくフツーの野球少年に育ち、
    ごくフツーの高校生になったおれ
    でも、ただひとつ違っていたのは・・・・
    おれさまは、

     プ ロ グ ラ マ

    だったのです。

9 仕様書無しさん [sage] 2010/04/23(金) 07:55:15 ID: Be:
    職場に姫路、美波、秀吉、ムッツリーニみたいなやつらが同僚としているなら、毎日が最高に楽しそう。
    そんなんだったら安月給でもいいなあ。 

10 仕様書無しさん [] 2010/04/23(金) 22:37:24 ID: Be:
    おJava女どれみ プログラマー猿 カウボーイ・デバッグ JAVAン
    人月を探して 超電磁ロボ コンパイラーVC++ パケットモンスター
    機動戦士GNUDAM エリア8KB 新言語Javaンゲリオン あらいぐまオラクル
    千と千尋のバグ隠し あずまんがI/O ゲットデバッカーズ デバッグNo.1
    Bugって仕様 人月姫 エスイー(SE)魔美 あしたの仕様ー 外注遣いに大切なこと
    ガンダムsed ガンダムOO(オブジェクト指向) ランダムSEED
    ガンパレード・デスマーチ ~新たなる行軍歌~ アルプスの少女High-C
    Cosmic DataBase COMMITさん☆ ARMs ハックしよう大魔王
    魁!プロパティ高校 超時空要塞マクロ 湾岸MID$RIGHT$
    ルパンSun製 グレートマシン語 逆襲のchar ウルトラマンZ80
    バグひな 戦え!超OS生命体TRONスフォーマー gccさくら
    キャプテンmalloc 金色のハッシュ! おねがいt_char typoしちゃうぞ
    フォートラーン戦記 Excelサーガ getcharロボ 焼きたて!!JAVAん
    データセンターあらし 忍者バグトリ君 ときめきメモリ枯渇 修羅のMON
    ゴルゴ1B(バイト) Rubyポップは笑わない ELFを狩るものたち 迷宮組込 

11 仕様書無しさん [] 2010/04/23(金) 23:33:29 ID: Be:
    >>9
    楽しいけど、間違いなく仕事はできないやつらだぞ

12 仕様書無しさん [] 2010/04/26(月) 22:08:51 ID: Be:
    >>10
    よく考えたな

逆襲の char w

■_ そんなにハードルイキナリ上がったっけ?

1はすぐ出てきたんだけど、2は行方不明だ(3はまだ買ってません)。


Rubyの入門書について | OKWave

Rubyの勉強を始めて2週間、いま、ある本でつまずいています。今使っている本は「Ruby2 さ
まざまなデータとプログラミング」という本を使っているのですが、この本の一巻はまだわかり
やすかったのですが、この本は急に説明が投げやりな感じがします。メソッドの説明で「自分で
調べてください」だの、問題の解説がほとんどないなど、非常に不親切な感じがします。3日か
けても1ページ進まないことなどざらで、自分にはこの本は早かったんだろうかと思い始めまし
た。一方で、ここで逃げてしまってはいけないという風にも思います。ちなみに、私のRubyに関
する知識は今使ってる本と、その一巻だけです。

そこで、質問です。特に「たのしいRuby」をやった時点でプログラム素人だった方に聞きたいの
ですが、「たのしいRuby」を一通りやるのにどのくらいの時間がかかりましたか?

また、「Ruby2さまざまなデータとプログラミング」をもっている方、この本は本当に初心者向
けなんでしょうか?

最後にこの質問を見てくれた皆様に質問です。短かいにもかかわらずわからないプログラムを見
て、数日も考え続けるのは時間の無駄でしょうか?それともみんな初めはこんなもんなんでしょ
うか?

■_ 本日の巡回から

■_

だめだ。寝る。

2010年04月27日

■_

・ReadItLater
SQLite によるデータベースを独自に持ってるみたいですね。 つーことは、sqlite3 コマンドとかでごにょれば URL 抜き出したりとかできるのかな。

・連休
4/30 も出勤ですがなにか。でもまあ今年は 5/1, 2 が土日にかかるからいいか。

■_ 本日の巡回から

■_

そういやここの容量辺りのお値段も…

http://homepage1.nifty.com/herumi/diary/1004.html#26

もう10年以上950円/月でniftyを使ってるけど昔からの会員のホームページサービスは上限20MBで
追加するなら300MBあたり525円/月. 新しいやつは100円/月で1GB. サービスが違うから直接は
比較できないけど, この不公平感はなんだろう.

■_ ブレイク♪ブレイク~♪

重宝するときもあるけど間違いの元だよなあこの仕様。 自分は引っかかった覚えはないんだけど(ただし、defalt はよくやったw)。

Why do we need break after case statements? - Stack Overflow

Why doesn't the compiler automatically put break statements after each code block in 
the switch? Is it for historical reasons? When would you want multiple code blocks to 
execute?


Sometimes it is helpful to have multiple cases associated with the same code block, such as

case 'A':
case 'B':
case 'C':
    doSomething();
    break;

case 'D':
case 'E':
    doSomethingElse();
    break;

etc. Just an example.

In my experience, usually it is bad style to "fall through" and have 
multiple blocks of code execute for one case, but there may be uses for it in some 
situations.

Historically, it's because the case was essentially defining a label, also known as 
the target point of a goto call. The switch statement and its associated cases really 
just represent a multiway branch with multiple potential entry points into a stream of 
code.

All that said, it has been noted a nearly infinite number of times that break is 
almost always the default behavior that you'd rather have at the end of every case.

I think it is a mistake. As a language construct it is just as easy to have break as 
the default and instead have a fallthrough keyword. Most of the code I have written 
and read has a break after every case.


    Why doesn't the compiler automatically put break statements after each code block 
    in the switch?

Leaving aside the good desire to be able to use the identical block for several cases 
(which could be special-cased)...

    Is it for historical reasons? When would you want multiple code blocks to execute?

It's mainly for compatibility with C, and is arguably an ancient hack from the days of 
old when goto keywords roamed the earth. It does enable some amazing things, of course, 
such as Duff's Device, but whether that's a point in its favor or against is… 
argumentative at best.


As far as the historical record goes, Tony Hoare invented the case statement in the 
1960s, during the "structured programming" revolution. Tony's case statement 
supported multiple labels per case and automatic exit with no stinking break 
statements. The requirement for an explicit break was something that came out of the 
BCPL/B/C line. Dennis Ritchie writes (in ACM HOPL-II):

    For example, the endcase that escapes from a BCPL switchon statement was not present
    in the language when we learned it in the 1960s, and so the overloading of the break
    keyword to escape from the B and C switch statement owes to divergent evolution
    rather than conscious change.

I haven't been able to find any historical writings about BCPL, but Ritchie's comment 
suggests that the break was more or less a historical accident. BCPL later fixed the 
problem, but perhaps Ritchie and Thompson were too busy inventing Unix to be bothered 
with such a detail :-)

あらー HOPL II は本買って読んだんだけどなあ。まったく記憶にない。

■_ でーじゃーぶー♪

自分でもやさしいScala入門も買っていたのですがすでに窓から投げ捨てていますので、 みずしまさんのところからお借りします。


『やさしいScala入門 平明な例と演習問題で学ぶ』の感想というかダメだし - Onion開発しつつ、PEGEXを開発する日記

「はじめに」には、次のようにある:

    (snip)

    オブジェクト指向と関数型プログラミングの両方を利用できるということは、Scalaをマスター
    するためには両方の概念と用語、そして、それらを結合する新しい概念とその用語を学ぶ必要が
    あるということです。しかし、本書では「Hello,Scala」を出力するための単純なプログラムか
    らはじめて徐々に高度な内容になるので、誰でも気楽にScalaを学ぶことができます。

    (snip)

で、F# のがこう。


さらに、F#は、オブジェクト指向プログラミングの方法を取り入れています。関数型プログラミ
ングとオブジェクト指向プログラミングの両方の技術を利用できるということは、F#をマスター
するためには両方の概念と用語、そして、それらを結合する新しい概念とその用語を学ぶ必要が
あるということです。しかし、本書では「Hello, F#」を出力するための単純なプログラムから
始めて、徐々に高度な内容になるので、誰でも楽しく気楽にF#を学ぶことができます。

  

もうひとつ。


『やさしいScala入門 平明な例と演習問題で学ぶ』の重箱の隅をつつく - Onion開発しつつ、PEGEXを開発する日記

犬の種類で継承を説明

p.107

    わかりやすい例で例えると、まず、「ワンと吠える四足の動物」を「犬クラス」として定義した
    ものとします。この「犬クラス」は、どんな種類の犬であるかという点が未確定の、定義がやや
    あいまいなクラスです。

間違いではないけど、いい加減この手のワンとかニャーで継承を説明するのは止めた方がいいん
ではないかと。わかってる人なら説明は要らないし、わからない人がこれでわかるようになると
も思えない。

第6章「クラスとオブジェクト」に以下のような一節があります(p.132)。


わかりやすい例で例えると、まず、「ワンと吠える四足の動物」を「犬クラス」として定義した
ものとします。この「犬クラス」は、どんな種類の犬であるかという点が未確定の、定義がやや
あいまいなクラスです。

  

どんぐらい共通部分があるのか調べてみたいが面倒だにゃーw

んで、間違いじゃないんだけど、tuple の読みを「とぅぷる」ってしているのは なにかコダワリがあるんでしょか。 日本語文献だと「たぷる」がほとんどだと思うんだけど。 how do you pronounce 'tuple'? How do you pronounce the word 'Tuple'? - Stack Overflow How do I pronounce tuple? 実は トゥープルのが優勢?

そうそう。これもありました。


整数と浮動小数点数との間や、32ビット IEEE754 単精度浮動小数点数から
64ビット倍精度浮動小数点数に変換されるときに、数値の内部表現に
限界があるために誤差が発生することがあります([4]、[5])。

  

…えーと。

そうそう。文末の [4] だの [5] だのは巻末の「参考リソース」に振られている 番号だと思うんですが、その参考リソースを見ると


[1] F#
    http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/default.aspx
[2] Scala スケーラブルプログラミング
[3]  Mono
     http://www.mono-project.com/
[4] .NET Framework クラスライブラリドキュメント
       http://msdn.microsoft.com/ja-jp/library/ms229335.aspx
[5] 即効解決!逆引きハンドブック Visual C#
  

[4] と [5] ?

2010年04月26日

■_

・ ガーリックラスク
以前は家の近くにあるコンビニにいけばいつもあったんですが、 最近はほとんど見かけることがありません。 あんま売れなかったのかしらん。 どこかで買えないかなあ。

・牛に対して琴を弾ず
本日のよつばとひめくりより。

・えーごのpodcat
なんかタイミングよく reddit で浮上していたので(昔のトピックみたいだけど) せっかくだから参考にさせてもらおう。

■_ いろいろ


http://stackoverflow.com/questions/1644/what-good-technology-podcasts-are-out-there

Yes, Podcasts, those nice little Audiobooks I can listen to on the way to work. With 
the current amount of Podcasts, it's like searching a needle in a haystack, except 
that the haystack happens to be the Internet and is filled with too many of these "Hot 
new Gadgets" stuff :(

Now, even though I am mainly a .NET developer nowadays, maybe anyone knows some good 
Podcasts from people regarding the whole software lifecycle? Unit Testing, Continous 
Integration, Documentation, Deployment...

So - what are you guys and gals listening to?

Please note that the categorizations are somewhat subjective and may not be 100% 
accurate as many podcasts cover several areas. Categorization is made against what is 
considered the "main" area.

以下略
How to Implement Perl 6 in Ten Years

Pugs: How to Implement Perl 6 in '10

RC 17 - Interview with Dave Thomas from Pragmatic Programmer | Rails Coach by Charles Max Wood

訳している余裕がなっしんぐだなあ。

■_

数日前に Dive into Python にケチつけた Zed が自分で入門書を書くとか。

Shedding Bikes: Programming Culture And Philosophy

An Attempt At A Book Teaching Beginner Python

I've had an idea for an introductory book on programming that follows the model of 
"trainer" books for learning a musical instrument. Most of these books are 
organized like this:

   1. There's a bunch of exercises.
      練習問題の集まりで
   2. Each exercise is 1 or 2 pages.
      課題はそれぞれ1ページから2ページくらいのもので
   3. There's only a little bit of prose.
        練習問題しかない?
   4. You do each exercise exactly, then move on.
      課題をきっちりやってから次へ

It's a simple concept, with the idea that a big part of music is learning to do things 
with your instrument, and that's best accomplished by fairly repetitive progressively 
difficult exercises.

There's a few books that do this for other languages, like the wonderful Little 
Schemer, Seasoned Scheme, Reasoned Schemer series. I think those books have the right 
idea, but again I didn't like the format.

http://www.amazon.com/gp/product/026256100X
http://www.amazon.com/gp/product/026256100X
http://www.amazon.com/gp/product/0262562146

Yesterday I finally started what I think might be this book. I'm calling it, 
"Learn Python The Hard Way" to sort of make fun of Learn Perl The Hard Way 
which actually is a hard way to learn a language (and pretty fun if you're a 
programmer). I figured the "hard way" to learn Python would be pretty easy.

Learn Python The Hard Way

This is already in the book, but the point of the book is not really to teach 
programming directly, but to do it "Karate Kid" style. At the most basic 
level people starting out need basic skills before they can even begin to understand 
what they're doing. The book will provide them with exercises they simply type in 
exactly and modify, whether they understand them or not.

In the spirit of being open and showing people the process not just the results, I'm 
releasing a quick PDF of the book with a few exercises in it and the general feel:

LearnPythonTheHardWay.pdf

I'm looking for the following from people:

   1. Any prose that reads poorly or doesn't make sense.
   2. Any comments on the approach.
   3. Any ideas for particular exercises of this style you think people need.
   4. Any feedback from people interested in programming who try the book, especially if they don't like it.

The book will be totally free and nobody will be allowed to make money on it. Probably 
some Creative Commons license. It's written using Sphinx so other Pythonistas can 
contribute and maintain it.

free で公開され、それを使った金儲けも良しと。

■_ 正規表現

あー、読めば納得だけど \b のこの動作は確かに勘違いされがちかも。

The Old New Thing : Why can't I get my regular expression pattern to match words that begin with %?
Welcome to MSDN Blogs Sign in | Join | Help

The Old New Thing

Why can't I get my regular expression pattern to match words that begin with %?

A customer asked for help writing a regular expression that, in the customer's words, 
matched the string %1 when it appeared as a standalone word.

Match	No match
%1	%1b
:%1:	x%1

One of the things that people often forget to do when asking a question is to describe 
the things that they tried and what the results were. This is important information to 
include, because it saves the people who try to answer the question from wasting their 
time repeating the things that you already tried.

Pattern	String	Result	Expected
\b%1\b	%1 	No match	Match
\b%1\b	:%1: 	No match	Match
\b%1\b	x%1 	Match	No match
^..$	%1 	Match	Match

That last entry was just to make sure that the test app was working, a valuable step 
when chasing a problem: First, make sure the problem is where you think it is. If the 
^..$ hadn't worked, then the problem would not have been with the regular expression 
but with some other part of the program.

"Is the \b operator broken?"

以下略


Published Friday, April 23, 2010 7:00 AM by oldnewthing

 
© 2010 Microsoft Corporation. All rights reserved. Terms of Use  |  Trademarks  |  Privacy Statement  
Page view tracker 

■_ Seven JavaScript Things I Wish I Knew Much Earlier In My Career

項目だけ紹介。 詳しい説明は元記事をどぞ。

Seven JavaScript Things I Wish I Knew Much Earlier In My Career - Smashing Magazine

Seven JavaScript Things I Wish I Knew Much Earlier In My Career

I've been writing JavaScript code for much longer than I care to remember. I am very 
excited about the language's recent success; it's good to be a part of that success 
story. I've written dozens of articles, book chapters and one full book on the matter, 
and yet I keep finding new things. Here are some of the “aha!” moments I've had in 
the past, which you can try out rather than waiting for them to come to you by chance.
Shortcut Notations

JSON As A Data Format

Native JavaScript Functions (Math, Array And String)

Event Delegation

Anonymous Functions And The Module Pattern

Allowing For Configuration

Interacting With The Back End

Browser-Specific Code Is A Waste Of Time. Use Libraries!

■_ coders at work

はやく日本語版でないかなー


briancarper.net :: Review: Coders at Work

Review: Coders at Work

Recently I received a preview copy of Peter Seibel's newest book, Coders at Work.

This is a wonderful book if you are a programmer and care at all about the art, craft, 
and/or science of programming. If there is any wisdom to be had in this fledgling 
field of ours, this book contains buckets of it.

あなたがプログラマーであり、そしてプログラミングというものの art, craft, and/or science
について関心があるのなら、これは素晴らしい本です。もし、わたしたちの分野 (field of 
ours) の駆け出し (fledgling: 青二才、未熟者) が持っているべきなんらかの wisdom (知恵)
というものがあるのなら、この本にはそういったものがたくさん収められています。

# art/craft/science を日本語にすると(特にart)、その訳語に引っ張られそうな
#気がする。のでそのまま。

The book consists entirely of long interviews with some big names in the world of 
programming: Donald Knuth, Ken Thompson, Jamie Zawinski, Guy Steele, Peter Norvig, the 
list goes on. There are also some names I wasn't quite so familiar with (but maybe 
should have been), like Brad Fitzpatrick, the inventor of Livejournal.

この本には Donald Knuth, Ken Thompson, Jamie Zawinski, Guy Steele, Peter Norvig を始め
とするプログラミング世界の big name たちへのロングインタビューが集められています。中に
は、inventor of Livejournal である Brad Fitzpatrick のようにわたしがほとんど知らなかっ
た (しかし知っておくべきであった) 名前もいくつかあります。


But everyone interviewed for the book has produced some grand, successful project in 
their time. These are tried-and-true, battle-tested programmers and in this book they 
share their war stories and advice.

しかしこの本でインタビューを受けているすべての人は彼らの全盛期に some grand で
successful なプロジェクトを produce しました。インタビューを受けた人たちは 
tried-and-true であり  battle-tested programmers であり、この本では彼らは自分たちの
war strories と advice とを共有しています。

# tried-and-true
# battle-tested programmers とかわからん


Questions and Answers (質問と回答)

There are a few questions that Seibel asked everyone, and it's interesting to compare 
and contrast the answers.

Seibel がすべての人に尋ねた幾つかの疑問があるのですが、それを回答と見比べると興味深いです。

    * How do you start learning to program? Perhaps because of the varying ages of the 
      interviewees, the answers range from punch cards to Perl scripts. Is a CS degree a 
      necessity, a boon, or a hindrance? Is a background in mathematics necessary? Very 
      different views depending who you ask.

      プログラミングのための学習をどのように始めたのですか? インタビューを受けた方々は様々
      な年齢ですから、おそらく答えの範囲もパンチカードから Perl スクリプトまでとても広いも
      のになるでしょう。コンピューター科学の学位は必要なもの (necessity) でしょうか? あるい
      は boon であったり邪魔者 (hindrance) でしょうか? 数学的なバックグラウンドは必要でしょ
      うか? あなたが誰に尋ねたかによって非常に異なった見解となるでしょう。


    * How does a person become an outstanding programmer? Is the ability to program 
      something you're born with or something you learn? This book has a lot to say on
      the topic, directly and indirectly. Knuth thinks that in any group of 100 people,
      "2 of them are programmers in the sense that they really resonate with the machine". 
      Fran Allen says that working on a farm helped her have a better understanding of
      large complex systems with inputs and outputs. Many stories point to people being 
      "naturals", e.g. Guy Steele learning APL from a couple brochures at an exhibit.
      But it's clear that years (or decades) of hard work and dedication are needed 
      too.

      ある人間が outstanding なプログラマーになるにはどのようにするのでしょうか? 何かを
      プログラムするという能力は、あなたが生まれつき持っていたものですか? それとも学んだ
      ものですか? この本にはこのトピックについての言及が、間接直接を問わずたくさんありま
      す。Knuth は100人のグループを考えたとき、“その中の二人が、実際に resonate with
      the machine (機械と共鳴?) するという意味においてプログラマーである”と考えています。
      Fran Allen は farm (農場?) で働くことは彼女が入出力を伴った大規模で複雑なシステムを
      より良く理解する助けになると言っています。多くのストーリーで people being "naturals"
      を point out していました。たとえば、Guy Steele は一つの証拠として couple brochuers
      から APL を学びました。しかし何年か、ひょっとしたら数十年もの hard work や dedication
      (専念、献身、やる気)も必要であることは明白です。

# Guy Steele learning APL from a couple brochures at an exhibit.
# よくわからん
# brouchures → パンフレット?
# at an exhibit この exhibit は?

    * If there's anything most of the coders have in common, it's starting at a young age
      and being rabidly enthusiastic. You get the impression that these guys (and gal) 
      love programming. It's not just a job, it's a passion. Many are the tales of 26-hour 
      coding sessions. Most of those interviewed say they still fiddle around with code in 
      their spare time, even those who have retired from professional programming (or burned 
      out on it entirely).

      もしこの本に載っている coder たちの大部分に共通している何かがあるとしたらそれは、
      若い時分に始めていて、なおかつ強烈なまでに熱心であった (begin rabidly enthusiastic)
      であったということでしょう。あなたはインタビューを受けたこれらの人々が(男女問わず)
      プログラミングが大好きなのだという印象を受けるでしょう。それは仕事 (job) ではなく、
      情熱 (passion) なのです。多くが 26-hour コーディングセッションの物語です。インタビュ
      ーのほとんどで、(インタビューを受けた人たちは) たとえプロフェッショナルプログラミン
      グからは引退していたとしても自分たちは今でも spare time にコーディングをしている
      と語っています (そうでない人たちは完全に燃え尽きてしまっていました)。

# 26-hour coding session って?

    * What tools do great programmers use? Which editors? Debuggers? IDEs? If this book is
      any indication, the answer is Emacs. Or in some cases, plain old pen and paper. There
      are a few representatives of the IDE side of the aisle, but mostly the tools are simple
      and the minds do most of the heavy lifting. (There's nary a mention of Vim. It breaks
      my heart a little.)

      偉大なプログラマーたちが使っているツールとはなんでしょうか? エディターは何を使ってい
      るのでしょうか? デバッガーは? IDEは?  もしこの本がなんらかの indication であるなら、
      その答えは Emacs です。あるいは、いくつかのケースでは plain old なペンと紙です。
      IDE のそばに幾つか代表されるものがあります。しかしそういったツールの大部分はシンプル
      であると同時に、do most of the heavy lifting が念頭におかれているものです。
      (There's nary a mention of Vim. It breaks my heart a little.)

#aisle 通路
# side of the aisle  通路の脇?

    * How do you go about debugging code? Print statements are (perhaps surprisingly?) 
      very popular among the greats in this book. There is much lamenting over the current 
      state of debuggers, which are, in the words of Brendan Eich, "pieces of shit
      from the '70s like GDB". One of the most common methods of debugging is just
      mentally stepping through code until you see a problem. Some of those interviewed
      share some of their horror stories of extremely difficult bugs to squash.

      コードのデバッグはどのように行いますか? print 文はこの本では(意外にも?) 非常にポピュ
      ラーな among the greats です。Brendan Eich の言葉を借りれば、"pieces of shit from the
      '70s like GDB" であるようなデバッガーの current state に対する多くの嘆きがあります。
      デバッグ手法の最も一般的なものの一つが、問題を理解できるまでコードを mentally にステ
      ップ実行 (stepping through) することです。一部のインタビューではつぶす (squash) のが
      とんでもなく困難 (extremely difficult) であったバグの恐怖の物語がいくつか語られました。

# lament over 嘆く

    * Is programming an art, a craft, a science, a kind of engineering, or something else?
      The answers are wide and varied; many seem to view it somewhere between an art 
      and a craft, but some have other views. L. Peter Deutsch muses that "coder" 
      is to software development what "bricklayer" is to constructing buildings.

      プログラミングとは art でしょうか? それとも craft でしょうか? あるいは science (科学)
      だとかある種の engineerging (工学) なのか、はたまたそれ以外の何かなのでしょうか?
      これに対する回答は非常に多岐にわたりました。その多くは art と craft の間に位置する何か
      という見方のようでしたが、一部の人は別の視点を持っていました。L. Peter Deutsch は
      “コーダー”とはソフトウェア開発において、ビルを建てるための“レンガ職人”(bricklayer)
      にあたるものと考えています (muses)


Programming today (今日のプログラミング)

A recurring theme in the book is the beauty of simplicity.

この本において頻出しているテーマ (recurring theme) は beauty of simplicity です。


Many people interviewed for this book did their best work decades ago, when computers 
were very different beasts. Programmers were constrained by the technology of the 
times, but perhaps because of those constraints, code had to be simple and 
straightforward, and there was an elegance in that simplicity that we've since lost.

この本のためにインタビューを受けた多くの人が何十年も前、コンピューターが非常に異質な野
獣 (very different beasts) であった時代にその best work を行いました。プログラマーはそ
の時代における技術によって制約を受けますが、そういった制約のためにコードはシンプルかつ
straightforward (わかりやすい、確実な) なものでなければなりませんでした。しかしその一方
で、わたしたちが今では失ってしまった単純さの中にある elegance というものがそこにはあっ
たのです。

As a young programmer who never experienced such an environment, I found it 
enlightening to hear the opinions of those who had. Seibel asked everyone what they 
thought of today's world, and the answer was often amazement combined with fear and 
dismay.

そういった制約つきの環境を全く経験したことのない若いプログラマーとしてわたしは その経
験をもっている人たちに意見を訊くべきであることに気づきました。Seible は彼らが今日の世
界 (today's world) をどのように考えているのか訊ねました。そしてその答えはしばしば恐怖
や不安、恐れの入り混じった驚き (often amazement combined with fear and dismay) でした

Quoth Guy Steele:

    I guess to me the biggest change is that nowadays you can't possibly know everything
    that's going on in the computer. There are things that are absolutely out of your
    control because it's impossible to know everything about all the software. Back in
    the '70s a computer had only 4,000 words of memory. It was possible to do a core dump
    and inspect every word to see if it was what you expected. It was reasonable to read
    the source listings of the operating system and see how that worked.

    わたしにとって最大の変化 (the biggest change) ではないかと思われることは、今日におい
    てあなたはコンピューター内部で起きているすべてのことを知ることは不可能だということで
    す。すべてのソフトウェアの何もかもを知ることは不可能なことで、あなたのコントロールか
    ら全く外れた事象が存在するのです。70年代のコンピューターはたった 4000ワードのメモリー
    しか持っていませんでした。あなたが望めばコアをダンプしてすべてのワードを検査すること
    だって可能でしたし、オペレーティングシステムのソースリストを読んでそれがどのように動
    作しているのが理解するのが合理的 (reasonable) だったのです。

Knuth has this to say:

    There's this overemphasis on reusable software where you never get to open up the box
    and see what's inside the box. It's nice to have these black boxes but, almost always,
    if you can look inside the box you can improve it and make it work better once you know
    what's inside the box.

    あなたがその箱を開けもしなければ箱の中にあるものを目にすることも決してない状況で、再利
    用可能なソフトウェアというものが強調されすぎています。こういったブラックボックスを持つ
    ことは良いことです。しかしほとんど常に、この箱の内側を見ることができれば改良を行えるで
    しょうし、箱の中に何があるのかを知ってしまえばその箱をよりよく働くようにできるでしょう。

Joe Armstrong, of Erlang fame:

    Also, I think today we're kind of overburdened by choice. I mean, I just had Fortran.
    I don't think we even had shell scripts. We just had batch files so you could run
    things, a compiler, and Fortran. And assembler possibly, if you really needed it. So
    there wasn't this agony of choice. Being a young programmer today must be awful--you
    can choose 20 different programming languages, dozens of framework and operating systems
    and you're paralyzed by choice. There was no paralysis of choice then. You just start
    doing it because the decision as to which language and things is just made--there's no
    thinking about what you should do, you just go and do it.

    Also, わたしたちは今日、 kind of overburdened by choice  にあるとわたしは思うのです。
    そうですね、わたしたちには Fortran だけがありました。さらにシェルスクリプトが使えたら
    どうだったろうかとはわたしは考えません。わたしたちにはバッチファイルがあったので、コン
    パイラーや Fortran といったなものを実行できました。そうそう、アセンブラも使えましたね。
    あなたが本当にそれを必要とすれば。ですが。ですからそこには現在あるような agony of choice
    (苦痛に満ちた選択?) というものは存在していなかったのです。今日若いプログラマーであると
    いうことは awful (いやな、ひどい)ことに違いありません。異なる 20個のプログラミング言語、
    数ダースのフレームワークやオペレーティングシステムから選択できますが、あなたは選択によ
    って麻痺させられます。There was no paralysis of choice then.
    あなたはそれをし始めるだけです。なぜなら、どの言語やその他諸々を選んだかということはただ
    単に、あなたがそうすべきと考えることなしに行動を起こさせるだけだからです。

#overburden 過度の負担になる、悩む
# 最後の二文はもーgdgd


And Bernie Cosell, one of the original programmers who worked on ARPANET:

    At one level I'm thinking, "This is way cool that you can do that." The other
    level, the programmer in me is saying, "Jesus, I'm glad that this wasn't around
    when I was a programmer." I could never have written all this code to do this
    stuff. How do these guys do that? There must be a generation of programmers way better
    than what I was when I was a programmer. I'm glad I can have a little bit of repute as
    having once been a good programmer without having to actually demonstrate it anymore,
    because I don't think I could.

    あるレベルでは、わたしは "This is way cool that you can do that."
    のように考えています。別のレベルの、わたしの中のプログラマーはこう言うのです。
    "Jesus, I'm glad that this wasn't around when I was a programmer."
    (ああ神様、わたしがプログラマーだったときにこんなものがそばになかったことを感謝します)
    わたしはこういったもの (this sutff) を行うためのコードを書くことは絶対にできなかったで
    しょう。こいつら (these guys) はどうやってるんでしょうか? わたしがかつてプログラマーで
    あったときのそれよりも better な a generation of programmers way がなければなりません。
    わたしは自分が一度得た優れたプログラマー (good programmer) というちょっとした名声 (a
    little bit of repute) を、もう実際に demostrate することをせずとも保っていることを喜ば
    しく思います。なぜなら、自分がそれを demostrate できるとは思っていないからです。


Dealing with the ever-increasing complexity of computers today is something we all 
struggle with. We're endlessly re-inventing wheels in this field; everyone knows it. 
Getting back to the basics is a very appealing sentiment.

複雑さを増す一方である今日のコンピューターを扱うことは、わたしたちみなが取り組んでいる 
(struggle with) ものです。誰もが知っているように、この分野においてわたしたちは終わるこ
となく車輪の再発明を行っています。基本に戻るということは sentiment (心情、意見、感傷)
を非常にアピールするものなのです。


Quotes

The questions and answers in this book are brutally honest and buzzword-free, which is 
refreshing. It's enlightening and at times giggle-worthy. There's a kind of snark that 
only a disgruntled computer programmer can produce.

L. Peter Deutsch:

    [M]y description of Perl is something that looks like it came out of the wrong end 
    of a dog.


Peter Norvig:

    After college I worked for two years, for a software company in Cambridge. And after
    two years I said, "It took me four years to get sick of school and only two years
    to get sick of work, maybe I like school twice as much."


Guy Steele:

    If I could change one thing -- this is going to sound stupid -- but if I could go back
    in time and change one thing, I might try to interest some early preliterate people in
    not using their thumbs when they count. It could have been the standard, and it would
    have made a whole lot of things easier in the modern era. On the other hand, we have
    learned a lot from the struggle with the incompatibility of base-ten with powers of two.

    もしわたしがものごとを一つ変えることができたなら馬鹿げたことに聞こえるだろうけれども、
    本当にそれが可能であったなら、
    I might try to interest some early preliterate people in not using their thumbs when they count.
    It could have been the standard, and it would have made a whole lot of things easier in the modern era.
    その一方で、わたしたちは struggle with the incompatibility of base から多くのことを
    すでに学んでいるのです。


The bad 気になった点

The only complaint I have about the book (if it is a complaint) is the length of the 
some of the interviews. Some were hard to get through in a sitting. There's also some 
profanity, if you care about such things (I don't).

わたしが感じた唯一の不満は (もしそれが不満といえるならばですが)、幾つかのインタビューの
長さです。中には座って読み通すのが辛いものもあります。
There's also some profanity, if you care about such things (I don't).
#profanity 冒瀆、不敬、罰当たりな言葉

If you buy this book expecting to hear stories about TDD and .NET and RoR and other 
such trendy three-letter acronymns, you may be disappointed. If you are immersed in 
the present and don't care about the past, this book may not be for you.

もしあなたがTDD だとか .NET、RoR、あるいはその他の流行している三文字言葉 (three-letter 
acronymns) についての解説を期待してこの本を買ってしまったのなら、たぶんあなたは失
望することになるでしょう。もしあなたが immersed in the present であって過去については
興味がないのなら、この本はおそらくあなた向けのものではありません。

Overall まとめ

This book is a great read, educational and entertaining and I dare say inspiring. 
Other reviews have said this and I agree: Seibel is a programmer and he asks the 
questions a programmer would ask. I highly recommend this book. It's for sale 
mid-September; check the book's website.


This book is a great read, educational and entertaining
and I dare say inspiring. 

他のレビュアーはこう発言していて、わたしも同意します:

Seibel is a programmer and he asks the questions a programmer would ask.
I highly recommend this book.
It's for sale mid-September; check the book's website.


Posted into Book Reviews on Sep 08, 2009

Powered by Clojure and Compojure and Cows.

■_ 本日の巡回から

2010年04月25日

■_

・アウトレット
良くそこで買っている(特にアニメのDVDとか。とはいえ最近はかなり減ったな) 電器量販店がありまして。 先週、23日からのセール等のお知らせDMが来てたんですが その中にアウトレット品(まあ展示品とか、化粧箱がちょっとあれとか、等々のやつですな)の チラシもあって、そこに載っている機種に自分が使っているデジカメの数世代後の、とはいえ 最新よりも一つ前のモデルがあったんですね。 Panasonic デジタルカメラ LUMIX (ルミックス) FX60 ノーブルバイオレット DMC-FX60-V
Panasonic デジタルカメラ LUMIX (ルミックス) FX60 ノーブルバイオレット DMC-FX60-V これなんですが(ただし本体の色は不明)。 で、行ったわけですよ。今日。 デジカメのアウトレット品のワゴンを見つけてそこに積まれているものを確かめると…ない。 往生際悪く近くにいた店員さんに確かめると 「一番の人気の機種なので真っ先になくなりました」 だよねえ ○| ̄|_

パナソニックでもアレとかアレはあったのに。

■_ 浮動小数点数


【Perl,PHP】LLバトルロワイヤル10【Ruby,Python】
430 デフォルトの名無しさん [sage] 2010/04/25(日) 11:25:45 ID: Be:
    rubyからpythonに乗り換えようかと思って試してみた。
    floatするとずれる。
    "93.42" => 93.4200000002
    になる。
    ググるとしょうがないって書かれてた。
    気付いてないだけでrubyもいっしょ?

431 デフォルトの名無しさん [sage] 2010/04/25(日) 11:30:07 ID: Be:
    一般的な浮動小数点数を使ってる限りは、2進で正確に表現できない少数は
    そうなるよ、少なくとも内部的には
    それをどう「印字」するかは言語によって色々だろうな

    Pythonにしても
    >>> 0.1
    0.10000000000000001
    >>> print 0.1
    0.1
    こうだし 

432 デフォルトの名無しさん [sage] 2010/04/25(日) 11:43:27 ID: Be:
    0.1 == 1/10
    どっちもfalse
    だった。
    ちなみに実行時間は
    Ruby 31秒
    Python 5秒
    思ってた以上に差が有った。
    ちょっとショック。 

433 デフォルトの名無しさん [sage] 2010/04/25(日) 12:00:26 ID: Be:
    >>430
    浮動小数点だしそうなるな。

    気になるのなら、例えばPython 2.6以降なら標準で有理数型が使える。
    http://pythonjp.sourceforge.jp/dev/library/fractions.html
    他にも、10進小数とかなんとか方法はあるが、丸め誤差は扱いに注意しさえすれば、金融分野くらいでしか問題にならないと思う。 

434 デフォルトの名無しさん [sage] 2010/04/25(日) 12:21:59 ID: Be:
    >>430
    どうしても誤差を無くしたいならdecimalを使うしかない。
    >>> 0.1 + 0.2 == 0.3
    False
    >>> from decimal import Decimal
    >>> Decimal('0.1')+Decimal('0.2')
    Decimal('0.3')
    >>> _ == Decimal('0.3')
    True 

435 デフォルトの名無しさん [sage] 2010/04/25(日) 12:22:52 ID: Be:
    お金の計算に浮動小数点数使っちゃいけないってのは
    金融に限らず業務系のお仕事でプログラミングしてる奴なら常識だろうな

437 デフォルトの名無しさん [sage] 2010/04/25(日) 13:25:46 ID: Be:
    小数の精度はLLだからじゃなくてJavaでもCでも同じだろ 

438 デフォルトの名無しさん [sage] 2010/04/25(日) 13:40:36 ID: Be:
    そういうのこそ、「情報系」の大学で教えてるんじゃないの?
    どの言語を採用するかとか二の次三の次にしてさ 

439 デフォルトの名無しさん [sage] 2010/04/25(日) 13:42:25 ID: Be:
    つーかそれ基本情報技術者試験レベルだから
    小学生で受ける奴もいるらしいね 

442 デフォルトの名無しさん [] 2010/04/25(日) 13:58:54 ID: Be:
    ruby-talk(えいごのほう)見てると、浮動小数点がらみで
    誤差だエラーだと騒ぐ投稿が後を絶たない。
    きっと他の言語も似たようなものなんだろうと思う。

443 デフォルトの名無しさん [sage] 2010/04/25(日) 14:04:17 ID: Be:
    >>438
    普通に入門書の数値型の説明でも出てくるレベルの話 

444 デフォルトの名無しさん [sage] 2010/04/25(日) 14:05:55 ID: Be:
    ttp://d.hatena.ne.jp/akiradeveloper/20100423/1271986775#c1272170734
    これとかな 

445 デフォルトの名無しさん [sage] 2010/04/25(日) 14:08:32 ID: Be:
    >>444
    なんだこの釣り記事と思ったら
    思ったのと同じことをshiro氏が突っ込んでいた 

446 デフォルトの名無しさん [sage] 2010/04/25(日) 14:26:51 ID: Be:
    まぁ所詮ちんこだしな 

447 デフォルトの名無しさん [sage] 2010/04/25(日) 14:29:01 ID: Be:
    >>435
    ところがExcelの世界だと常識じゃなかったりする 

449 デフォルトの名無しさん [sage] 2010/04/25(日) 14:34:26 ID: Be:
    >>447
    Excelなら仕方ないな 

450 デフォルトの名無しさん [sage] 2010/04/25(日) 14:47:22 ID: Be:
    お金の計算にExcel使っちゃいけないってのは
    金融に限らず業務系のお仕事でプログラミングしてる奴なら常識だろうな 

452 デフォルトの名無しさん [sage] 2010/04/25(日) 16:01:58 ID: Be:
    まぁ所詮Excelだしな 

453 デフォルトの名無しさん [sage] 2010/04/25(日) 16:17:33 ID: Be:
    LLスレだけに再帰的なレスが多いな 

454 デフォルトの名無しさん [sage] 2010/04/25(日) 16:30:23 ID: Be:
    それを言うならloopyだろ常考 

455 デフォルトの名無しさん [sage] 2010/04/25(日) 16:39:13 ID: Be:
    LLから再帰という相関はあまりないような気がするんだが。手続き型な言語のほうが多いし 

456 デフォルトの名無しさん [sage] 2010/04/25(日) 16:40:03 ID: Be:
    末尾で再帰るからキリがないな 

457 デフォルトの名無しさん [sage] 2010/04/25(日) 16:40:09 ID: Be:
    再帰は R だしな 


430 のアレは、たぶん __repr__ (って今は別のメソッド推奨だっけ?)経由で 文字列化したときには有効桁の下の方まで出力するようになっているので 気がついた(勘違い)したんじゃないかなあ。 431の通り、printに食わせると文字列化の手順(経路)が違うのでちょっと変わる (けど内部的な「数値」は一緒なのは言うまでもなく)。 ruby-talk は大分ご無沙汰だけど、やっぱりこの手の問題の勘違いさんがいるのかあ。 あとExcel には金融関係の関数が結構ありますね。 統計関数は(ぴー)だけどこっちはどうなんだろう。

■_

Yog-0.0.5.zip  	0.0.5 source  	2010-04-24  	1  	10.6MB  	
Yog-0.0.5.tar.xz 	0.0.5 source 	2010-04-24 	1 	4.5MB 	
Yog-0.0.5.tar.gz 	0.0.5 source 	2010-04-24 	3 	7.6MB 	
Yog-0.0.5.tar.bz2 	0.0.5 source 	2010-04-24 	1 	5.7MB

いやー違うもんだねえ。圧縮率。

■_


「コンパイラ・スクリプトエンジン」相談室14 
712 デフォルトの名無しさん [sage] 2010/04/25(日) 20:23:06 ID: Be:
    GPPGでBisonのYYDEBUGでのデバッグ機能を使用したいのですが、同様の機能がありますでしょうか?
    どんな解析がされたのかがわからなくて辛いです(。>д<。)
    今はConsole.Writeを実行して、どのような解析がされたかを確認してます。


    お忙しいところ申し訳ありませんが、どなたかよろしくお願いいたします。 

713 デフォルトの名無しさん [sage] 2010/04/25(日) 20:24:02 ID: Be:
    >>712
    俺の研究室の学生っぽいからダメ 

714 デフォルトの名無しさん [sage] 2010/04/25(日) 21:13:00 ID: Be:
    身内ならなおさら、こんぐらい教えたれやw 

715 デフォルトの名無しさん [sage] 2010/04/25(日) 21:56:39 ID: Be:
    ドキュメント読めば書いてあるよ
    HTML吐かせたりできたはず 

■_ むー

なんか微妙に頭痛が。寝ます。

2010年04月24日

■_

・ダムエー
宇宙エレベーター (教えてください富野です) オリジンは、ガンダムのビールライフルこの後どうするんだろう…

・アフタヌーン

『ガベージコレクションのアルゴリズムと実装』読書会@関東 : ATND
に参加してきました。 例によってまとめなおすのが面堂終太郎。


・マークスイープGC
・参照カウント
・コピーGC

↑基本的にはこの三つ。ほかはこれらの組み合わせか応用

なぜ今GCか

組み込みプログラミング
GC の時間が影響する
→ GC が起きないように書け
→ Javaで書いているのにCで書いているようなプログラムは実在する

実際にGC時間が問題になることがあるの?
スループット重視しすぎじゃない?

#BASICの文字列領域のGC


GCヘッダ
アルゴリズムによって必要な情報は違う
フィールド

ポインタ
非ポインタ
→値そのものを利用 数値、文字、真偽値

ポインタ
ポインタとそうでないものを区別できるか


ミューテータ
オブジェクトの生成
ポインタの更新

生きている死んでいる
アロケータ
チャンク
ルート
 → コールスタック レジスタ グローバル変数領域とか

スループット
コピーGCよりもマークスイープ GC がスループットが高い状況とは?


最大停止時間
ケイタイ用Javaゲーム
BASIC にもGCみたいのあったよね
Emacs Lisp で昔は良く見た「ガーベジコレクションです」なメッセージ


ヒープ領域の使用効率
コピーGC (半分しか使えなかったりするじゃん?)
Javaのは?
古いでかいオブジェクトをコピーする手間ってどうにかならないのか
 (たぶんそれに対処しようとしたバリエーションがあるだろう)

第2章
マークスイープGC
マーク
 ルート
スイープ

#そういや マークアンドスイープじゃなくてマークスイープ?
#カナ書きはともかく、英語表記で Mark Sweep とかって違和感が

2.1.4

あろけーしょん

チャンクとマークスイープアルゴリズムとの関係?
保守的 GC と相性がよい

メリット
デメリット
 フラグメンテーション

コピーオンライト

複数フリーリスト
 →管理が大変じゃね?

BiBOP (なんて読むの?)

ビットマップマーキング
#アルゴリズムの記述言語
 メリット
コピーオンライトとの相性がよい

デメリット

R. John M. Hughes って一人の人の名前?

遅延スイープ
 →インクリメンタルGC
マークフェイズによる停止時間
スイープフェイズによる停止時間

GC ストップが指示されていたら遅延スイープするかしないかを切り替えたいとか

飛んで8章 インクリメンタルGC
インクリメンタルGCとは
 GCは重い
  stop-the-world gc (JoJo だよねーという声が)
 三つのアルゴリズム
三色マーキング
  白
  グレー
  黒

マークスイープ GC の分割
 ルートスキャンフェーズ
 マークフェーズ
  スイープフェーズ

 一定サイズだけスイープ

ルートスキャンフェーズ
マークフェーズ
スイープフェーズ


メリットデメリット
最大停止時間の短縮
スループットの低下

GCアルゴリズムの切り替えとかできたらいいんじゃね?
Javaは 三種類あって切り替えられる?

GCアルゴリズム詳細解説
github

(ダイクストラのアルゴリズム)
Steeleのアルゴリズム
   両者の違い

リスト9 4行目 obj.mark = false の必要性とは?
とにかくスタックに積んじゃえば?

湯淺のアルゴリズムのメリット

章末の三つの比較をしている表が間違っている?

・kindle

・電子書籍の衝撃
読み終わった。 感想は、書こうかどうしようか。

・WORKING!
のOP曲が結構お気に入り。

■_ ム板からネタ拾い


Prologの宿題片付けます
1 デフォルトの名無しさん [sage] 2010/04/23(金) 16:02:04 ID: Be:
    Prologで宿題が出たら、自分でプログラムが書くことができた
    人も、思い悩んでいる人も、ここにその問題を載せてください。
    宿題はその講座がどんな内容かをちょっとだけ垣間見させて
    くれます。
    全国の大学に100を越える講座があるといわれるProlog。
    どんな宿題がでてくるのか楽しみです。 

2 デフォルトの名無しさん [sage] 2010/04/23(金) 19:56:46 ID: Be:
    プロローグここまで 

3 デフォルトの名無しさん [sage] 2010/04/24(土) 00:01:27 ID: Be:
    予想1 すぐ過去ログ倉庫に流れる
    予想2 質問と回答の文体が一致したまま何年も存続
    予想3 事務処理の問題ばかりになる 

Prolog 単独で宿題スレって。 確かに宿題スレで熱心に回答が寄せられているのにPrologがあったと思うけど。


【超高速】C/C++に代わる低級言語を開発したい 3
970 デフォルトの名無しさん [sage] 2010/04/23(金) 07:56:53 ID: Be:
    SimulaとBooを参考にした言語を作って
    Dorifって名前にしようぜ 

982 デフォルトの名無しさん [sage] 2010/04/23(金) 19:53:31 ID: Be:
    思いついた。
    もしも何かこのスレで新言語作るってんなら、名前は是非

    Koolong(クーロン:"空論"のもじり)にしてくれ

    ‥皮肉っぽくていいだろ?w 

983 デフォルトの名無しさん [sage] 2010/04/23(金) 20:56:52 ID: Be:
    ume

    言語名はkuma-だっつってんだろ 

984 デフォルトの名無しさん [sage] 2010/04/23(金) 21:35:48 ID: Be:
    新言語は新言語で書かれるのだろうか? 

985 デフォルトの名無しさん [sage] 2010/04/23(金) 21:52:34 ID: Be:
    誰かBNFを・・・ 

986 デフォルトの名無しさん [sage] 2010/04/23(金) 22:24:57 ID: Be:
    >>982
    ハァ?空論もじってるとして、Koolong自体は何を現してるわけ?
    空論をちょっと厨二臭く言ってみただけのカスッカスの能無し命名だろ?

    何が「思いついた。」だよ
    Dat落ちの頃合を狙って張ったんだろ?
    万一ボロカスに否定されてもすぐ落ちるから、精神的ダメージは最小限に抑えられるってか?w 

987 デフォルトの名無しさん [sage] 2010/04/23(金) 22:42:15 ID: Be:
    え、ネタスレじゃないの 

988 デフォルトの名無しさん [sage] 2010/04/23(金) 22:53:58 ID: Be:
    嘘から出た真…じゃなくて身から出た錆、か 

993 デフォルトの名無しさん [sage] 2010/04/24(土) 00:43:52 ID: Be:
    >>982
    ‥皮肉っぽくていいだろ?w

    wwwwwwwwwwww 

994 デフォルトの名無しさん [sage] 2010/04/24(土) 00:57:28 ID: Be:
    >>970
    pythonに対抗する国産言語に付けてやってくれ。

    RubyをDorifに改名しようか。 

999 デフォルトの名無しさん [sage] 2010/04/24(土) 07:08:27 ID: Be:
    >>986
    そんなに長くて激しいレスもらえるとは思わなかった
    しかもずいぶん内容が斜め上。ここが真正低脳隔離スレだと忘れてた
    VIPに帰るわ

1000 986 [sage] 2010/04/24(土) 07:14:32 ID: Be:
    >>999
    低脳はお前だろ
    俺たちはお前の考えなんてお見通しなんだよ
    第一空論じゃない。俺が実際に作っているし、公開の準備もしてる
    お前はそれすら知らないだろ。無知乙

    そうやって何も知らない癖に人を低脳よばわりすることは自らの低脳さをさらけ出してるって気付!!!!!!
    俺が世界の中心なんだよ!!!

1001 1001 [] Over 1000 Thread ID: Be:
    このスレッドは1000を超えました。
    もう書けないので、新しいスレッドを立ててくださいです。。。 


【Perl,PHP】LLバトルロワイヤル10【Ruby,Python】
342 デフォルトの名無しさん [sage] 2010/04/22(木) 23:38:44 ID: Be:
    実際のところおまいらって、何がきっかけでLL使い始めたの? 

343 デフォルトの名無しさん [sage] 2010/04/22(木) 23:59:34 ID: Be:
    かっこつけるため 

344 デフォルトの名無しさん [sage] 2010/04/23(金) 00:12:11 ID: Be:
    C以外の選択肢がVBとawkとPerlとLisp系くらいしかなかった
    PHPはギリ世の中に出てたけどRubyとかPythonとかは
    今で言うD言語みたいな微妙なポジションだった
    そんな状態でWeb系の仕事初めてPerlを 

345 デフォルトの名無しさん [sage] 2010/04/23(金) 01:01:05 ID: Be:
    元々BASICとHSPしか経験無かったんだが
    Vectorでフリーソフト漁ってたら「オブジェクト指向プログラミング言語Ruby」ってカテゴリがあって
    なんぞこれと思って使い始めたらいつの間にかPerlやPython、関数型言語にも手をつけてた 

346 デフォルトの名無しさん [sage] 2010/04/23(金) 01:08:51 ID: Be:
    Vectorルートでなんかやり始めるって、あるよね 

347 デフォルトの名無しさん [sage] 2010/04/23(金) 01:27:42 ID: Be:
    テープ回覧とかjusのCDとか個人的にはcompuserveかftp mail使ってた俺には別世界だな

348 デフォルトの名無しさん [sage] 2010/04/23(金) 01:41:11 ID: Be:
    吉崎さんがPC-VANにあげたLHAを(ry 

349 デフォルトの名無しさん [sage] 2010/04/23(金) 01:41:48 ID: Be:
    HyperRoadの奴は金持ち 

350 デフォルトの名無しさん [sage] 2010/04/23(金) 03:02:47 ID: Be:
    uucpにも世話になったな
    草の根uucpにもつないでた
    つか、おっさんたち乙 

355 デフォルトの名無しさん [sage] 2010/04/23(金) 21:30:10 ID: Be:
    結局RubyやればいいのかPythonやればいいのか分からないのよね 

    両方やらなければよい。そしてPerl,PHPに宗旨変え。 

358 デフォルトの名無しさん [sage] 2010/04/23(金) 21:51:17 ID: Be:
    悩むぐらいなら全部やれ
    個人的にはRubyとPHPは勧めないがなー 

362 デフォルトの名無しさん [] 2010/04/23(金) 22:32:48 ID: Be:
    どれか1つやれば万事解決、なんてわけがないのに
    なんで1つしか習得しようとしないのかね。

363 デフォルトの名無しさん [sage] 2010/04/23(金) 22:41:05 ID: Be:
    全部やりゃいいやんな 

364 デフォルトの名無しさん [sage] 2010/04/23(金) 22:44:01 ID: Be:
    この言語は任せとけ!みたいな持ち言語がほしいのれす。。 

365 デフォルトの名無しさん [] 2010/04/23(金) 22:45:10 ID: Be:
    いろいろ齧れば自分に合う言語がどんなものか分かってくるんじゃない?

366 デフォルトの名無しさん [sage] 2010/04/23(金) 22:50:10 ID: Be:
    >>364
    万年筆や原稿用紙にばかり拘っても仕方ないよ

367 デフォルトの名無しさん [sage] 2010/04/23(金) 22:50:25 ID: Be:
    Cやりゃいい
    LLは適当でいける 

368 デフォルトの名無しさん [sage] 2010/04/23(金) 22:52:05 ID: Be:
    用途が似たような言語ばっかりやっても仕方ないし
    最初にどれをやるかは考えるだろ。数ある言語の中から、サイクロを振って決めるわけ?w 

369 デフォルトの名無しさん [sage] 2010/04/23(金) 22:55:44 ID: Be:
    http://vipprog.net/wiki/
    ここでも見て選べば 

370 デフォルトの名無しさん [sage] 2010/04/23(金) 23:03:54 ID: Be:
    言語が思考の基盤であるとする「サピア=ウォーフの仮説」に影響された
    ような言説をプログラミング言語の界隈でもたまに見るけど
    サピア=ウォーフの仮説は誤りらしいですね 

374 デフォルトの名無しさん [sage] 2010/04/24(土) 01:21:01 ID: Be:
    >>369
    awkやObjective-Cってマイナー言語か?
    IronPythonの方がよっぽどマイナーだろ 

375 デフォルトの名無しさん [] 2010/04/24(土) 01:29:19 ID: Be:
    awkはマイナーでしょ。
    Objective-CはもうDelphiよりはメジャーと言っていいかも。 

376 デフォルトの名無しさん [sage] 2010/04/24(土) 01:53:34 ID: Be:
    awkがマイナーとか言う奴はもれなく若者 

377 デフォルトの名無しさん [] 2010/04/24(土) 02:00:08 ID: Be:
    awkがマイナーとかねーよwwアホ 

385 デフォルトの名無しさん [sage] 2010/04/24(土) 07:44:54 ID: Be:
    >>341
    どーりでCとFortranが人気なわけだ。
    COBOLも十分ロングライフだと思うが、そのわりに人気ないね。 

まあイマドキは awk はねえ。


D言語 Part24
454 デフォルトの名無しさん [] 2010/04/23(金) 20:27:51 ID: Be:
    誰か、llvmのドキュメントを翻訳してくださいな。
    パーサーから、中間言語までを翻訳してくれれば
    D言語だけじゃなく、色んな人が幸せになれると
    思う。特に俺なんか喜ぶ。俺のために翻訳してくれた
    って感謝する。 

455 デフォルトの名無しさん [sage] 2010/04/23(金) 20:47:33 ID: Be:
    翻訳するために原文を読むと、その本人にはもう翻訳が必要無くなるという
    翻訳者のジレンマがあるからな 

456 デフォルトの名無しさん [sage] 2010/04/24(土) 01:11:50 ID: Be:
    成果を売れば金になるじゃん
    金にならないものを翻訳するなってことだ 

457 デフォルトの名無しさん [sage] 2010/04/24(土) 09:54:54 ID: Be:
    llvmの読者数考えると厳しいな。
    この前発売されたGC本くらいには売れるんだろうか? 

ボリュームあるのかな。


Ruby 初心者スレッド Part 36 
623 デフォルトの名無しさん [sage] 2010/04/24(土) 14:47:36 ID: Be:
    ubuntuで
    $ptn = "/(日本語|英語)/u"
    $str = "日本語難しい"

    if Regexp.new($ptn) =~ $str then
    puts 1
    else
    puts 0

    end

    としたファイルをUTF8で保存し、端末で実行しましたがマッチしないようです。
    端末で-Kuとしてもだめでした。原因はどこにあるかわかりますか? 

624 デフォルトの名無しさん [sage] 2010/04/24(土) 14:57:47 ID: Be:
    とりあえず Regexp.new で Regexp を作るときは周りの / ... / はいらないよ
    あれは正規表現リテラル用 

625 デフォルトの名無しさん [sage] 2010/04/24(土) 14:59:32 ID: Be:
    pattern = '(日本語|英語)'
    str = '日本語難しい'
    if /#{pattern}/u =~ str then
    puts 1
    else
    puts 0
    end

    グローバル変数使う人間は殴られて月まで吹っ飛べ

626 デフォルトの名無しさん [sage] 2010/04/24(土) 15:16:56 ID: Be:
    >>624
    >>625
    うまくいきました!ありがとうございます 

うはは>月まで吹っ飛べ

■_ 選択の余地はないでしょ


C++プログラミングをするにあたってBorland C++か Visu | OKWave
C++プログラミングをするにあたってBorland C++か Visu

C++プログラミングをするにあたってBorland C++か Visual C++
どちらがいいのでしょうか?

違いなどがわからず困ってます。
よろしくお願いします。

「C++」をやろうってのに、Borland C++ (無料配布してるアレだよねえ) はどー考えてもないでしょ。

■_ 本日の巡回から

■_ 地雷

右は違いますよ?

2010年04月23日

■_

先週の Haskellers meeting のまとめやらはもう投げちゃうとして(えー)、 ひとつ書いておかないと。 「何か質問は?」と会場に振ったときに何も質問できなかったのが反省事項。 あ、わたしのそばにいた人がとても控えめに手を挙げてましたね。 顔の辺りまでしか上がってませんでしたけど。

[tmp]浮動小数点を10進数行う基盤があればすべて終わりなんじゃないの?
つ IEEE754-2008

■_ 最後の

レヴィの本というとあれかな。


open...: Richard Stallman: "I Wished I Had Killed Myself"

20 April 2010
Richard Stallman: "I Wished I Had Killed Myself"

I received a review copy of Steven Levy's seminal book Hackers back in the 1980s, but 
never read it. I did, though, keep it, because it looked interesting and important. It 
came in very handy when I wrote Rebel Code, since in some sense my book is a 
continuation of Levy's story, and his meticulous work provided me with the context for 
everything that happened afterwards.

So I was naturally intrigued to read Levy's recent encounters with some of the key 
hackers he wrote about back then, in his new Wired article "Steven Levy Revisits 
Tech Titans, Hackers, Idealists".

Sadly, it is rather disappointing, the meandering parts never quite adding up to any 
satisfactory whole (and the section on Gates seems overly complaisant.) But it's worth 
reading (a) for the photos of hackers as they were then, and (b) for the following 
revelatory confession of RMS:

    In our original interview, Stallman said, “I'm the last survivor of a dead 
    culture. And I don't really belong in the world anymore. And in some ways I feel
    I ought to be dead.” Now, meeting over Chinese food, he reaffirms this. “I have 
    certainly wished I had killed myself when I was born,” he says. “In terms of
    effect on the world, it’s very good that I've lived. And so I guess, if I could
    go back in time and prevent my birth, I wouldn’t do it. But I sure wish I hadn't
    had so much pain.”


This "pain" that Stallman says he has endured makes his decision to champion 
tirelessly freedom and free software for all these decades all the more remarkable - 
and our debt to him for doing so all the greater.

Follow me @glynmoody on Twitter or identi.ca.

Posted by glyn moody at 2:04 PM  

dead culture の last survivor と。

■_ 本日の巡回から

■_ fold

右とか左とか


関数型プログラミング言語Haskell Part11 
867 デフォルトの名無しさん [sage] 2010/04/14(水) 20:42:00 ID: Be:
    すんません

    左畳み込みでメモリリークが発生しやすくて、右畳み込みだと発生しにくい理由が分からんです
    だれか教えてください 

868 デフォルトの名無しさん [sage] 2010/04/14(水) 22:36:37 ID: Be:
    foldr と foldl の計算は模式的に次のように表せる。

    foldr : (f a1 (f a2 (f a3 i)))
    foldl : (f (f (f i a1) a2) a3)

    分かりやすくするために、本来はひとつの同じ関数 f に評価順番号を添えて区別してみる。

    foldr : (f1 a1 (f2 a2 (f3 a3 i)))
    foldl : (f1 (f2 (f3 i a1) a2) a3)

    foldr はまず関数 f1 を a1 に適用し、a1 を評価し、
    その結果としてカリー化された関数(仮に fa1 とする)を返す。
    この時点で、a1 は既に評価されてしまったので、a1 の情報はその評価結果の値のみが残り、
    a1 を評価するために必要だったその他の情報はもう不要なので捨てられる。
    つまり、メモリから破棄される。

    (fa1 (f2 a2 (f3 a3 i)))

    次に関数 fa1 を (f2 a2 (f3 a3 i)) に適用し、(f2 a2 (f3 a3 i)) を評価する。
    そして関数 f2 を a2 に適用し、a2 を評価し、カリー化された関数 fa2 を返す。

    (fa1 (fa2 (f3 a3 i)))

    以下繰り返し。

    foldl の方は次スレ >>869 

869 デフォルトの名無しさん [sage] 2010/04/14(水) 22:38:18 ID: Be:
    >>868 からの続き

    foldr : (f1 a1 (f2 a2 (f3 a3 i)))
    foldl : (f1 (f2 (f3 i a1) a2) a3)

    一方 foldl は関数 f1 を第1引数である (f2 (f3 i a1) a2) に適用しようとする。
    このとき、第1引数を評価した結果のカリー化された関数がまだ完成していないから、
    第2引数である a3 もまだ評価されずにメモリに残ることになる。
    では、いつまで残るかというと、評価をシミュレートしてみれば分かるが、
    括弧の最も奥の (f3 i a1) が評価され、(f2 その結果 a2) が評価され、
    (f1 その結果) が評価された後のカリー化された関数がやっと a3 に適用されるまで残る。
    入れ子の次のレベルの深さにある a2 はその一段階前までメモリに残る。

    つまり、foldl はリストの後ろの方の要素ほどメモリに長く居続ける。
    これがあなたの言うメモリリークというものの正体。
    ちなみに、Haskell ではこういう一見分かりにくいメモリ領域の使用を
    メモリリークではなくスペースリークと呼ぶ。

    私はこう解釈しているが、もし違ってたらごめん。 

870 デフォルトの名無しさん [sage] 2010/04/14(水) 22:55:24 ID: Be:
    >>868
    間違ってる

    >その結果としてカリー化された関数(仮に fa1 とする)を返す。
    >この時点で、a1 は既に評価されてしまったので、a1 の情報はその評価結果の値のみが残り、
    fの定義のされ方にもよるけど、普通に二引数関数として定義されているなら(f a1)を評価してもa1は評価されない
    仮に評価されたとしても、評価済みの値を持っておく必要があるので結局メモリが要る

    >>867
    foldrがfoldlに比べて空間効率がいいのは、畳み込みに使う関数が第二引数について非正格なとき(他にもある?)
    例えば(++)は第二引数についてほぼ非正格なので、
    concat = foldr (++) []
    と定義すればO(1)の空間で動く(紙の上で追ってみれば分かると思う)のに対して
    concat = foldl (++) []
    だと酷いことになる 

871 デフォルトの名無しさん [sage] 2010/04/14(水) 23:16:49 ID: Be:
    >>870
    >fの定義のされ方にもよるけど、普通に二引数関数として定義されているなら(f a1)を評価してもa1は評価されない

    あ、そうか。
    ベータ簡約はされるが(実装的にはポインタの差し替え程度だと思うが)、
    評価までは未だされないのか。

    やっぱり間違ってたか。
    >>867 すまん、無視してくれ。 

872 デフォルトの名無しさん [sage] 2010/04/15(木) 00:26:45  ID: Be:
    どちらも、評価の結果全てが欲しいなら、空間効率は一緒、実行効率は畳み込み用の関数opに依存するね。
    foldr op init [x1:x2:x3]
    => x1 `op` (foldr op init [x2:x3])
    => x1 `op` (x2 `op` (foldr op init [x3]))
    => x1 `op` (x2 `op` (x3 `op` (foldr op init [])))
    => x1 `op` (x2 `op` (x3 `op` init))

    foldl op init [x1:x2:x3]
    => foldl op (init `op` x1) [x2:x3]
    => foldl op ((init `op` x1) `op` x2) [x3]
    => foldl op (((init `op` x1) `op` x2) `op` x3) []
    => ((((init `op` x1) `op` x2) `op` x3)
    一部だけしか必要ない場合(headとかtake 2とか)は空間効率も違ってくる。
    >>870の言う通り、opの第二引数が非正格なとき(第二引数を評価しなくても値が返せる場合のことでしょ?)で
    なおかつ第二引数が必要なかった場合はfoldrは左端のx1を返すだけで後の計算はしないしメモリにも残さない。
    foldlの場合は第一要素を求める場合、最終行まで展開したあと、
    ここから更に全部を計算していく必要があってメモリは要るわ最終的にいらないところまで計算するわで効率が悪い。 

873 デフォルトの名無しさん [] 2010/04/15(木) 00:28:40  ID: Be:
    以下の2つの foldl, foldr の [1..5000000] の計算結果で、
    t05l.hs: act n = foldl (+) 0 [1..n]
    t05r.hs: act n = foldr (+) 0 [1..n]
    t05l.hs, t05r.hs:
    main = do
    n' <- getArgs
    let n = read (n' !!0)
    putStrLn (show (act n))

    >ghc -O2 --make {t05r.hs | t05l.hs} -prof -auto-all -caf-all -fforce-recomp

    >t05l 5000000
    12500002500000

    >t05r +RTS -K100M -RTS 5000000
    Stack space overflow: current size 100000000 bytes.
    Use `+RTS -Ksize -RTS' to increase it.

    >t05r +RTS -K800M -RTS 5000000
    12500002500000

    が得られた。
    何かで、foldl のヒープの使用が、 foldr ではスタックの使用に変わったようなもの。。。
    というようなことを聞いた不確かな記憶があるのですが、
    サンクとはどのような情報をどのような形で保持しているのでしょうか?

874 デフォルトの名無しさん [sage] 2010/04/15(木) 00:51:18 ID: Be:
    >>873
    thunkってのは>>872にあるような、計算途中の式のこと。
    x1 `op` (x2 `op` (x3 `op` init))みたいなの。
    メモリ上にどう構成されているかは知らんが、遅延評価だとサンクが大きくなりがち。 

875 870 [sage] 2010/04/15(木) 08:59:34 ID: Be:
    言葉が足りなかったな、ごめん

    >>872
    全部を評価する場合でも、結果を順番に読み捨てていくなら空間効率も変わるよ
    たとえば、
    print $ foldr (++) [] $ map (flip replicate ()) [0..n]
    は全体としてO(1)の空間で動くけど、foldrをfoldlにするとO(n)になる 

876 デフォルトの名無しさん [sage] 2010/04/15(木) 18:21:09 ID: Be:
    圏論ってアウェアネストレーニングみたい。 

877 デフォルトの名無しさん [sage] 2010/04/15(木) 18:28:44 ID: Be:
    >>873
    foldl (+) 0 [1..10000000]とfoldr (+) 0 [1..10000000]をPreludeで走らせてタスクマネージャ見たけど、
    大きな違いないね。

    >>867
    分かりません 

fold と thunk については Thunks and Haskell | Ethan Fast というのを最近見つけました。

■_ Ver. up

The R Project for Statistical Computing

R version 2.11.0 has been released on 2010-04-22. The source code is first available 
in this directory, and eventually via all of CRAN. Binaries will arrive in due course 
(see download instructions above). 

2.10.x ろくに使ってなかった ○| ̄|_

■_ いかんなー

中途半端な状態のがたくさんある ○| ̄|_ メンテ不能なコードの書き方の続きとか。

■_

  http://homepage1.nifty.com/herumi/diary/1004.html#22
  4月22日_

  もともと単体テストなどで大量のinline関数が埋め込まれているところに, gcc 4.3とgcc 4.5
で最適化ロジックの変更で出力コード量が変わり, その上限にひっかかってしまったのが理由み
たいだ. gcc 4.3 → 4.4 → 4.5でinline化される対象が増え, 逆に制約にひっかかってinline
化されなくて遅くなっていたのかもしれない. どうりで原因追求のためにmulだけ取り出してasm
を見ても分からなかったわけだ.
  

なるほどー。inline 関数にできる能力が向上したのが一見裏目に出たと。 コンパイラー難しい。

2010年04月22日

■_

・strncpy/strncat
ついったーで、 strncpy と strncat って微妙に n の仕様が違う…。きもい。 という発言があったわけですが。 まー確かに何でこんなことにといいたくなる気持ちはわかる(笑) つーことで strlcpy/strlcat を使いましょう(それかっ)

まだ Python スタートブックとかやさしいF#入門とかの現物を拝んでません。

■_ PHPって…

reddit 経由でたどり着いた、PHPの作者(?)の語録。


Rasmus Lerdorf - Wikiquote

Rasmus Lerdorf (born 22 November 1968) is a Danish-Greenlandic programmer and the 
author of the first version of the PHP web programming language.

[edit] Sourced

    * I did not develop the PHP we know today. Dozens, if not hundreds of people, 
      developed PHP. I was simply the first developer.
          o sitepoint.com

    * I actually hate programming, but I love solving problems.
          o sitepoint.com

    * I really don't like programming. I built this tool to program less so that I could
      just reuse code.
          o Itconversations.com

    * PHP is about as exciting as your toothbrush. You use it every day, it does the job,
      it is a simple tool, so what? Who would want to read about toothbrushes?
          o sitepoint.com

    * I was really, really bad at writing parsers. I still am really bad at writing parsers.
          o Itconversations.com

    * We have things like protected properties. We have abstract methods. We have all this
      stuff that your computer science teacher told you you should be using. I don't care
      about this crap at all.
          o Itconversations.com

    * There are people who actually like programming. I don't understand why they like
      programming.
          o Itconversations.com

    * I'm not a real programmer. I throw together things until it works then I move on. The
      real programmers will say "yeah it works but you're leaking memory everywhere.
      Perhaps we should fix that." I'll just restart apache every 10 requests.
          o Itconversations.com

    * I do care about memory leaks but I still don't find programming enjoyable.
          o @rasmus

    * I don't know how to stop it, there was never any intent to write a programming
      language [...] I have absolutely no idea how to write a programming language, I just
      kept adding the next logical step on the way.
          o Itconversations.com quoted in www.dasgenie.com

    * For all the folks getting excited about my quotes. Here is another - Yes, I am a
      terrible coder, but I am probably still better than you :)
          o @rasmus

[edit] Unsourced

    * If eval() is the answer, you're almost certainly asking the wrong question.
          o PHP.net: eval

    * The one-sentence answer is that humans are not smart enough to write threadsafe code
          o E-mail

[edit] External links
Wikipedia
Wikipedia has an article about:
Rasmus Lerdorf
Retrieved from "http://en.wikiquote.org/wiki/Rasmus_Lerdorf"

「プログラミングのどこが楽しいのかわからない」とか。 まーそれでもメンテし続けているのは偉い。のだろうか。 reddit での反響もいずれ(700近くコメントがついてました)。

■_ Emacs ってこんなんできたのか

と書きながら、そういえば最近になってできるようになったとか見たような気も。

Emacs: adding 1 to every number made of 2 digits inside a marked region - Stack Overflow

Imagine I've got the following in a text file opened under Emacs:

some    34
word    30
another 38
thing   59
to      39
say     10
here    47

and I want to turn into this, adding 1 to every number made of 2 digits:

some    35
word    31
another 39
thing   60
to      40
say     11
here    48

(this is a short example, my actual need is on a much bigger list, not my call)

How can I do this from Emacs?

I don't mind calling some external Perl/sed/whatever magic as long as the call is made 
directly from Emacs and operates only on the marked region I want.

How would you automate this from Emacs?

I think the answer I'm thinking of consist in calling shell-command-on-region and 
replace the region by the output... But I'm not sure as to how to concretely do this.

This can be solved easily by using the command query-replace-regexp (binded by default 
to C-M-%), doing:

C-M-% \b[0-9][0-9]\b \,(1+ \#&)

However by default this doesn't work on the marked region: by default it works on the 
whole document, starting from the cursor.

To have this work on the region, you first need to toggle the transient-mark-mode on 
(M-x transient-mark-mode). You'll probably want to toggle it off afterwards.

The \, construct is used to tell that a Lisp expression is going to be used as the 
replacement string.

See Replace regexp for the explanation.

very nice, now I'll have to see what it does... Can't mod you up: no more votes today 
(I've done it differently too, but I prefer your version, see my own answer).


@WizardOfOdds: It works for me. :] Which version of Emacs are you using? Any error 
message in the echo area/minibuffer? @Justin Smith: I just tried, and it seems as long 
as a region is active (being selected), then it doesn't matter whether the cursor is 
at the end. But you are right that when no region were selected, then the replacements 
would only happen between the cursor and the end of buffer.


from the link huaiyuan posted at the bottom of his answer: "You can use Lisp 
expressions to calculate parts of the replacement string. To do this, write ‘\,’ 
followed by the expression in the replacement string." In other words you can put 
any valid lisp expression in a regexp replacement and it will be replaced with its 
value.

It doesn't protect against 99->100.

(defun add-1-to-2-digits (b e)
  "add 1 to every 2 digit number in the region"
  (interactive "r")
  (goto-char b)
  (while (re-search-forward "\\b[0-9][0-9]\\b" e t)
    (replace-match (number-to-string (+ 1 (string-to-int (match-string 0)))))))

Oh, and it operates on the region. If you want the entire file, then you replace b and 
e with (point-min) and nil.
Moderately tested; use M-: and issue the following command:

(while (re-search-forward "\\<[0-9][0-9]\\>" nil t)
  (let ((x (match-string 0)))
    (delete-backward-char 2)
    (insert (format "%d" (1+ (string-to-int x))))))


I managed to get it working in a different way using the following (my awk-fu ain't 
strong so it probably can be done in a simpler way):

C-u M-x shell-command-on-region RET awk '$2>=0&&$2<=99 {$2++} {print}' RET

but I lost my indentation in the process : )

Seeing all these answers, I can't help but have a lot of respect for Emacs...

C-M-% \b[0-9][0-9]\b \,(1+ \#&) って、単に文字列としての置換ではなくて、 (1+ \#&) が関数として評価されないと期待通りの結果にならないですよね。 \, がポイントなんだろか。

ああ、やり取りにあるね "You can use Lisp expressions to calculate parts of the replacement string. To do this, write ‘\,’ followed by the expression in the replacement string." ということか。

■_


  Lisp Scheme Part30
62 デフォルトの名無しさん [sage] 2010/04/21(水) 22:19:31 ID: Be:
    プログラムがデータ、とか言いながら、
    割と構文みたいなモノが存在しているのは何なのさー。
    と、Schemeをかじった時に大変疑問でした。
    else とか define とかの特別扱いと来たら、もう。
    幻想を抱きすぎたのかもしれない…。
    CLだと違うのかな?

    というかそもそもプログラムがデータって具体的にどういうこと?
    まさか、関数がオブジェクトだ、ってだけじゃないよね。
    (健全じゃない)普通のマクロもリードマクロも一応理解しているつもりだけど…。 

63 デフォルトの名無しさん [sage] 2010/04/21(水) 22:20:52 ID: Be:
    >>62
    君は意味論と構文の区別を付けられてない。
    もっと勉強しなさい。SICPでも読んで。 

64 デフォルトの名無しさん [sage] 2010/04/21(水) 22:28:15 ID: Be:
    >>62
    プログラムは S 式 => S 式はリスト => リストはデータ

    リストを扱うのと同じ方法でプログラムを操作出来るから
    プログラムがデータ 

65 デフォルトの名無しさん [sage] 2010/04/21(水) 23:54:52 ID: Be:
    >>62
    Schemeのソースコードを開いて、readすると意味が分かる。
    あとはcarでもcdrでも煮るなり焼くなり好きなように。

    実用的な例だと、GaucheのSXMLとかCiSEを見ると良い。
    SXMLはオリジナルのコードをGauche用に変換しているし、
    CiSEはS式のプログラムをCに変換する。
    共にSchemeプログラムをデータとして扱ってる例。

    SXMLのオリジナルコードを変換するコード
    http://gauche.svn.sourceforge.net/viewvc/gauche/Gauche/trunk/ext/sxml/trans.scm?revision=7065&view=markup

    “本物のマクロ”でCのコード行数を半分に!
    http://www.atmarkit.co.jp/news/200909/07/lltv02.html 

66 デフォルトの名無しさん [sage] 2010/04/22(木) 00:05:14 ID: Be:
    >>62
    というか、そもそもマクロ理解してるってのにそりゃないでしょー。
    あれぞまさに、プログラムがデータだからこそ、できる技なんだから。
    syntax-rulesでもsyntax-caseでもdefine-macroでも、全部そう。 

67 デフォルトの名無しさん [sage] 2010/04/22(木) 00:11:38 ID: Be:
    >>63
    なるほど。
    もっと精進します。

    >>64
    超なっとく。
    ところで、マクロ以外でプログラム=データだとうれしいことって何ですか? 

68 62, 67 [sage] 2010/04/22(木) 00:38:16 ID: Be:
    連投ごめん。やっとこさ、わかりました。
    readすげー。
    なんかとんでもない勘違いをしてた気がする…。
    特に、S式が何か、ってのを理解してなかったです。
    そりゃぁ、他の言語にマクロが無いわけだ…。 

69 デフォルトの名無しさん [sage] 2010/04/22(木) 01:09:00 ID: Be:
    そして>>68は、最高の喜びと、現実に生きる辛さを知るのであった。 

72 デフォルトの名無しさん [sage] 2010/04/22(木) 07:11:25 ID: Be:
    次は >>68 がCLを学び実行時に compile が実行できることの真の意味を知る

    第7話「コンパイラの造りしもの」

    お楽しみに!


【超高速】C/C++に代わる低級言語を開発したい 3 
909 デフォルトの名無しさん [sage] 2010/04/22(木) 14:40:09 ID: Be:
    Cのレベルの言語なら例外はいらんだろう
    高級言語における「例外」そのものの有用性については、今更疑う必要があるとは
    思えん、モダンな高級言語には大抵例外がある
    C++の場合に限って言えば、C++特有の理由によって例外が使えないシロモノに
    なっている 

910 デフォルトの名無しさん [sage] 2010/04/22(木) 14:44:56 ID: Be:
    goには無いな
    理由はエラー処理をサボるからだそうな
    GCと相性はいいがね 

911 デフォルトの名無しさん [sage] 2010/04/22(木) 14:46:09 ID: Be:
    goには無いな
    理由はエラー処理をサボるからだそうな
    GCと相性はいいがね
    大域脱出を多用したらわかりにくいのは当然だが。

912 デフォルトの名無しさん [sage] 2010/04/22(木) 14:53:10 ID: Be:
    同じことなので2回言いました^^ 

913 デフォルトの名無しさん [sage] 2010/04/22(木) 14:58:22 ID: Be:
    携帯からなんで切れたと思ったら書けてた
    すまんw 

914 デフォルトの名無しさん [] 2010/04/22(木) 14:59:03 ID: Be:
    >>911
    >大域脱出を多用したらわかりにくいのは当然だが。
    これだーーーーーーーーー!!
    そうなんだよね、当たり前なんだよね。言葉が見つからなかった。

    例外処理の説明してる人間が、馬鹿に過ぎるんだよ、
    if文の条件処理程度の意味合いで、説明しすぎてると思う。
    大域で扱われる構文という、ところをもっとちゃんと説明しないから、
    >>901で書いたような組織が生まれる。というかストラップ先生は
    悪くなく、あの人は言語設計者としての記述なのに、それを読めずに
    ストラップ先生が、例外を積極的に使って欲しいと書いてるから、
    プログラマーは全部キャッチしろ、とか言うプロジェクト標準を書く
    プログラムが組めないPMを据えるCMM3組織にCMM3を与える
    CMM認定機関が白痴なんだと思う、経済学部出身者がCMMの
    公認トレーナーになっていて、経済学部出身の公認トレナーに発注してる、
    棒巨大企業がおかしいんだと思うんだ。

    と、まぁ愚痴はこの位で、でもそれでも、例外の構文はどうなんだろ?
    そっちはどう? 大域なので、
    try{
      一つ目
      二つ目
      三つ目
    }
    catch{
    }
    そう考えると、この構文は必要ないと思うんだ。
    たまたま、一つめと二つめで似たような例外をスルーする可能性が有っても、
    それはたまたまで、キャッチ節をまとめるメリットは、タイプ量が少し減る
    だけで、可読性、見通しに関しては逆効果だと思う。

915 デフォルトの名無しさん [sage] 2010/04/22(木) 15:09:02 ID: Be:
    構文に関してはあんなモンじゃないの?
    他にあんまいいのも思いつかないけど 

916 デフォルトの名無しさん [sage] 2010/04/22(木) 15:12:36 ID: Be:
    後携帯じゃないんだからw
    ストラウストラップなw 

■_ 本日の巡回から

2010年04月21日

■_

毎度おなじみ
Amazon.co.jp: かんたんC言語 (プログラミングの教科書): 大原 竜男, 大川内 隆朗: 本 というのを見かけたので、ぱらぱらと眺めてみました (つか、索引と目次とで怪しそうなところの当たりをつけてそこを見るんですが)。 残念ながらこの本でも、「参照渡し」が登場していました。 だから C には「参照による呼び出し (call by reference)」はないんだってば ○| ̄|_ 「参照渡しをポインターを使ってエミュレートする」とかではなしに、 「参照渡しとは~」ですからねえ(細かいところ忘れた)。

筆者は違いますがシリーズものらしく Amazon.co.jp: かんたんC#: 伊藤 達也, techbank.jp: 本 Amazon.co.jp: かんたんJava: 株式会社インサイトテクノロジー 今川 美保, techbank.jp: 本 Amazon.co.jp: かんたんVisualBasic: 高橋 広樹, techbank.jp: 本 なんてのも。 Java でも「参照渡し」が出そうな気がしますがチェックしてません。

・準備
GC 本で取り上げている処理系のソース落としておかないとだわ。

■_ 比較

というかカンペ (cheet sett) なんですが。 Hyperpolyglot: Lisp: Common Lisp, Scheme, Clojure, Emacs Lisp

common lisp (1984) scheme (1975) clojure (2007) emacs lisp (1985)
version used SBCL 1.0.29 PLT Scheme 4.2.1 Clojure 1.1.0 Emacs 23.1.1
version sbcl —version mzscheme —version displayed by repl on startup emacs —version
repl M-x slime DrScheme
mzscheme
M-x shell M-x lisp-interaction-mode
shebang #!/usr/bin/env sbcl —script #!/usr/bin/env mzscheme —script #!/usr/bin/env java -cp /PATH/TO/clojure.jar clojure.main see note, M-x load, M-x load-file
cell types value, function, struct, class, … value value value, function, struct, …
case sensitive no yes yes yes
argument separator whitespace whitespace whitespace and commas whitespace
falsehoods nil () #f false false nil nil ()
true, is true symbol? t, yes #t true, no true, no t, yes
nil, is () null?, is () symbol? nil, yes, yes null, yes, no nil, no, no nil, yes, yes
type-of type-of type class type-of
type predicates null symbolp atom consp listp numberp characterp stringp null? symbol? none cons? list? number? char? string? nil? symbol? none none list? number? none string? null symbolp atom consp listp numberp characterp stringp
set property (setf (get 'x :prop) 13) none (def x (with-meta 'x { :prop 13 })) (setf (get 'x :prop) 13)
get property (get 'x :prop) none (get (meta x) :prop) (get 'x :prop)
remove property (remprop 'x :prop) none none (remprop 'x :prop)
comment (+ 1 1) ; adding
(+ 1 #| adding |# 1)
(+ 1 1) ; adding
(+ 1 #| adding |# 1)
(+ 1 1) ; adding (+ 1 1) ; adding
ten primitives
atom (or list?) atom list? list? atom
quote quote quote quote quote
eq (equal?, =) eq, equal, = eq?, equal?, = = is true for symbols and lists with identical members eq, equal, =
car car, first car, first first car
cdr cdr, rest cdr, rest rest, next cdr
cons cons cons cons cannot make a cons cell cons
cond (cond ((> x 0) 1)
xxxxxx((= x 0) 0)
xxxxxx(t -1))
(cond ((> x 0) 1)
xxxxxx((= x 0) 0)
xxxxxx(else -1))
(cond (> x 0) 1 (= x 0) 0 true -1) (cond ((> x 0) 1)
xxxxxx((= x 0) 0)
xxxxxx(t -1))
lambda (lambda (x) (* x x)) (lambda (x) (* x x)) #(* % %) or
(fn [x] (* x x))
(lambda (x) (* x x))
label set,setq,defun define def,defn set,setq,defun
apply ((lambda (x) (* x x)) 2) or
(apply #'(lambda (x) (* x x)) '(2))
((lambda (x) (* x x)) 2) (#(* % %) 2) or
((fn [x] (* x x)) 2) or
(apply #(* % %) '(2))
((lambda (x) (* x x)) 2) or
(apply #'(lambda (x) (* x x)) '(2))
arithmetic
以下略

こうしてみると結構違うもんだねえ。 あ、このカンペ、 Hyperpolyglot: Math Languages: Sage, Octave, R, J, Factor Hyperpolyglot: ML: Standard ML, Alice, OCaml, F#, Scala というこゆいのがそろってます。

■_ Parrot

これは月例リリースですよね…

Parrot 2.3.0 Released! - nntp.perl.org

Parrot 2.3.0 Released!

  "Truth is what stands the test of experience."
     - Albert Einstein

On behalf of the Parrot team, I'm proud to announce Parrot 2.3.0 "Samoan
Lory." Parrot (http://parrot.org/) is a virtual machine aimed at running
all dynamic languages.

Parrot 2.3.0 is available on Parrot's FTP site, or follow the download
instructions at http://parrot.org/download. For those who would like to
develop on Parrot, or help develop Parrot itself, we recommend using
Subversion on the source code repository to get the latest and best
Parrot code.

Parrot 2.3.0 News:
- Core
  + Allow passing parameters to the dynamic linker ('dlopen' improved)
  + loadlib opcode added
  + Calling conventions are now much more consistent, and follows
natural
    semantics of handling arguments and return values
  + Recursive make for src/dynpmc removed
  + Datatype STRINGNULL for a single Null STRING added
  + config_lib.pasm replaced with config_lib.pir
- Platforms
  + Improved handling of new compilers
  + Cygwin packages will be updated again with Parrot releases
  + Fedora packages add desktop files
  + gzip and bzip2 compressed tar files for releases
- Tools
  + tapir executable added; tapir is a TAP test harness
  + Added TAP options --merge --ignore-exit
- Miscellaneous
  + 3 month cycle for supported releases
  + Review and vote of GSoC applications


Many thanks to all our contributors for making this possible, and our
sponsors for supporting this project.  Our next scheduled release is 18
May 2010.

Enjoy!

■_ カリー化

Why I Love Currying | Amateur Topologist

2010 02.12

Why I Love Currying (なぜわたしはカリー化が大好きなのか)

So I've been playing around with Haskell a lot lately and using it for various random 
stuff; I haven't progressed to the point where it's my go-to language for random 
programs (I still use Python for that), but I at least have an idea of how to use it. 
And there's one feature of Haskell that I miss sorely when I write code in Python, or 
pretty much any other vaguely functional language: currying.

かなり最近になってから Haskell をさまざま用途に (for various random stuff) 使うように
なりました。random プログラム群のためのわたしの go-to 言語 (この種の用途にはまだPython
を使っています)という point までは progress していませんが、最低限どのように使うのかと
いうことは把握しました。そして Haskell にはわたしが Python でコードを書いたときにそれ
がなくて非常に悲しいとか、広く他のほぼすべての幅広い範囲の関数型言語が持っている機能が
一つあって、それがカリー化です。


In Haskell, every function takes a single argument. A function of multiple arguments, 
such as map, which applies a function to every element in a list, actually only has 
one argument; for example, map can be interpreted either as taking a function and a 
list and returning a list, or as taking a function and returning a function that takes 
a list and returns a list. More formally, in Haskell, these two type declarations are 
equivalent:

Haskell では、すべての関数は引数一つを取ります。リスト中のすべての要素に対して関数を適
用する map のような複数の引数を取る関数は実際には一つの引数しか受け取りません。たとえ
ば map は、一つの関数と一つのリストを引数にとってリストを一つ返すものであるかあるいは
関数を引数にとり一つのリストを引数にとり一つのリストを返すもののどちらかいずれかに解釈
可能です。より形式的には、Haskell では以下の二つの型宣言は等価なものです:


map :: (a -> b) -> [a] -> [b]
map :: (a -> b) -> ([a] -> [b])


This process, of taking a multi-argument function and converting it into a series of 
single-argument functions is known as currying, after the mathematician Haskell Curry 
(who, obviously, is also the source of the name Haskell); the process of partially 
applying arguments to a function in this way is known as ‘partial application', but is 
also called currying. One of the most obvious examples of currying is in sections: 
the function (0 ==) is syntactic sugar for (==) 0, and returns whether its argument is 
equal to zero. Furthermore, we can also partially apply the predicate to filter, to make 
a function that filters its argument on a fixed predicate. So, these three examples are 
completely equivalent:

複数個の引数をとる関数を、一つしか引数をとらない関数の並び (series) に変換するこのプロ
セスはカリー化として知られています。これは数学者である Hasekll Curry の名前から命名さ
れました(見ての通り、この人は Haskell という言語名の元になった人でもあります)。このや
り方でのある関数に対する部分的な引数適用 (partially applying arguments) の手順は“部分
適用”(partical application) として知られていますが、カリー化とも呼ばれています。カリ
ー化のもっともはっきりわかる例の一つが section にあります:関数 (0 ==) は (==) 0 に対す
る syntactic sugar (構文糖)であり、その引数が0と等しいかどうかを返します。それに加えて、
固定された predicate を使ってその引数をフィルタリングする関数を生成する目的でフィルタ
ーに対して predicate を部分的に適用することもできますですから、以下の例は全て全く等価
なものなのです:


removeZeros :: [Integer] -> [Integer]
removeZeros xs = filter (\x -> x /= 0) xs
removeZeros xs = filter (/= 0) xs
removeZeros = filter (/= 0)


(where /= is Haskell's not-equal operator). The first is the most explicitly-written version,
using no currying at all. The second curries the predicate; (/= 0) x is the same as x /= 0. 
Finally, since removeZeroes applied to an argument is the same as applying filter (/= 0) 
to it, we might as well define the former as the latter. Or, to take another example, 
look at the sortBy: it has type (a -> a -> Ordering) -> [a] -> [a], where 
Ordering is a datatype that can either be EQ, LT or GT for equal, less than, or greater 
than. So if you have some custom function you want to sort a list on, you can just say 
mySort = sortBy f and it will be the same as writing mySort xs = sortBy f xs, only cleaner 
and neater. Or in my Data.Nimber module (specifically lines 38, 39, and 43), many operations 
on Nimbers that're required in order for me to call then ‘numbers' are just the identity 
operation. So instead of saying abs x = x, I can just say abs = id.

(/= は Haskell の not-equal 演算子です)。最初のものは最も explicitly に書かれたバージ
ョンでカリー化を使っていません。二番目のものでは predicate をカリー化しています。(/= 0) 
x は x /= 0 と等価です。最終的に、ある引数に適用された removeZeroes はその引数にフィル
ター (/= 0) を適用したときと同じなので、後者と同じように前者を正しく定義することが可能
です。あるいは別の例として、SortBy を見てみましょう:この関数は (a -> a -> 
Ordering) -> [a] -> [a] という型を持ち、ここでOrdering は EQ (等しい)、LT (より
小さい)、GT (より大きい) のいずれかであるようなデータ型です。もしあるリストをソートす
るためになんらかのカスタム関数が欲しいのなら
you can just say

mySort = sortBy f

and it will be the same as writing

mySort xs = sortBy f xs,
only cleaner and neater.

あるいはわたしの Data.Nimber モジュール (specifically lines 38, 39, and 43) の中で 
Nimbers に対する操作の多くが呼び出しを要求しているのですがそれは identity operation
なので abs x = x と書く代わりに abs = id とだけ書けるのです。


Furthermore, without currying, you couldn't have variadic functions; in order to work
inside Haskell's type system, the two types a -> b -> c and a -> (b -> c)
have to be the same type. The full explanation involves typeclasses, and is (in my opinion)
worth a read, because it's a good explanation of a pretty horriblexcellent
(it's both at once, you see) type system hack.

その上、カリー化なしでは variadic 関数を持つことができません。Haskell の型システムの内
側で動作させるためにはa -> b -> c と a -> (b -> c)  という二つの型は同じ型
でなければなりません。full explanation は型クラスを involve し、そしてそれは(私見では)
読む価値があるものです。なぜならこれが a pretty horriblexcellent な(it's both at 
once, you see) 型システムのハックの良い説明であるからです。


As an aside, this also means that id :: a -> a, the identity function, is in a 
sense the same thing as ($) :: (a -> b) -> a -> b, which is function 
application. You can see this by substituting (b -> c) for a in the type of id, 
then removing parentheses:

As an aside,
これはまた identity 関数である id :: a-> a が関数適用を使った
($) :: (a -> b) -> a -> b
と同じということも意味しています。
これは a を (b -> c) に置き換え、さらにカッコを取り除くことで作り出せます:


id :: a -> a
id :: (b -> c) -> (b -> c)
id :: (b -> c) -> b -> c

So, in particular, f `id` x is the same as f $ x, which is just f x. Another way to 
think of this is that f `id` x = id f x = (id f) x = f x.

ですからとくに  f `id` x は f $ x 、つまり単に f x としたときと同じなのです。
これを考えるもうひとつの方法は  f `id` x = id f x = (id f) x = f x です。


いまいち煮込みが足りない…

■_ 本日の巡回から


一つ前へ 2010年4月(中旬)
一つ後へ 2010年5月(上旬)

ホームへ


Copyright (C) 2010 KIMURA Koichi (木村浩一)
この文書の無断転載はご遠慮ください(リンクはご自由にどうぞ)。

メールの宛先はこちらkbk AT kt DOT rim DOT or DOT jp