“エゴサーチで見かけた反応とそれの感想など 速さのためにはCでないと この誤解は典型的ですねえ。今、申し訳ないんだけど、普通に書いたCのコードと普通に書いたJavaのコード走らせると、普通に書いたJavaのコードの方が速くなるケース、全部とは言わんが案外と多いですよ。なんでかというと、Javaは普通に書いたらJVMが人類の持てるテクノロジの限りを尽くして勝手に高速化してくれる1が、Cはあなたの能力以上に速くはならない。Cは速いJavaは遅いってのは10年くらい前には正しかったんでしょうけどねえ。 なお自分でベンチマークしてる暇なんかないよ!という人はshootout.alioth.debian.orgぐらいは読んでもいいんじゃないですかね。たとえばJavaとCの比較で見れば全体的にいって同じくらいのスピード、いくつかの項目でJavaのほうが速いのが分かる。
組み込み屋はCでなければ何を使うか これがですねえ、少なくとも俺の半径1クリックではマジもんの組み込み屋は全員verilogとかに流れちゃっててですねえ、もうCなぞ書いてねえのですよ。 まあつまりね、今日びだと携帯電話ですらIntel入ってるわけです。ってなったときに、じゃあうちの製品でもAtom載せますか、っていうと、わざわざx86のOS書いたりするくらいなら、ありもの持ってくるって事に当然なるわけです。だから、21世紀の現在においてはそもそも、組み込みでなければいけない状況というのがすごーく限られている。で、そんななか、安くて実績豊富なありもんのチップとOS買ってくるんじゃないくて、わざわざどうしても組み込みでやらないといかんね、という状況、これは相当なハードコアなわけですけども、そういう状況になってくると、もはやCやアセンブラですら所望の性能が出せない領域に突入してくるのです。FPGAで論理回路からカスタムの世界です。 ですので、組み込みだからどうとかいうのは、少なくともCの文脈としては、ちょっともう当てはまりません。今後時代が逆転することはないと思います。
言語の実装は何で書くか 今から書き始められる大多数の言語は普通にJavaかML系ですよ2。過去にCで書かれてたやつもまだまだ現役だけどさ。ぶっちゃけ今から言語やりだすとしてCでやる必然性ってどこにあるの? 今更新たにXSLTエンジンをCで書きます、とか言い出すやつおらんと思うのね。文字列処理ほど今Cでやっちゃいかん種類の処理もそうはないですよ。
何で書いてもダメなやつはダメ そりゃそうなのかもしらんが、他のツールを使えば全然ダメじゃない人でもCではダメなコードを書いてしまう、これがポイントなのですよ。かくいう自分もCで書いちゃったらメンテナンスしやすい見通しの効いたコードになる自信はちょっとないです3。Cで綺麗なコードを書きましょうってのは道具というか、お膳立てが足りなすぎるのです。 たしかにそれでも、Cで書かれた綺麗なコードというものは存在し、読むとジョルジュ・ペレックの「煙滅」のような、一種の感動を感じさせてくれます。が、残念ながら私にはIOCCCとかと同じ分類におきたくなる衝動が抑えられません。
使いどころ次第なのでは? そう。ほんっとそう。まさにそう。上から下までCで書くのがどんなに狂った発想か。 Cが本当に必要な領域がもしあるなら、そこはしょうがないからCで書くしかないんじゃないですか。背に腹は替えられないし。でもさあ、それってどこなんですかね。具体的に。まあどっかにはあるのかもしらんが(Kernelの中とかさ)、それの箇所って1970年代とかと比べて大幅減ってるはずなんですよ。計算機は何桁も速くなったし計算機言語は目をみはる発達を遂げたのです。 ○○だからCでなきゃみたいな幻想は一回捨てたほうがいいです。冷静に、今あるテクノロジを吟味して、最適なものを選びましょう。したら九分九厘はCじゃない選択肢があるはずですよ。それでもどうしても残ったところは、残念だけど必要悪ってことでとりあえずCで書いといてください。たぶんちゃんと吟味すれば本当にちょっとしか残ってないから、被害も最小限でしょう。そこまでちゃんと考えて結果Cを選ぶのなら、まあ、しょうがない。好きにはなれないが納得できます。 でも、多くのケースはそうじゃないんだよな。 JITコンパイラはJITじゃないコンパイラよりも最適化に用いることができる情報が多いのでJavaとかC#はCよりも最適化が効きやすい。 ↩ 聖典”Modern Compiler Implementation in ML“のおかげ。日本語訳もある。読むべき。というか言語屋なら当然すでに読んでるべき。 ↩ 特にエラーの持ち回りがgotoに頼るかエラーの瞬間にreturnで関数抜けるかしかないのでどう転んでも見通しが悪くなる ↩”
- 卜部昌平のあまりreblogしないtumblr: (via otsune)
組み込み屋はCでなければ何を使うか これがですねえ、少なくとも俺の半径1クリックではマジもんの組み込み屋は全員verilogとかに流れちゃっててですねえ、もうCなぞ書いてねえのですよ。 まあつまりね、今日びだと携帯電話ですらIntel入ってるわけです。ってなったときに、じゃあうちの製品でもAtom載せますか、っていうと、わざわざx86のOS書いたりするくらいなら、ありもの持ってくるって事に当然なるわけです。だから、21世紀の現在においてはそもそも、組み込みでなければいけない状況というのがすごーく限られている。で、そんななか、安くて実績豊富なありもんのチップとOS買ってくるんじゃないくて、わざわざどうしても組み込みでやらないといかんね、という状況、これは相当なハードコアなわけですけども、そういう状況になってくると、もはやCやアセンブラですら所望の性能が出せない領域に突入してくるのです。FPGAで論理回路からカスタムの世界です。 ですので、組み込みだからどうとかいうのは、少なくともCの文脈としては、ちょっともう当てはまりません。今後時代が逆転することはないと思います。
言語の実装は何で書くか 今から書き始められる大多数の言語は普通にJavaかML系ですよ2。過去にCで書かれてたやつもまだまだ現役だけどさ。ぶっちゃけ今から言語やりだすとしてCでやる必然性ってどこにあるの? 今更新たにXSLTエンジンをCで書きます、とか言い出すやつおらんと思うのね。文字列処理ほど今Cでやっちゃいかん種類の処理もそうはないですよ。
何で書いてもダメなやつはダメ そりゃそうなのかもしらんが、他のツールを使えば全然ダメじゃない人でもCではダメなコードを書いてしまう、これがポイントなのですよ。かくいう自分もCで書いちゃったらメンテナンスしやすい見通しの効いたコードになる自信はちょっとないです3。Cで綺麗なコードを書きましょうってのは道具というか、お膳立てが足りなすぎるのです。 たしかにそれでも、Cで書かれた綺麗なコードというものは存在し、読むとジョルジュ・ペレックの「煙滅」のような、一種の感動を感じさせてくれます。が、残念ながら私にはIOCCCとかと同じ分類におきたくなる衝動が抑えられません。
使いどころ次第なのでは? そう。ほんっとそう。まさにそう。上から下までCで書くのがどんなに狂った発想か。 Cが本当に必要な領域がもしあるなら、そこはしょうがないからCで書くしかないんじゃないですか。背に腹は替えられないし。でもさあ、それってどこなんですかね。具体的に。まあどっかにはあるのかもしらんが(Kernelの中とかさ)、それの箇所って1970年代とかと比べて大幅減ってるはずなんですよ。計算機は何桁も速くなったし計算機言語は目をみはる発達を遂げたのです。 ○○だからCでなきゃみたいな幻想は一回捨てたほうがいいです。冷静に、今あるテクノロジを吟味して、最適なものを選びましょう。したら九分九厘はCじゃない選択肢があるはずですよ。それでもどうしても残ったところは、残念だけど必要悪ってことでとりあえずCで書いといてください。たぶんちゃんと吟味すれば本当にちょっとしか残ってないから、被害も最小限でしょう。そこまでちゃんと考えて結果Cを選ぶのなら、まあ、しょうがない。好きにはなれないが納得できます。 でも、多くのケースはそうじゃないんだよな。 JITコンパイラはJITじゃないコンパイラよりも最適化に用いることができる情報が多いのでJavaとかC#はCよりも最適化が効きやすい。 ↩ 聖典”Modern Compiler Implementation in ML“のおかげ。日本語訳もある。読むべき。というか言語屋なら当然すでに読んでるべき。 ↩ 特にエラーの持ち回りがgotoに頼るかエラーの瞬間にreturnで関数抜けるかしかないのでどう転んでも見通しが悪くなる ↩”
- 卜部昌平のあまりreblogしないtumblr: (via otsune)