- 関数型プログラミング言語Haskell Part30 [無断転載禁止]©2ch.net
137 :デフォルトの名無しさん[sage]:2017/02/15(水) 05:29:57.20 ID:De10g5Ib - >>132
データ構造やコンパイラによる。 Haskellは基本リストなのでアドレスが連続してるとは限らない。 Cだと同じ処理を配列に施す様なループはSIMD命令に変換される。 Haskellはそう言う命令に変換する為のデータ構造使う。 (データの連続性を保証するためにもデータ構造が別なのだと思う) IntelC++コンパイラとかだと最新のSIMD命令に対応してる。 gcc程度まではHaskellでも書き方次第では追い付けるだろうけど、CPUメーカー謹製の最新CPU対応コンパイラにまでは勝てない。 入門書レベルではHaskellはCに勝てないけど、いかなる並列・並行処理も否定してない。
|
- 次世代言語議論スレ【Go Rust Haskell Scala Erlang Elixir】 第二世代 [無断転載禁止]©2ch.net
199 :デフォルトの名無しさん[sage]:2017/02/15(水) 05:47:41.94 ID:De10g5Ib - >>172
文系でも英語が苦手なら、外国語よりは馴染みのある数学に近い関数型のが馴染みやすい。
|
- 次世代言語議論スレ【Go Rust Haskell Scala Erlang Elixir】 第二世代 [無断転載禁止]©2ch.net
201 :デフォルトの名無しさん[sage]:2017/02/15(水) 06:25:50.95 ID:De10g5Ib - >>173
手続き型も制約の歴史。 その論で言えば最も制限のない言語はアセンブラ。 OOPや構造化が邪魔でアセンブラは文法がないとか言うならBASICが一番バランスしてるとでも言うのか。 構造化やOOPはデータや処理の流れを押し込めたり制限することで、大きくなり過ぎた仕様を人間に扱える様に切り出して来た。 関数型、論理型を始めとした宣言型言語は、より仕様そのものに近い形でアプローチをしてる。 関数型は性質で切り出す。 論理型は関係で切り出す。 問題は、CPUアーキテクチャから離れ過ぎて、理屈の上ではもっと最適化が進めば手続き型に負けないはずが、逆にコード上の最適化のヒントが少なくなり過ぎて最適化が進まない事。 結局別にライブラリが要る。 例えばリスト処理を状況に合わせて勝手にパックしてSIMDで処理するか、マルチスレッドで処理するか(あるいはその両方)は理屈の上ではコンパイラが決めてくれても良いが、そんな賢いコンパイラは無い。 この点、手続き上でSIMD使えるのはガリガリSIMD命令にして行く手続き型のが、少なくともシングルスレッドにおいてだけは、地道な最適化の歴史の重みが宣言型のポテンシャルを現時点で上回ってる。 宣言型の理想郷はまだ遠い。
|