プログラミング言語に関する雑談が気になったのでまとめてみた

個人的に気なったので,勝手にまとめてしまいました. 高級言語とその速度について,です.
4
_ko1 @_ko1

なんで,C++よりもHaskellやOcamlは遅いんだろう?

2011-07-12 03:24:11
nyaxt @nyaxt

@_ko1 @pi8027 単純にがんがんにチューニングした場合どうなるかの話なので、コーディング時間対パフォーマンス比ではOCamlやJavaがいいですよね多分

2011-07-12 03:27:01
_ko1 @_ko1

@nyaxt いやだから,なんで速度が遅いんだって話.

2011-07-12 03:27:24
K. Sakaguchi @pi8027

ocaml-tsukuba 勉強会#1のスライド(自分が書いた物)によると、C と OCaml で素直に N-Queens Solver を書くと、OCaml で書いた物の実行時間が C で書いた物の二倍くらいらしい。

2011-07-12 03:29:19
_ko1 @_ko1

@pi8027 何がオーバヘッドになるのか.

2011-07-12 03:29:57
_ko1 @_ko1

言語の問題なのか,言語処理系の問題なのか.後者だと思うのだが.

2011-07-12 03:30:15
nyaxt @nyaxt

@_ko1 Haskellは普通に書くとリストまみれになって配列やハッシュテーブルなどのデータ構造を扱いにくいからという認識。OCamlはもしかしたらそのままつかえるぐらいはやいのかな

2011-07-12 03:32:17
K. Sakaguchi @pi8027

@_ko1 破壊的変更をあまりしないように書くのが一般的で、そういう書き方をしているのが1つ。あとは GC の有無と、OCaml コンパイラの最適化はあまり賢くないと聞いたのでそれもある気がします。

2011-07-12 03:32:20
_ko1 @_ko1

遅い理由:仮説(1)GCのオーバヘッド ← なぜ読み切れないのか? C++ プログラマができることが,なぜできないのか?

2011-07-12 03:32:25
K. Sakaguchi @pi8027

region inference ていうのがあるらしいけれど、中身は知らない……。

2011-07-12 03:33:09
_ko1 @_ko1

仮説(2)キャッシュのあたり具合 ← 言語から読み切るのは無理か?

2011-07-12 03:33:12
_ko1 @_ko1

@pi8027 読み切れるなら,内部で破壊的に操作するように変えてもいいでしょう.そうできないのはなぜか?

2011-07-12 03:34:05
nyaxt @nyaxt

@_ko1 キャッシュのあたり具合はプログラマが考えるよりもプロファイルベースの動的最適化モノのほうがいい気がします

2011-07-12 03:34:36
_ko1 @_ko1

@nyaxt 言語レベルで見えているデータ構造と,それが実際に計算機上でどうリソースを食うのかは,一対一対応する必要はないはず.そうなっているのはなぜか?

2011-07-12 03:34:47
K. Sakaguchi @pi8027

Haskell も mutable な物使いまくれば速くなるという噂はあるけど、書き方相当工夫しないとあまり意味が無い気がする。

2011-07-12 03:34:56
_ko1 @_ko1

@nyaxt それはそうかも.しかし,そうなるとHaskell等が遅い理由にはならない!

2011-07-12 03:35:28
_ko1 @_ko1

個人的な疑問としては,「C++並の速度が出ない」というのは,言語の本質的な問題が起因しているのか,そうではなく,最適化をサボっているだけなのか.中をよく知らないので,知っている人に教えて欲しいところ.

2011-07-12 03:36:26
_ko1 @_ko1

前者が言語の問題で,後者が言語処理系の問題.

2011-07-12 03:36:49
_ko1 @_ko1

プログラミング言語は,使いやすさにフォーカスして進化してきた.というわけで,速度というか,コンパイラに優しい言語,というのを作りたいと,常々思っているのだけど,なかなか進められていない.

2011-07-12 03:38:04
K. Sakaguchi @pi8027

@_ko1 @nyaxt INRIA は多分、最適化器を作り間違えた結果として処理系にバグを埋め込むような事を避けたいのでしょう。CompCert のように証明付きの最適化器であれば、証明を書けば良いけれど。

2011-07-12 03:38:05
_ko1 @_ko1

@pi8027 そういうこともあるかもしれないけれど,それと言語の力とは本質的な関係はないわな.

2011-07-12 03:38:36
_ko1 @_ko1

さて,コンパイラに優しい言語とは何か,と考えたとき,ぐちゃぐちゃにアノテーションがつきまくった言語なのか,それとも関数型言語のように,primitive からきっちり解析できるようなものになるのか.

2011-07-12 03:40:02
_ko1 @_ko1

よくわからない.ので,本気で速度だけを考えたときに haskell などがどこまで凄いことができるのか,知りたい.

2011-07-12 03:40:23
K. Sakaguchi @pi8027

@_ko1 それはそうですね。C などと同等に速いバイナリを生成できる OCaml 処理系を書く事自体は、可能かもしれません。

2011-07-12 03:41:14
_ko1 @_ko1

fortran って一言言われて終わったりして.

2011-07-12 03:41:14
1 ・・ 4 次へ