ときどきの雑記帖 リターンズi戦士篇

I'd just be the catcher in the rye and all. I know it's crazy, but that's the only thing I'd really like to be. I know it's crazy.

The catcher in the rye
J. D. Salinger

著作権保護期間の70年延長に反対

検索エンジン経由でこられた方へ

このページの内容は日々更新されます。 そのため、検索エンジンに引っかかったものがここに残っているとは限りません。 同じ内容のものは zakkicho[0-9]+.html なページに多分あります。 特に逆ポーランド記法←→中置記法の変換に関して探している人は ここ とか ここ にあります。

最新エントリ (何日分あるかは不定)

2010年02月08日

■_

ちと身辺が慌しくなってまいりました。

■_ mbなんちゃらはむずい

めもがき:2010年2月7日分
2010/2/7(Sun) ○[NetBSD] libedit I18N への道(その3)

@ mbtowc(3) は使うな

まずは私が source-changes-d@ に投げた 指摘の 4. についてすな。
mbtowc(3) をなぜ library function が使っちゃ駄目かの説明をば。

仕様には以下の一文があります。

    For a state-dependent encoding, this function is placed into its initial state 
    by a call for which its character pointer argument, s, is a null pointer.
    Subsequent calls with s as other than a null pointer shall cause the internal 
    state of the function to be altered as necessary.

そうです、eucJP や Shift_JIS そして UTF-8 のような stateless encoding だけを使ってると
忘れがちなのですがmbtowc(3) は内部にステート情報を持つ上「静的に確保」されるので、
strtok(3) なんかと同様に再入可能じゃないのです。

(略)

それにですね、そもそもこういう1バイトづつ読み込んで変換可能かを試みるってなコードの場合
mbtowc(3) を使うとバッファ管理が自前になるのでひじょーに生産性が悪いんですよ。

(略)

とてもめんどくさいです >< これを mbrtowc(3) を使うように書き直すバヤイ、こっちの関数
は変換途中のマルチバイトの欠片を mbstate_t 中に保持してくれるので、MB_*_MAX やらバッフ
ァ管理を意識する必要がなくなり

    #include <locale.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <wchar.h>

    int
    main(void)
    {
    	FILE *fp;
    	mbstate_t st;
    	size_t n = 0, ret;
    	char ch
    	wchar_t wc;

    	setlocale(LC_CTYPE, "");

    	fp = ...

    	mbrtowc(NULL, NULL, 0, &st);
    	for (;;) {
    		ch = (unsigned char)fgetc(fp);
    		if (ferror(fp))
    			abort(); /* file read error */
    		if (feof(fp))
    			break; /* end of file */
    		ret = mbrtowc(&wc, &ch, 1, &st);
    		if (ret == (size_t)-1)
    			abort(); /* illegal byte sequence */
    		if (ret != (size_t)-2) {
    			if (wc == L'\0')
    				break; /* NUL terminator */
    			wprintf(L"%lc", wc);
    		}
    	}
    }

とコードが若干スッキリします、まぁ前回も書いたけど fgetwc(3) 使えばもっと簡単に

(以下略)

あーそういえば、glibc の regex とか gawk とか grep やらで mbrtowc を使うように 変えられてたような記憶があるけどそういうことだったんでしょか。

http://www.opengroup.org/onlinepubs/9699919799/functions/mbsrtowcs.html

DESCRIPTION

For mbsrtowcs(): [CX] [Option Start]  The functionality described on this reference 
page is aligned with the ISO C standard. Any conflict between the requirements 
described here and the ISO C standard is unintentional. This volume of POSIX.1-2008 
defers to the ISO C standard. [Option End]

The mbsrtowcs() function shall convert a sequence of characters, beginning in the 
conversion state described by the object pointed to by ps, from the array indirectly 
pointed to by src into a sequence of corresponding wide characters. If dst is not a 
null pointer, the converted characters shall be stored into the array pointed to by 
dst. Conversion continues up to and including a terminating null character, which 
shall also be stored. Conversion shall stop early in either of the following cases:

    * A sequence of bytes is encountered that does not form a valid character.
    * len codes have been stored into the array pointed to by dst (and dst is not 
      a null pointer).

Each conversion shall take place as if by a call to the mbrtowc() function.

(略)

The implementation shall behave as if no function defined in this volume of 
POSIX.1-2008 calls these functions.

ほう。

■_ 続・コメント欄は燃えているか

なんつーかそのなんだごにょごにょ。 それはともかく、コメントを参照しづらいのはどうにかしてもらえないのかなあ。 コメントがついてるのかすら分かりづらいし


OpenMPの実行時ライブラリと並列ループ(1/4):CodeZine
>Sleep(1)を200回繰り返したなら200msかかると推測されるが、~
が理解できないほど基本文法が読み取れないのでしたら、
この記事の「対象読者」から除外されてしまいます。
除外された方が、延々と意味不明なコメントを残されるのは迷惑です。

私はこの言葉が理解できないと入っていません。
そもそも、このインドリさんの記事のどこに書いているのかと聞いているのです。
何度もいいますが、WindowsリアルタイムOSじゃないので誰も思いません。って言っているじゃないですか。
あなた方は根本的な文の内容の受けとり方がズレています。
記事の内容についてのコメントも同じです。
この記事の内容は、OpenMPのループを使うとスピードがUPするけども、
サンプルでは実際とは違うから

> 実務でループ構文を使用する際には、このサンプルをもとに処理効率を実際に測定するプログラムをコーディングするか、
市販の並列処理に対応した開発ツールを使用してパフォーマンスをよく確認してください。

と書いているのだと思います。
さらに、OpenMPは見かけとスピードが違うからなんか早いと感じたら疑うことと書いているじゃあないですか?
私の会社の人たちも全員同じ意見です。


>筆者が想定している読者はCの基本的文法をマスターし、
並列化プログラミングに興味を持っている方です。

記事にこう書いてあるのに、どうして対象読者から除外だと言われないといけないのですか
ここのサイトの管理者はこういった誹謗中傷者たちをどうして放っておくのですか?


>自己弁護は自分の名前でしましょうよ。
それ私のこと?もしそうだとしたらどうして私だけ実名を名乗らないとだめなのですか?
そのことで私に何か被害があったらどうするのですか?
みんなもペンネームで書いているじゃあないですか?
Cお姉さん (2010/02/09 23:54)
ドリィちゃんへ
はい。私は人の欠点をついたり、平気で傷つけたりするのは嫌いな人です。
でも、人は絶対誰も傷つけないとはいかないものですけどね。


セロへ
勉強している読者にコメントを書くなというのですか。
貴方も聞きたいことがあって聞いているのではないですか?
読者にコメントをするなというのであれば、コメント欄をなくせばいい。
全部ね(貴方達も)
このサイトは読むだけで楽しみにしている人はコメントを書けず、
文句をつける人はコメントをかける場所なのですか?
悪口、欠点つきサイトは、今はやりのサイト虐めや、自殺問題(社会問題)そのものです。
このサイトに管理者はいないのですか?
人の欠点や悪口ばかり載せて、本当に読めば不愉快になるサイトですね。
皆、勉強しているので、下らない事にこだわった文ばかりで、
次の新しい記事はないのですか?


久内へ
筆者はサンプルでOpenMPを使ったらスピードがUPすると言っています。
でも、何度もサンプルだから実際とは違うと注意を書いています。
そもそも、Sleepの事が本題ではない記事だと思います。
なぜ、Sleepにこだわるのですか?
何の命令文でも良いではないですか?
「 /* 逐次的に何かの処理をする */」と書いているじゃあないですか。

>処理効率を実際に測定するプログラムをコーディングするか、
市販の並列処理に対応した開発ツールを使用してパフォーマンスをよく確認してください。
って書いているじゃないですか。

Sleepという命令が嫌なら、自分の好きな命令文を心で思っていればいいじゃないですか。
何度も書きますが、無限の組み合わせがあるからじゃないですか?
筆者が書こうとしていることと、すごくずれていますよ。
そんなに一語一句文句をつけたら、それこそ文に「、」「。」がないとか、
?がついていないとか言っているのと同じですよね。


επιστημη へ
別にSleep命令でも良いと思うけど。
どうしてSleep命令にこだわるのか・・・

>- Sleep(1)を200回繰り返したなら200msかかると推測されるが、実測値があまりにかけ離れている。
筆者がどこに書いていますか?
無限の中からあなたの思うようなサンプルを選ぶのは大変ですね。
Sleep嫌いですか?
(何を書いても気に入らないのでは)
その様にとれますよ。
心の広い方ならば、この著者はSleepを使ったんだな~と思っていればいいんじゃないですか?
サンプルなんですから(私がやったら動いたし)
私は勉強して楽しんでいるので邪魔をしないで欲しいのです。
間違った記事ではないと思います。
Cお姉さん (2010/02/09 01:11)
長文になるとどうしても個性が出てしまうもんですねー。
ドリィちゃん (2010/02/08 20:03)
筆者は

>- Sleep(1)を200回繰り返したなら200msかかると推測されるが、実測値があまりにかけ離れている。

の様な事は何度見ても書いていません。
どこに書いているのですか?
我々と書いていますが、グループになっているのですか?
この記事を見ている私とって、こんなコメントが目にあたると迷惑しています。
間違った事は書いていませんよ。
筆者が書いていない事を書いていると決め付けて意見を書くのはやめてほしいです。
知らない人が読むとまるで筆者がこの様なことを書いていると思ってしまいます。
むりやり、記事になん癖をつけているように見えます。
楽しんでいる読者に迷惑をかけないでほしい。
このサイトはどうしてこんなコメントを載せているのですか?
プロならばWindowsはリアルタイムOSではないから、誰もそんな事を思いません。
どこにも筆者はそんなこと書いていません。よく読んでください。
ほんと、こんな人迷惑です。
こんな事ばかり書くから筆者は次の記事に移れないのではないですか?
プロなら思わない様な事でダラダラ書き、文をとめないでください。
この手のプログラムは、きっちり書こうと思うと、画面いっぱいになりますよ。
プロならばそんな事察しますよ。
人って沢山ダラダラいっぱい書いていたら読む人が大変です。
他の方法もあるけれど、この記事はたまたまSleepを使っただけで、
こんな方法、あんな方法といっぱい無限に筆者は書いたほうが良かったというのですか?
(そんな記事疲れるなあ、Cお姉さんは。)
みんなの勉強のため、読者は色々打って考えるのがいいのでは?
だから勉強になるのでは?
筆者が意見書かないのは、貴方が屁理屈ごねてダラダラ・ダラダラ書いてくると思っているからかも。
(あくまでも私の想像ですよ)
だって、私もうんざりしているから。

>- 「1ループあたりの処理時間と処理回数を増加させるにつれパフォーマンスが向上していることと...」とあるが、"パフォーマンス"とは何を指すか。処理時間? スレッド数の違いによる処理時間の比?
>- 「ループ構文の高い処理効率を確認できます」の"処理効率"とは何を指しているか。
それもプロならばわかりませんかぁ?

>これ以上論を重ねる気はありません。
私ははじめから論を重ねる気はありません。
迷惑をしているのでこういうコメントは書かないで欲しいのです。
本当はこんなことまで書きたくなかったのです。
察してください。


Cお姉さんより
Cお姉さん (2010/02/08 19:40)
>聞いているだけなら、ね。
「ただ聞いているだけで」と書いていたのに・・・
その意見は意味がわかりません。
それと、「間違った問題のある記事が掲載され続けている」という意見は酷過ぎます。
私が試したところこの記事のとおり動きましたし、間違っていませんよ。
会社で他の人にも間違っているのか聞いてみましたが、
別に間違っていないという意見でした。
ってことは、人それぞれ方法があるだけで、
間違っていると思っているのは貴方の意見です。
間違っていないと思っている人もいるのです。
なので、間違った記事と決め付けて書くのは、よくないと思います。

私もプログラミングを知り尽くしているわけではなく、
勉強し続けていますが、サンプルコードの意味がわからなかったのは、
貴方がわからなかっただけなので、間違っているのではないと思います。
繰り返しになりますが、意味がわからないので疑問を投げているだけならば、
間違った問題のある記事と決めてつけて書くのはよくないです。
このライターを傷つけていると思います。

私は、意見は人それぞれなので良いのですが、
間違った問題のある記事と決め付けて書いたり、
他のライターの迷惑と書くのは良くないと思っています。
(このライターさんに謝ったほうがいいと思います。)

Cお姉さんより



次回の記事を待っています。
Cお姉さん (2010/02/08 13:53)
スピードはハードとか条件によって異なるし、
無限に方法は有るのだけど、
たまたま説明のためにSleepを使った場合の事を書いていると思います。
Sleepを使うか、使わないかは自由なので、
ライターは

>この連載で解説に使用するサンプルコードはあくまでもOpenMPの基礎を理解するためのものであり、
実務でOpenMPを使用する際にはよく理解してから用途に適したプログラミングを行ってください。

と書いているのだと思います。
ただ、気になることがあって、ライターに聞いているだけならば、「他のCodeZineライターにも不本意だし迷惑です。」
と書いているのは書きすぎだと思います。
プログラミングを知っている人ならば、解説に使用するサンプルコードと読めば、
意味がわかるので、迷惑とは思わないと思います。
人それぞれ、意見ややり方は違うけど、
その事で人を攻める様な書き方(人を傷つける文)は、
大人としてよくないです。
きちんと、始めから最後までよく読んでから書きませんか。
新人の時は、はやとちりで謝ればすみますが、
年々に社会人として責任が生じてくるものです。
Cお姉さんより


次回の記事は何時ごろ載りますか?教えて下さい。
Cお姉さん (2010/02/08 00:45)

いやもうなんというか(笑)

■_ C++ FQA

例によって五月雨式にやっていきます。


C++ FQA Lite: Defective C++

* No compile time encapsulation (コンパイル時の encapsulation がない)

In naturally written C++ code, changing the private members of a class requires 
recompilation of the code using the class. When the class is used to instantiate 
member objects of other classes, the rule is of course applied recursively.

自然に書かれた C++ のコードでは、あるクラスのプライベートメンバーを変更することはその
クラスを使うコードの再コンパイルを要求することになります。そのクラスが別のクラスのメン
バーオブジェクトのインスタンス化のために使われたときも、当然この規則が再帰的に適用され
ます。

This makes C++ interfaces very unstable - a change invisible at the interface level 
still requires to rebuild the calling code, which can be very problematic when that 
code is not controlled by whoever makes the change. So shipping C++ interfaces to 
customers can be a bad idea.

このことは C++ のインターフェースをとても不安定なものにしてしまいます。インターフェー
スレベルでは不可視な変更でさえ、それを呼び出しているコードの再ビルドを要求してしまうこ
とになりますが、これはそのコードが、変更を行った人物によってコントロールされていないも
のであったときに非常に問題になるかもしれません。ですから、C++ のインターフェースを顧客
に対して出荷 (shipping) するというのは bad idea な可能性があるのです。

Well, at least when all relevant code is controlled by the same team of people, the 
only problem is the frequent rebuilds of large parts of it. This wouldn't be too bad 
by itself with almost any language, but C++ has...

確かに、最低限すべての relevant code が同じチームの人間によってコントロールされている
場合には、問題となるのはプログラムの large part に対する頻繁な再ビルドだけです。このこ
とはほとんどの言語においては悪すぎる (too bad) ことにはなりません。しかし C++ は…


* Outstandingly complicated grammar (とんでもなく複雑な構文)

"Outstandingly" should be interpreted literally, because all popular 
languages have context-free (or "nearly" context-free) grammars, while C++ 
has undecidable grammar. If you like compilers and parsers, you probably know what 
this means. If you're not into this kind of thing, there's a simple example showing 
the problem with parsing C++: is AA BB(CC); an object definition or a function 
declaration? It turns out that the answer depends heavily on the code before the 
statement - the "context". This shows (on an intuitive level) that the C++ 
grammar is quite context-sensitive.

"Outstandingly" は文字通りの意味で解釈されるべきものです。なぜならばすべての
popular な言語は文脈自由、もしくはほぼ文脈自由な文法 ("nearly" context-free 
grammars)を持っているのに対して、C++ は undecidable な文法を持っているからです。あなた
がコンパイラーやパーザーといったものが好きであるのならその意味を多分ご存知のことでしょ
う。もしそういったことに詳しくないのなら、例としてAA BB(CC); を C++ がどのように解析す
るか考えてみてください。これはオブジェクトの定義 (object definition) と関数宣言 
(function declaration) のいずれでしょうか? その答えはこのコードの前の文 (statement)、
つまり "context" (コンテキスト、文脈) に非常に依存しているものです。このこと
は C++ の文法が非常に context-sensitive であることを (intuitive level で) 示しています。

In practice, this means three things. First, C++ compiles slowly (the complexity takes 
time to deal with). Second, when it doesn't compile, the error messages are frequently 
incomprehensible (the smallest error which a human reader wouldn't notice completely 
confuses the compiler). And three, parsing C++ right is very hard, so different 
compilers will interpret it differently, and tools like debuggers and IDEs 
periodically get awfully confused.

実際の状況では、これには三つの意味があります。第一に、コンパイルが遅い(複雑なものは
それを処理するのに時間を要します)。第二に、コンパイルが行われなかったときにエラーメッ
セージがしばしば incomprehensible 
(the smallest error which a human reader wouldn't notice completely confuses the compiler).
なものとなってしまう。
そして三番目、C++ を正しく解析することはとても難しいためにコンパイラーが異なれば解釈も
異なるであろうということであり、同時に、デバッガーや IDE のようなツールが periodically 
get awfully confused するということです。

And slow compilation interacts badly with frequent recompilation. The latter is caused 
by the lack of encapsulation mentioned above, and the problem is amplified by the fact 
that C++ has...

さらに、遅いコンパイルは頻繁な再コンパイルとの相性がよくありません。後者の問題は先に指
摘したカプセル化の欠如 (lack of encapsulation) によって引き起こされます。そしてこの問
題は C++ が抱えるある事実によって増幅される (amplified) のですがそれは…

* No way to locate definitions (locate definitions の手段がない)

  

■_ 本日の巡回から

■_ ん?

プログラム板雑談スレッド Part 3 
569 デフォルトの名無しさん [sage] 2010/02/09(火) 22:18:08 ID: Be:
    ありゃ。気がついたら Nils M Holm氏によるLightweight Compiler Techniquesなどが
    パブリックドメイン化されているね。和訳したいけど暇ねえよ。orz
    ttp://www.bcl.hamilton.ie/~nmh/t3x.org/zzz/ 

570 デフォルトの名無しさん [sage] 2010/02/09(火) 22:59:48 ID: Be:
    何!
    それはとても興味深いタイトル
    読んでみよう 
Tech Stuff
Nils' Tech Stuff

 372KB 	Die Anatomie einer Programmiersprache 	1994 	book, 135p 	(See Lulu Press, 2006)
1.28MB 	Lightweight Compiler Techniques 	1996, 2002 	book, 262p 	(See Lulu Press, 2006)
 128KB 	Logic Programming in Scheme 	2007 	book,  41p 	(See Lulu Press, 2007)
  29KB 	Mini Scheme (+strings, chars etc) 	2009 	program 	R4RS Scheme subset
 262KB 	Scheme 9 from Empty Space 	2008 	book, 130p 	(See Lulu Press, 2008)
 215KB 	Scheme 9 from Empty Space 	2009 	program 	R4RS Scheme interpreter
 428KB 	Sketchy LISP, 3rd. Ed. (PDF) 	2008 	book, 180p 	(See Lulu Press, 2008)
 140KB 	Sketchy LISP, 4th. Ed. (HTML) 	2009 	online book 	(See above)
 744KB 	zen-style programming 	2008 	book, 336p 	(See Lulu Press, 2008)

All of the above stuff is now in the public domain no matter what the license files in 
the individual packages say. In case your country does not have a concept like the 
public domain, this means:

    * Do whatever you want with it. I don't care.

-- Nils M Holm, 10/2009 

ほほー。

2010年02月08日

■_

・スーパーボウル
録画はしたものの観る時間がががが。

・工人舎のちっこいの
現物を初めて見ました。 確かに小さい。キーボードはちょっと微妙かなあ。 財布に余裕があればねえ(最近こればっか)。

・おられる
むかーし聞いた話なんですが、どこかの社長だか役員の人が別の会社を訪れて 「×☓君はおりますか」と受付に尋ねたところ、 「ただ今×☓はおりませんが」的な返事が受付から返ってきました。 んで、その社長(か役員か)氏は突如として、 「なぜ同じ会社の人間に敬語を使うのか」と烈火のごとく怒り出したとかなんとか。 という話を 「おられる」は誤用か? | 株式会社きじねこ を読んで思い出しました。 「おりますか」と「おられますか」は違うものですけどね。はい。

■_ エンバカもなあ


Delphi 6 Personalのインストールについて | OKWave

こんにちは。

現在 Windows vista Ultimate 32bitに参考書の付録で付いていた
Borland Delphi 6 Personalをインストールしようとしたのですが
インストール番号とキーの入力を求められています。
しかし、参考書通りに進めようとしても、現在そのライセンス
情報を登録するURLが違っているようで登録ができません。

どなたか上記のライセンス情報を登録する方法をご存じありませんか?

Borland C++ は 5.5.1を今でも配布しているのに、Delphiは… Turbo Delphiも配布してませんし。

■_ 関数型言語は…

もいっちょOKWaveから。


大学でC言語やJava等を習いました. | OKWave

大学でC言語やJava等を習いました.
次のセメスターからは手続き型言語とは違う
SMLという関数型言語を講義を履修しなければならないようなので,
春休み中に勉強しておこうかと思いました.
しかしSMLを少しかじってみたのですが関数型言語は代入という概念もなく
数学のような感じであまりおもしろくないと感じ,関数型言語を学ぶ意欲が少し無くなってしまいました.

そこで関数型言語を学ぶ意義についてどなたか教えていただけないでしょうか?
よろしくおねがいします.

■_ とっととまとめてしまおう

というわけでいいかげん蹴りけりをつけようということで。
明快入門コンパイラ・インタプリタ開発 C処理系を作りながら学ぶ (林晴比古実用マスターシリーズ)

まず、作成する言語の仕様はおおむねこんな感じです。

CCI-C の言語構成
・変数は int 型のみをサポートし、初期化はできない。配列は1次元のみを利用できる。
・定数は10進整数および文字定数のみをサポートする。またprintf()の第1引数としてのみ文字列リテラルを利用できる。
・エスケープ文字は \n のみをサポートする。それ以外の「\+1文字」パターンでは'\'を単純に抜く。
・関数の型はvoid および int だけである。引数は int 型(およびvoid)のみ利用できる。
・配列を引数渡しすることはできない。int型関数は末尾にreturn文が必要。
・演算子は次のものを利用できる。多重代入もできる(a=b=10)。
・組み込み関数としてprintf()、input(),exit()が用意されている。
  scanf() の実装はできない(ポインタ機能がない)ので、数値入力用にinput()を用意した。
  printf() の第1引数は文字列リテラルで指定する。
  printf() 関数は、引数2個までという限定機能である。
・C の printf() 関数は、不適切な書式指定により暴走する可能性がある。たとえば
  printf("%s\n", n);  は動作不定である。CCI-Cでは、書式指定が適切な整数出力系
  であることをチェックし、不正であればエラー表示する。
・制御文はif for while do-while switch break continue を利用できる。goto文はない。
・コメントは範囲コメント/*~*/と1行コメント//が利用できる。
・次のように入力すると生成コードを表示できる
  cci myprog.c --code
・C言語の「こんなこともできる」的機能はほとんどサポートしていない。
100;  //意味のない式
"abcde";

int b, ary[10];
b = 2[ary];

if (c > 5) {
  int d; //ブロックで変数宣言は不可

}

int foo(int, int);  引数名省略は不可

・そのほか、処理が複雑になるようなことは、ほとんどサポートしない。たとえば、
  関数プロトタイプの局所宣言などはできない。初期値が代入されていない変数の参照も
  無警告である。「if (条件1||条件2)」で、「条件1 が真なら、条件2 は評価しない」
  というショートカット判定もしない。

でざっと見た感じですが オリジナル仮想機械向けコードを出力というのはあまり気にはなりませんでした。 ネイティブコードを出力しないのかという不満をもたれる方もあるかもしれませんが、 仮にネイティブコード出力をするとなると、 実在のアセンブリ言語のソースなりオブジェクト形式の(coffとか)ファイルを使ったら使ったで、 アセンブラやリンカーを用意しなければならなくなるし、 対象のCPUをx86に限ったとしても、 WindowsかUNIX系かでシステムコールやらなんやらがぜんぜん違ってくるし切りがないので この割り切りはまあ致し方のないことだと思います。

んで仮想マシンですが、

・スタックアーキテクチャ
・32ビットワード

で、 命令語のフォーマットには 8ビット(命令)+8ビット(フラグ) と 8ビット(命令)+8ビット(フラグ)+32ビット(データ)の二種類があります。

ひとつプラスしたいのが、作成する言語で文字列リテラルをサポートしていること。 昨年出版された、おそらく想定する読者層が被っているであろう類書では 文字列が使えませんでしたからね。

で、目次に沿っていくと

第1章 コンパイラの基礎
1.2 インタプリタとコンパイラ
1.3 コンパイラの構成
1.4 本書で想定する実行環境
1.5 本書で開発する処理系
1.6 CCI-C用サンプルプログラム
第2章 文法の表現
2.1 構文図技法
2.2 BNF記法
2.3 終端記号と非終端記号
2.4 BNF記法の別表現
第3章 字句解析
3.1 字句とトークン
3.2 字句解析ルーチンの役割
3.3 コメントの除去
3.4 文字種表の設定
3.5 列挙定数値の工夫
3.6 トークンの取得

この三つはまあ見出しで見当つくでしょう。

そして式の解析になるわけですが、

第4章 式の解析
4.1 式の表現
4.2 演算子順位表による構文解析
 逆ポーランド記法を使う式解析
 変換パターン
 変換する方法
 式の評価
 逆ポーランド記法プログラム

清く正しく逆ポーランド記法への変換から始まります。 見出しにある「変換する方法」が、演算子順位法を使ったものです。

そしてこのあと再帰下向き構文解析とlex/yaccを用いた構文解析へと 説明が進むのですが、本書のコンパイラーでは lex/yacc は使用しません。 4.4はまあちょっとした紹介程度のものです。

4.3 再帰的下向き構文解析
 構文規則を使う構文解析
 再帰的下向き構文解析ルーチン
 電卓プログラムを作る
 構文規則の制約
 条件式と代入文の処理
 代入規則と式の値
 式の値の削除
 多重代入と右結合
 C方式の構文規則
 C方式の式解析ルーチン
 解析ルーチンの再帰的記述

4.4 LexとYacc

4.5 解析木と構文木
 解析木を作る
 構文木を作る
 構文木を使ったコード生成
 中間コードの生成

そして、わたしが本書で一番の得点を与えたいと思ったのがこの第5章です。 変数の名前やら何やらを管理する「記号表」について図もたくさん用いて かなり詳細に解説されています。ドラゴンブック辺りと比べても ことこの部分に関してはこの本のほうが良く書けているかもしれません。 まあそれはどのようなことに主眼を置いて本を書くかということに関連するのでしょうが、 ちょっとコンパイラー作りに興味があるけど、実力は…という人にとっては、 この記号表の処理は結構高いハードルになるように思います。 その意味からも、良く書けている部分ではないでしょうか(偉そう)。

第5章 宣言の処理と記号表
5.1 記号表の作成
5.2 記号表への登録
5.3 記号表の探索
 リニアサーチ
 バイナリサーチ
 ハッシュ法
5.4 コンパイルの開始
 宣言の処理
 スタートアップ処理
 関数アドレスのバックパッチ
 ジャンプ命令のバックパッチ
 アセンブラコード生成時のジャンプ命令の処理
 静的領域サイズの格納
 宣言の切り分け
 型名と識別子の設定
5.5 変数宣言の処理
 変数宣言の処理方法
 配列宣言と整数定数式の判定
 大域名と局所名の管理
 記号表の領域管理
 局所用記号表の開始と終了
 変数アドレスの設定
 境界調整
 初期化の処理
5.6 関数宣言の処理
 関数宣言の処理方法
 局所用記号表の用意
 引数の処理
 関数プロトタイプの設定
 関数の実行開始アドレスの設定
 引数アドレスの設定
 関数の正しさの確認
 関数本体の解析
 main関数の処理
 記号表の後処理

後はもう流します(笑)

第6章 コードの生成
6.1 コード生成関数
6.2 変数の大域・局所判定
6.3 左辺値と右辺値
6.4 一次式の処理
6.5 単項演算子の処理
6.6 二項演算子の処理
6.7 定数畳み込み
第7章 仮想マシンのメモリ管理
7.1 メモリの構成
7.2 記号表領域
7.3 オブジェクトプログラム領域
7.4 オペランドスタック領域
7.5 ユーザーメモリ領域
第8章 文の処理
8.1 文とブロックの処理
8.2 式文
8.3 複合文
8.4 while 文
8.5 do 文
8.6 for 文
8.7 if 文
8.8 continue 文と break 文
8.9 switch 文
8.10 return 文
第9章 関数呼び出しと関数処理
9.1 関数呼び出しの手順
9.2 フレームの確保
9.3 レジスタマシンでのフレームの確保
9.4 CALL命令とRET命令
9.5 オペランドスタックと実行時スタック
9.6 関数呼び出し時のスタック内容
9.7 関数の呼び出し処理
9.8 関数の入り口処理
9.9 関数の本体処理
9.10 関数の出口処理
9.11 組み込み関数の処理
第10章 インタプリタの処理
10.1 インタプリタの働き
10.2 アドレスの処理
10.3 マクロの利用
10.4 メモリサイズのチェック
10.5 プログラムの終了
10.6 命令の通訳実行
第11章 誤り処理
11.1 誤り処理の基本
11.2 誤り処理の方法
11.3 単純な誤り対策
第12章 コードの最適化
12.1 最適化の基本
12.2 最適化の方法
第13章 おわりに

ところどころ、ちょっとしたコラムのようなものがあるんですが、 いくつか興味深い話題もあります。

Note:
初期 FORTRAN の式解析
関数の名前
木の巡回
1パスとバックパッチ処理
JIS-Cの一次式と単項式
浮動小数点定数の処理
不連続の定数並び
制御文の多重記述
式2と式3を入れ替えたfor文
目的コードがアセンブラの場合の引数渡し例
return文とコントロールパス

「バックパッチ」なんて大昔のコンパイラ本以来久しく見なかったような気がします。 FORTRAN の式解析は、中田先生の本にあったかな。

コンパイラーのソースコードが付録のCD-ROMに収録されています。 ネットで配布するのとどちらがいいかはちょっと判断つきません。 CD抜いても劇的に価格は下がらないでしょうし。 ただ、容量に余裕があるのだから、Windows 用のコンパイラー(MinGWとか)を 一緒に収録してもいいんじゃないかなとは思いましたが、 ライセンス的に面倒があったのかもしれません。


2010/02/06  00:44    <DIR>          .
2010/02/06  00:44    <DIR>          ..
2009/12/08  15:43    <DIR>          cci_c
2009/12/08  16:13             3,915 readme.txt

2009/12/08  15:43    <DIR>          .
2009/12/08  15:43    <DIR>          ..
2009/12/07  11:27               609 cci.c
2009/12/07  21:57            81,920 cci.exe
2009/12/07  11:56             3,230 cci.h
2009/12/07  21:56               177 ccimake.bat
2009/12/07  13:05            13,299 cci_code.c
2009/12/07  13:05             2,590 cci_misc.c
2009/12/07  11:27            31,247 cci_pars.c
2009/12/07  12:52             2,548 cci_prot.h
2009/12/07  12:52             4,068 cci_tbl.c
2009/12/07  14:42             8,618 cci_tkn.c
2009/12/07  17:54               335 cp_add.c
2009/12/07  17:54               285 cp_base.c
2009/12/07  17:54               718 cp_prime.c
2009/12/07  17:54               882 cp_qsort.c
2009/12/07  17:54             5,898 minicalc.c
2009/12/07  17:54             4,263 polish_p.c
2009/12/07  17:54             5,786 token_p.c

最後に、ソースコードの一部を。 スタイルについては特にコメントしません。 が、C++ で書かれた類書のものより良いとは言えるでしょう。

/**********************************************************/
/*    filename:cci_pars.c 構文解析                        */
/**********************************************************/
#include "cci.h"
#include "cci_prot.h"

Token token;                                          /* 現在処理中のトークン */
int blkNest = 0;                 /* ブロックの深さ 0:大域 1:関数 2:関数内の{} */
int err_ct = 0;                                               /* 総エラー個数 */
SymTbl tmpTb = {"",noId,NON_T,0,0,0,0};                     /* 一時格納記号表 */
SymTbl *fncPt = NULL;                             /* 翻訳中の関数の記号表位置 */
TknKind last_statement;                                 /* ブロック内最後の文 */

int localAdrs;                                        /* 局所変数アドレス管理 */
#define START_LocalAdrs 1*INTSIZE                     /* 局所変数割付開始番地 */
                                             /* 先頭4バイトは戻り番地用に確保 */
#define INT_P(p)   (int *)(p)                          /* int型ポインタに変換 */
/*---------------------- continue,break処理用*/
#define LOOP_SIZ 20
struct {
  TknKind stkind;                                                 /* 文の種類 */
  int looptop;                              /* ループ開始位置(continueの飛先) */
  int break_flg;                                   /* break文があれば真にする */
} loopNest[LOOP_SIZ+1];                               /* ループ文のネスト管理 */
int loopNest_ct = 0;                                      /* 使用中の最終位置 */
/*---------------------- switch処理用*/
#define SWTCH_SIZ 10
struct {
  int def_adrs;                                          /* defaultの対応番地 */
  int startCaseList;                                  /* caseList[]の開始位置 */
} swchNest[SWTCH_SIZ+1];                              /* switch文のネスト管理 */
int swchNest_ct = 0;                                      /* 使用中の最終位置 */

#define CASE_SIZ 100
struct {
  int value, adrs;                                      /* caseの値と対応番地 */
} caseList[CASE_SIZ+1];
int caseList_ct = 0;                                      /* 使用中の最終位置 */

int compile(char *fname) /* コンパイル */
{
  initChTyp();                                                    /* 文字種表 */
  gencode2(CALL, -1);                         /* main関数呼出。番地-1は仮設定 */
  gencode1(STOP);                                           /* プログラム終了 */

  fileOpen(fname);
  token = nextTkn();
  while (token.kind != EofTkn) {
    switch (token.kind) {
    case Int: case Void:                                        /* 変数か関数 */
      set_type(); set_name();                             /* 型名と名前を格納 */
      if (token.kind == '(') fncDecl(); else varDecl();      /* 関数,変数宣言 */
      break;
    case Semicolon:
      token = nextTkn();                                      /* 何もせず次へ */
      break;
    default:
      err_ss("構文エラー", token.text);
      token = nextTkn();
    }
  }
  if (err_ct == 0) backPatch_callAdrs();            /* 関数呼出未定番地を後埋 */
  *INT_P(mem_adrs(0)) = mallocG(0);            /* 静的領域サイズを0番地に格納 */

  if (err_ct > 0) fprintf(stderr, "%d個のエラーが発生しました。\n", err_ct);
  return err_ct == 0;                                     /* エラーなしなら真 */
}

void varDecl(void) /* 変数宣言 */
{
  for (;;) {
    set_aryLen();                                         /* 配列なら長さ設定 */
    enter(tmpTb, varId);                          /* 変数登録(アドレスも設定) */
    if (token.kind != ',') break;                                 /* 宣言終了 */
    token = nextTkn(); set_name();                              /* 次の変数名 */
  }
  token = chk_nextTkn(token, ';');                               /* ';'のはず */
}

はあ。これだけでもどっと疲れが ○| ̄|_

ということで、 最新コンパイラ構成技法 でも (コンパイラ―原理・技法・ツール (Information & Computing)) でもドンと来いな人には物足りなさ全開になると思いますが、 どんなものかちょっと知ってみたいという向きにはわりとオススメできるんじゃないかと。 ただ、読んでて1980年代後半の本じゃなかろうかという感触があったのはここだけの話。 内容が古臭いと言うのではないのですが、構文図を使ったりとか、 バックパッチの話とか。

あ、最後の最後にもう一個。瑣末なことなんですが気になった記述がいくつか。

lexとyaccについて、 Lex、Yaccと終始一貫してそれぞれの頭文字を大文字で書いていること。 全部小文字じゃなかったっけ? これが一つ目。 もう一つが 103ページ(から104ページ)にあった またかち合いの発生を減らすために、剰余計算のとき、 分母となる値を素数にするとハッシュ値の偏りが少なくなる という記述。別に表の大きさは素数でなくてもハッシュ関数がちゃんとしたものなら 問題ないという話ではありませんでしたっけ? と、こんなもんかな。

■_ 本日の巡回から

2010年02月07日

■_

・連載終了
まんがくらぶの今月号を読み返していて気がついたんですが、 「ノンストップおヨメ道」今月が最終回だったんですね。 四コマ誌の連載はわりと最終回に気がつかなくて、あの作品最近見てないような気がするなあ と数ヶ月後に知るとか。まあ、一部のひいき作品を除いてはあまり一生懸命 読んでないというのがあるのかも

・REBOL
reddit でスレッドが立ってて気がついたんですが(本日の気づき二つ目)、 まだやってたんですねえこれ。 REBOL without a cause « Torquing Wet Strainers 確かオープンソースでないからスルーしたような記憶が。

■_ 条約

信じられないが、本当だ Part105
623 名無し三等兵 [sage] 2010/02/07(日) 18:38:21 ID:??? Be:
    米が日本にハーグ条約加盟迫る 「拉致問題支援に悪影響」
    http://www.47news.jp/CN/201002/CN2010020601000521.html

    えええええ?
    日本ってハーグ条約に加盟してなかったっけ?? 

624 名無し三等兵 [sage] 2010/02/07(日) 18:40:34 ID:??? Be:
    とおもったら、ハーグ条約ってこんなにあるのな。

    >ハーグ国際私法会議で締結された条約はハーグ条約という通称で呼ばれることが多い。
    >ただしこの通称は国際私法とは関係ない他のいくつかの条約の通称としても使われるため
    >注意が必要である。

    >以下に条約の締結年と名称の一覧を示す。 ただし、全ての条約が発効しているわけでは
    >なく、また各構成国が全ての条約を批准しているわけではない (日本が批准しているもの
    >については※で示した)。

    * 1954年 - 民事訴訟手続に関する条約 - ※
    * 1955年 - 物品の国際売買の準拠法に関する条約
    * 1955年 - 本国法と住所地法の抵触に関する条約
    * 1956年 - 外国の会社、社団及び財団の法人格の承認に関する条約
    * 1956年 - 子に対する扶養義務の準拠法に関する条約 - ※
    * 1958年 - 子に対する扶養義務に関する裁判の承認執行に関する条約
    * 1958年 - 物品の国際売買における所有権の移転の準拠法に関する条約
    * 1958年 - 物品の国際売買における合意された裁判所の管轄に関する条約
    * 1961年 - 未成年者の保護に関する官庁の権限及び準拠法に関する条約
    * 1961年 - 遺言の方式に関する法律の抵触に関する条約 - ※
    * 1961年 - 外国公文書の認証を不要とする条約 - ※
    * 1965年 - 養子縁組に関する裁判の管轄、準拠法及び承認に関する条約
    * 1965年 - 民事又は商事に関する裁判上の文書の外国における送達及び告知に関する条約 - ※
    * 1965年 - 裁判所の選択の合意に関する条約
    * 1970年 - 民事又は商事に関する証拠の収集に関する条約 

625 名無し三等兵 [sage] 2010/02/07(日) 18:40:37 ID:??? Be:
    * 1970年 - 離婚及び別居の承認に関する条約
    * 1971年 - 民事及び商事に関する外国判決の承認執行に関する条約と附属議定書
    * 1971年 - 交通事故の準拠法に関する条約
    * 1973年 - 遺産の国際的管理に関する条約
    * 1973年 - 製造物責任の準拠法に関する条約
    * 1973年 - 扶養義務に関する裁判の承認執行に関する条約
    * 1973年 - 扶養義務の準拠法に関する条約 - ※
    * 1978年 - 夫婦財産制の準拠法に関する条約
    * 1978年 - 婚姻の挙行及びその有効性の承認に関する条約
    * 1978年 - 代理の準拠法に関する条約
    * 1980年 - 国際的な子の奪取の民事面に関する条約[4]
    * 1980年 - 裁判への国際的なアクセスに関する条約
    * 1985年 - 信託の準拠法及び承認に関する条約
    * 1986年 - 物品の国際的売買契約の準拠法に関する条約
    * 1989年 - 死亡による財産の相続の準拠法に関する条約
    * 1993年 - 国際養子縁組に関する子の保護及び国際協力に関する条約
    * 1996年 - 親責任及び子の保護措置についての管轄権、準拠法、承認、執行及び協力に関する条約
    * 2000年 - 成年者の国際的保護に関する条約
    * 2005年 - 管轄合意に関する条約[5]
    * 2006年 - 口座管理機関によって保有される証券についての権利の準拠法に関する条約(en:Hague Securities Convention)[6]
    * 2007年 - 子及びその他の親族の扶養料の国際的な回収に関する条約
    * 2007年 - 扶養義務の準拠法に関する議定書

    でこのニュースは
    国際結婚で生まれた子を離婚後に日本人親が引き取って帰国するのを「拉致」と捉える
    アメリカが怒ってるらしい。知らんよそんなこと。 

626 名無し三等兵 [sage] 2010/02/07(日) 18:49:22 ID:??? Be:
    ハーグ条約多すぎww
    ちょっとは場所変えるとか考えたらどうなんだ。

    そう言えば動物保護のワシントン条約と軍縮のワシントン条約を絡めたラノベがあったなあ。 

たくさんあるんだなあ。 知らなかった…w 国際結婚云々の話は聞き覚えあったけど。

■_ Emacs

Emacs を「学ぶ」価値はあるかとかなんとかいう数日前に取り上げた話題。 あまりその後伸びませんでしたが、いくつか目立った意見をご紹介。


Is emacs a useful tool for a CS student to learn? : programming

I'm a CS major and currently enrolled in a C++ course. I've done plenty of Java 
programming in the past along with assembly, some C and Python, but this is my first 
swing at C++. I've heard about emacs before, but I'm not really too sure how its 
useful and if its a necessary tool to learn.

So I come to you proggit, is it worth it for me to learn emacs as I learn C++? If so, 
is there a good way to get jumpstarted on learning it? And should I use emacs..xemacs?

FYI: I run Ubuntu and all of my assignments/projects will be compiled with g++ on 
debian machines
Learn either emacs or vim. Doesn't matter which, but learn one as well as you possibly 
can. Your editor is your toolbox.

I totally agree with the above. There are never ending religious debates between the 
Emacs and Vi camps but for all intensive purposes it doesn't matter. Use whichever 
feels more comfortable to you.

Once you get a handle on them you will find that you can code much faster then you 
could previously just because of all the shortcut keys and such. Its a steep learning 
curve at first which will be pretty painful. Keep a cheat sheet handy and don't be 
afraid to spend the 5 minutes now searching online for a way to do something, it will 
often pay dividends later.

yes, yes, a thousand times yes! (or: <F3> y e s <F4> M-999 <F4>)

It does has a steep-ish learning curve, but it clicks very quickly if you dogfood it 
for editing for a couple of days. Just (1) keep a cheat sheet handy, and (2) keep a 
separate sheet tacked up in front of you and write down new commands as you learn them. 
It will become automatic in no time.

The short-term payoff is that you're using g++ on Ubuntu, and emacs is a natural fit 
(you will need an editor anyway, rather than using an integrated IDE).

The real benefit, however, is that if you stick with it you'll reap the benefits for 
the rest of your life, because it will be available on any platform you're asked to 
use over your entire career, and as you build a repertoire and a toolbox of macros 
you'll have these for the rest of your life.

If you like, you can read this for inspiration.

Emacs is without question the most advanced and comprehensive text editor in the world. 
By far. It's hard to learn, but once you do you are truly more capable than your peers 
that don't grok it. Emacs also makes you better looking and smarter.

I can't fairly describe the extensibility of the editor, but you should think of Emacs 
as a computer programming language that is designed specifically to help you edit text. 
(It does look like a regular text editor, but it's not.) As you use Emacs more and 
more, you start to treat it more like a programming language, tweaking, extending, and 
adding editing functions to help you write code (and generally process text) faster.

It could take years, really, but you will be a better programmer if you learn Emacs. 
There simply isn't another editing tool out there that you can take as far. I'm 
curious to see if anyone here will dispute that. Do not be discouraged by the 
appearance of the program. (Most people walk away at the sight of Emacs.) The power 
behind the program is very real.

Finally, as a computer programmer, you'll deal with text a lot more than most can 
imagine. Especially as we move into the future, where all data looks more and more 
like plain text. I don't think it'll hurt you to have a good grasp of the best text 
manipulation tool there is.

Note: I salute Vim too, because it's a wonderful editor. It's the only software 
package that I know of that compares to Emacs. It even has some advantages over Emacs, 
such as allowing users more efficient use of the keyboard when manipulating text. I 
wholeheartedly recommend Emacs nevertheless.

■_ GA144

Forth inventor Chuck Moore announces 144 core CPU capable of 100 billion ops/sec : programming Forth の作者が面白いチップを作った(設計した)という話がそれなりに話題に。



GA144 Brief
GA144 144-computer Chip

The GA144 is the most powerful chip we have created to date, with 144 g18 computers 
and capable of up to 100 billion operations per second. This chip is currently being 
fabricated as a pre production shuttle run, and based on results of testing during 
Autumn of 2009 it could go to production as early as the start of 2010.

The chip measures 4.7 x 4.5 mm in a 180 nm process. That size was chosen because it is 
the largest chip we can presently package in the 10x10 mm QFN-88. 104 pads border the 
chip (16 ground pads connect to the exposed die attach paddle; 16 power pads and 72 
signal pads connect to the 88 pins on the edges of the package) and 8 rows of 18 
computers fit inside.

Low power results from our computer (one node of an array) being asynchronous 
(unclocked). Low energy results when each of the 144 computers is executing 
instructions only when it actually has something to do. Spec sheets will be 
forthcoming. Meanwhile this list of features should prove impressive. Bill Muench 
composed a handy poster with much info.

(以下略)

否定的な意見が多いように見受けられますが、そういうのはおいといてひとつ。


Forth inventor Chuck Moore announces 144 core CPU capable of 100 billion ops/sec : programming
TL;DR - summary for ones who do not follow his inventions:

he designs forth processors. Each core runs tiny forth program. Cores have connections 
to their 4 (or 8?) neighbours, from there core can get input data, process it and pass 
it to other neighbour core. So, only perimeter cores can talk to RAM (yes!) and I/O 
ports

When programming this monster, you plan (on the plain map) which core executes which 
tiny program, then give each core its forth bytecode.

Then that mill starts ticking, and you have quite good digital signal processor to use 
in radios/comms equipment.

Kind of that.

edit: on site you've got all doc. 2) demo programs there use only chain of cores, so 
number of cores can just be left idle.

いかに低電力消費でがんばるかってことでいいのかな?

■_ 本日のム板から


C++相談室 part77
508 デフォルトの名無しさん [sage] 2010/02/07(日) 10:07:23 ID: Be:
    >>497
    CとC++は別物。焼きそばとカップ焼きそばくらい違う。 

509 デフォルトの名無しさん [sage] 2010/02/07(日) 10:26:19 ID: Be:
    お寿司とカリフォルニア巻くらい違う。 

510 デフォルトの名無しさん [sage] 2010/02/07(日) 10:35:22 ID: Be:
    どれも底辺が喜んで食う物ってのがまたw 

511 デフォルトの名無しさん [sage] 2010/02/07(日) 11:05:46 ID: Be:
    カテゴリは同じだけどグレードが違うってことでしょ 

512 デフォルトの名無しさん [sage] 2010/02/07(日) 11:23:49 ID: Be:
    最近はこのスレ荒れるなぁ。

    ちょっとはみんな自重しようぜ。 

513 デフォルトの名無しさん [sage] 2010/02/07(日) 11:29:55 ID: Be:
    そこはグレードは同じだけど、カテゴリが違うってしておかないと 

なんとも微妙なたとえだが好きだこういうの。


C++相談室 part77
516 デフォルトの名無しさん [] 2010/02/07(日) 14:41:41 ID: Be:
    コンストラクタに初期化並び?を書くと何か最適化されるの?
    abc() : member(0) {} 

517 デフォルトの名無しさん [sage] 2010/02/07(日) 14:47:45 ID: Be:
    そこに初期化子を書かないと初期化できないじゃないか。

518 デフォルトの名無しさん [sage] 2010/02/07(日) 14:50:02 ID: Be:
    最適化関連はアセンブラコード見て確認してみ? 

519 デフォルトの名無しさん [sage] 2010/02/07(日) 14:50:53 ID: Be:
    >>516
    そこにかかずしていつ初期化するのだい? 

521 デフォルトの名無しさん [sage] 2010/02/07(日) 15:07:48 ID: Be:

    hoge() { member = 0; }

    コンストラクタの中に書く俺は異常なのか・・・? 

522 デフォルトの名無しさん [sage] 2010/02/07(日) 15:08:59 ID: Be:
    >>521
    異常というか、C++の初期化子の意味を理解してください。

    ・・・Effective C++すら読んでないでしょ。

523 デフォルトの名無しさん [sage] 2010/02/07(日) 15:10:03 ID: Be:
    >>521
    それ初期化やない、代入や。 

524 デフォルトの名無しさん [sage] 2010/02/07(日) 15:11:15 ID: Be:
    俺はメンバの数が圧倒的にふえるとそう書くな 

525 デフォルトの名無しさん [sage] 2010/02/07(日) 15:12:39 ID: Be:
    >>521

    節子、それ、初期化やない、代入や!

    って言おうと思ったら既に言われてしまった。 

526 デフォルトの名無しさん [sage] 2010/02/07(日) 15:13:39 ID: Be:
    >>524
    お前もかよwこのスレは・・・。
    Effective C++ぐらい読めよ。そして従えよ。

527 デフォルトの名無しさん [sage] 2010/02/07(日) 15:14:13 ID: Be:
    つ constメンバ変数 

528 デフォルトの名無しさん [sage] 2010/02/07(日) 15:14:36 ID: Be:
    引数なしの場合って書く? 

529 デフォルトの名無しさん [sage] 2010/02/07(日) 15:19:37 ID: Be:
    constメンバをstaticじゃなく宣言する意味ってなんかあんのか 

530 デフォルトの名無しさん [sage] 2010/02/07(日) 15:20:14 ID: Be:
    引数なしだと組み込み型はそれを明示しないと初期化されないので、初期化したい場合は書く。
    どうでもいい場合は書かない。 

531 デフォルトの名無しさん [sage] 2010/02/07(日) 15:21:12 ID: Be:
    >>528
    何の引数が無い場合?メンバ変数(クラス)ならそいつらのデフォルトコンストラクタで初期化しとけば良いじゃん。 

まあちょっとわかりにくい?


C++相談室 part77
538 デフォルトの名無しさん [sage] 2010/02/07(日) 15:38:36 ID: Be:
    C++をやっててboostに触ってないってのはモグリですか 

540 デフォルトの名無しさん [sage] 2010/02/07(日) 15:40:09 ID: Be:
    >>538
    はい。
    それとVCしか使えない人もモグリです。 

541 デフォルトの名無しさん [sage] 2010/02/07(日) 15:42:31 ID: Be:
    >>538
    メモリーリーク?なにそれ?おいしいの?
    なんだSTLって使い物になるんじゃん。
    MPLすげー。ソースコードが半分になるじゃん。

    C++の世界が全く変わるよ。良い意味で。

542 デフォルトの名無しさん [sage] 2010/02/07(日) 15:44:15 ID: Be:
    >>538
    さすがにねぇ。。

    >>541
    > メモリーリーク?なにそれ?おいしいの?
    いいすぎだろw
    メモリーリークを知っているからこそ
    役立つんだろ?

543 デフォルトの名無しさん [sage] 2010/02/07(日) 15:45:34 ID: Be:
    boostいらねよ。
    使えるのはメモリー管理だけだろ。
    それ以外たいして入らない。
    メモリも他のライブラリで代替えすれば完全に入らない。 

544 デフォルトの名無しさん [sage] 2010/02/07(日) 15:47:36 ID: Be:
    >>543
    いるか要らないかねぇだろ
    本題を読めよw 

545 デフォルトの名無しさん [sage] 2010/02/07(日) 15:48:07 ID: Be:
    >>543
    最初の行が矛盾してるぜ。

    欲しいところだけ使いたいのに、全部入れるとでかすぎるって話なら同意。 

546 デフォルトの名無しさん [sage] 2010/02/07(日) 15:50:39 ID: Be:
    * typedef struct hogehoge..., (struct fuga*)malloc(sizeof(struct fuga))...
     C++は初めてか?肩の力抜けよ。

    * catch(...){ throw; }
     落ち着け

    * カスタムアロケータを自作したり等、STLをやっと使いこなせるレベル
     頑張って^^;

    * shared_ptrやMPL等でboostを導入しまくる
     そうだよね保守性は重要だよね

    * boostのソースから必要な部分だけもってきて改変
     本当に分かってやってるのか?という懸念 

549 デフォルトの名無しさん [sage] 2010/02/07(日) 15:58:43 ID: Be:
    boostは中身を理解して使うならいいよ
    理解せずに使うやつは潜り 

550 538 [sage] 2010/02/07(日) 16:00:23 ID: Be:
    そうかー…
    SymbianでC++をやってた自分としてはboostは若干異世界なんだよね 

■_ すすまねー

今日は外出しなかったのに、書評進まんかった。

■_ 本日の巡回から

  • UK STUDIO - プログラマの報酬について
  • Software transactional memory
  • On the need to use error-correcting memory
  • Got 4GB RAM, no ECC? Then you have >95% probability to get a bit error in the next three days : programming
  • 「窓の手」公式サイト
    そのおかげでプライベートの時間を以前より確保出来そうな気がしていますので、Windows7対応版の開発を着手しました。
  • カイジの名場面を再現した「利根川焼き土下座香炉」、肉の香りのお香付き - GIGAZINE
  • 劇場版涼宮ハルヒの消失を観てきました - 梶本裕介の日記
  • 興味のある技術に Cygwin と書いておいたら面接で爆笑された - BOOLEANLABEL
  • fladdict » オトンと妹にiPadのプロモビデオを見せてみた
    別にプログラムもしなけりゃ、フォトショップも使わない二人にとっては正に夢のようなマシンっぽい。
  • もしかしてEmacsってさ。: たわごと
    Emacsに慣れたひとがEmacsのキーバインドを求めるのは当然なのですが、同様にWindowsのキーバインドに慣れたひとがそれを求めるのも当然でしょう、と。
  • 【2ch】ニュー速クオリティ:【ワンフェス】徹夜組みがペナルティで入場規制!始発組み大勝利wwww
  • GNUとは? | OKWave
  • 哀と欲望の日々。: WZR-HP-G300NHを導入、そしてダメだコイツ。
  • オープンソースの品質:夜な夜な海外ネット:ITmedia オルタナティブ・ブログ
  • suicaは実はたまに落ちている - 紅茶屋くいっぱのあれこれ日記
    そんな後から決まる仕組みが動くわけないだろうと。で、そこで名言。そんなこといったって動いちゃってるんだもん。って。
  • Twitter / haseshin: バイクが売れないのは、みんなAKIRAに出て来た金田 ...

  • 過去の雑記帖

    1. 2010年2月(上旬)
    2. 2010年1月(下旬)
    3. 2010年1月(中旬)
    4. 2010年1月(上旬)
    1. 2009年
    2. 2008年
    3. 2007年
    4. さらに前
    この文書の無断転載はご遠慮ください(リンクはご自由にどうぞ)。

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