2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50 [PR] パズドラ仲間を増やして攻略しよう!フレンド募集掲示板! [PR]  

一般的な処理を関数型の書き方をすると遅い

1 :デフォルトの名無しさん:2014/01/26(日) 15:05:44.15
Rubyで関数型とか遅いからやめればいいのに

2 :デフォルトの名無しさん:2014/01/26(日) 15:06:32.36
関数型に適した問題を、
関数型に特化した言語でやって
どうにか速い例が見つかる程度。

3 :デフォルトの名無しさん:2014/01/26(日) 15:08:32.09
まあそうだよねw

4 :デフォルトの名無しさん:2014/01/26(日) 15:14:08.87
副作用を起こさないから、配列を処理して配列に入れなおしてって
やってるから、メモリコピーのコストかかるし、メモリ使用量も増えるしね。

5 :デフォルトの名無しさん:2014/01/26(日) 15:15:07.78
普通にループで書いてブロックの中に処理書けばいいのに、
関数呼び出しにしてしまうからその分のコストもかかる。

6 :デフォルトの名無しさん:2014/01/26(日) 15:16:09.95
Ruby よりは速いから問題ないよ

7 :デフォルトの名無しさん:2014/01/26(日) 15:32:58.37
>>4
その辺は最適化次第な気がする。
まあ、それを前提にしてる言語(Haskellとか)でないとそういう最適化もやりづらいだろうけど。

8 :デフォルトの名無しさん:2014/01/26(日) 16:00:44.07
意味分からん。
Rubyの時点で遅いだろ。

無理せずC/C++を使えよ。

9 :デフォルトの名無しさん:2014/01/26(日) 16:07:26.20
>>8
あすぺおつ

10 :デフォルトの名無しさん:2014/01/26(日) 17:15:31.95
次から次へと自分の無能を宣伝するスレを立てて嬉しいのかこのバカは?

11 :デフォルトの名無しさん:2014/01/26(日) 17:19:35.61
>>10
事実ですが

12 :デフォルトの名無しさん:2014/01/26(日) 17:22:58.01
「一般的な処理を関数型の書き方をすると遅い」

それは体感とか実測からくる事実なんだろう

しかし、それだけなら関数型の書き方にできる機能など誰も盛り込まないはず

速度を失った代わりに得たものがあるんじゃなかろうか
たまたまそれが >>1 にとってメリットに感じなかっただけで

だから、考えもしないでやめればいいのにというのは安直だ


ところで、関数型の書き方って何?

13 :デフォルトの名無しさん:2014/01/26(日) 17:27:15.45
まあ>>1にはわかってないんだろうさw

14 :デフォルトの名無しさん:2014/01/26(日) 17:29:08.45
はっきりした定義はないけど…たぶん >>1 が例に出したRubyでなら
生のループ文を使わず、再帰やcollect/select/detect/inject/rejectなどを使い
ifやcaseの分岐は文ではなく式として用いて
変数への再代入をしないプログラミング…って感じじゃね?

15 :デフォルトの名無しさん:2014/01/26(日) 17:32:24.44
関数を一級のオブジェクトとして扱うのが関数型の書き方に決まってるだろ
それ以外あるのか

16 :デフォルトの名無しさん:2014/01/26(日) 17:35:43.55
それは書き方じゃなくて言語仕様とかの話じゃね?

17 :デフォルトの名無しさん:2014/01/26(日) 17:35:53.35
>>15
ループの代わりに再帰を使うとか、副作用がないとか

18 :デフォルトの名無しさん:2014/01/26(日) 17:36:08.25
>>15
そこでいう「関数」が何を指すかが問題だ

数学的な関数に近い意味での関数表しているのか、
C言語みたいなプロシージャに近い意味での関数を表しているのか

前者なら、関数を一級のオブジェクトとして扱うだけじゃ
関数型の書き方というには足りないと思う

19 :デフォルトの名無しさん:2014/01/26(日) 18:07:02.54
もともと意図して設計してない以上あったりまえだろ

20 :デフォルトの名無しさん:2014/01/26(日) 18:07:30.44
>>11 君の無能が事実なんだねw

21 :デフォルトの名無しさん:2014/01/26(日) 18:08:27.37
>>17
まったくわかってない
再帰は手続き型言語でも普通に使うし
対象が数学的関数なら手続き型言語で書いたって副作用はない


int fib(int n) {
 return n < 2 ? n : fib(n-1) + fib(n-2);
}

22 :デフォルトの名無しさん:2014/01/26(日) 18:15:37.44
>>21
うん、でも関数型でよく使われるものでしょ。
だからそれを関数型の書き方と言ってるのかもしれないと
予想できるでしょ。文章を理解する時ってそういうふうに
推理するものだよね。相手が言ってることを偽になるように解釈して
いったら辿り着く先は誤解でしかないと思うけどなあ。

23 :デフォルトの名無しさん:2014/01/26(日) 18:18:08.97
>>22
でももへちまもないよ。おまえの理解は間違ってる

関数型言語の特徴は高階関数を使うことだっていってんの
そのために一級にしてるんだから

24 :デフォルトの名無しさん:2014/01/26(日) 18:20:30.50
>>23
間違ってるかどうかは言った本人に聞かないとわからないでしょ。
あなたが判断することではないし、あなたが判断できることでもないよ。
だからあなたが何言おうと無駄だと思うけどなあ。
自分の解釈が絶対正しいんだーなんてのは思い込みだよ。
世の中に絶対なんてことはないんだ。常に自分を疑うべき。

25 :デフォルトの名無しさん:2014/01/26(日) 18:22:45.19
そういうメンドクサイ哲学的な話に興味ないからもういい

俺が言いたいのは、再帰や副作用なしってのは関数型言語と関係ない

ということだけ

26 :デフォルトの名無しさん:2014/01/26(日) 18:28:58.86
メンドクサイことは好きなんだろ
くだらない日曜夕方の雑談に花咲かしていけよ

27 :デフォルトの名無しさん:2014/01/26(日) 18:29:05.51
>>25
そういう解釈ができるってだけの話だね。
相手の言うことを理解するときに自分の物差しで
測ってどうこう言ってもしょうがないと思うけどなあ。
そういうことやって周りの人間とうまく関係を構築できるものなのかなあ。
あなたの人生が心配です。

28 :デフォルトの名無しさん:2014/01/26(日) 19:59:56.73
遅いかどうかの話。
関数型に適していない問題を
書き比べてみればいい。

29 :デフォルトの名無しさん:2014/01/26(日) 20:00:45.27
データ構造を扱う問題は適さないよな

30 :デフォルトの名無しさん:2014/01/26(日) 20:03:10.26
時々関数型言語は速いなんて反論を見るけど、
それ一部の処理を省略することができる問題を
関数型言語では省略して、
手続き型・オブジェクト指向言語では、省略しないで
不公平なコードで比較しているんだよね。

31 :デフォルトの名無しさん:2014/01/26(日) 20:05:17.99
>>28
クイックソートかな

32 :デフォルトの名無しさん:2014/01/26(日) 20:10:37.18
ではクイックソートの実装を関数型言語 VS C言語で
比較してみましょう。

33 :デフォルトの名無しさん:2014/01/26(日) 20:12:01.93
代入の代わりに遅延評価が使えず、新しく生成するようなプログラムは遅くなるし、リソースを無駄に使う
だから純粋関数型言語ではなく、scalaを使って手続き型と関数型の良いどこどりしましょうね〜

34 :デフォルトの名無しさん:2014/01/26(日) 20:13:37.36
速いのが良いならアセンブリとCだけ使っとけばいいよもう

35 :デフォルトの名無しさん:2014/01/26(日) 20:14:04.16
なかなかおもしろいことになりそうだw

http://elephnote.com/blog/archives/838
> Togetterにいろいろな主張のまとめがありました。曰く、
>
> 「In-placeソートでないからだめ」「というか遅い」「いやHaskellに効率を求めてはいけない」
> 「5行の例はPivotingをしていないのでだめ」「Pivotingはクイックソートの本質ではない」
> 「メモリを抽象化していて扱えていないのでとても遅い」
> 「Haskellでメモリの議論をするべきでないしIn-placeソートでなくてもよい」
> 「Haskellでクイックソートをしっかり書きたいなら手続き型風に書くのが良い」

36 :デフォルトの名無しさん:2014/01/26(日) 20:15:53.97
そもそもなんで最近になって微妙に流行ってんの?
スクリプト言語が採用したから?

37 :デフォルトの名無しさん:2014/01/26(日) 20:17:58.23
>>36
jQueryが間接的な発端じゃないでしょうかね?

jQueyrは関数型に似ている

関数型言語とはなんぞや?

関数型言語とはうんぬん(略)

38 :デフォルトの名無しさん:2014/01/26(日) 21:06:33.86
非同期厨とも似たような臭いがするんですがそれは

39 :デフォルトの名無しさん:2014/01/26(日) 21:07:42.95
非同期IOは実利を伴うからいいんです

40 :デフォルトの名無しさん:2014/01/26(日) 21:34:04.52
ゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミwwwwwwwwwwwwwww

41 :デフォルトの名無しさん:2014/01/26(日) 21:34:40.02
>>40
ゴミで何が悪いんだ、夢の島にうめたろか?

42 :デフォルトの名無しさん:2014/01/26(日) 21:40:53.62
お前は肥溜めかコンポストな

43 :デフォルトの名無しさん:2014/01/26(日) 21:43:47.72
フィルターのメソッドにブール型を返す関数とかを入れるってのは凄くいいと思うよ

44 :デフォルトの名無しさん:2014/01/27(月) 01:08:26.16
ゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミwwwwwwwwwwww

45 :デフォルトの名無しさん:2014/01/27(月) 04:36:54.16
>>36
流行ってるって2ちゃんの話だろ?
具体的なショーケースはなにもない
LispやD言語やVBのスレが勢いある2ちゃんの話だろ

46 :デフォルトの名無しさん:2014/01/27(月) 04:46:22.34
VBのライバルであるDelphiを忘れないで下さい。

47 :デフォルトの名無しさん:2014/01/27(月) 08:08:20.18
>>45
ドカタには無縁なだけですよ

48 :デフォルトの名無しさん:2014/01/27(月) 21:40:11.67
デカイサービスやビジネスに採用された例ってあんの?

49 :デフォルトの名無しさん:2014/01/27(月) 22:18:50.03
>>35
わかりやすさでは、Haskellの圧勝。

50 :デフォルトの名無しさん:2014/01/28(火) 00:22:12.97
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所

51 :デフォルトの名無しさん:2014/01/28(火) 23:31:09.20
>>1
一般論を言えばその通りだ
性能に関して言えば、関数型に適したアルゴリズムやデータ構造の
研究/開発と、その普及が重要になってくる
たとえばアルゴリズムであればメニーコア時代の並列処理や
モナドに代表される圏論を応用したソフトウェア部品化技術、
データ構造であれば「永続データ構造」や「メモ化」(Wikipedia等を参照)が
キーワードになるだろう

Rubyなら、こんなGemがあるね
・Ruby で並列実行処理を簡単に書く
  http://subtech.g.hatena.ne.jp/secondlife/20110927/1317123109
・Rubyで関数型プログラミングをするための ImmutableList gem を公開
  http://gam0022.net/blog/2013/10/22/immutable-list-gem/
あとOSX/iOS上の並列技術であるGCDは、MacRuby/RubyMotionから
お手軽に使えるから、Macユーザにはお薦めだね
・ASCII.jp:マルチコア時代の新機軸! Snow LeopardのGCD (1/4)
  http://ascii.jp/elem/000/000/455/455786/

52 :デフォルトの名無しさん:2014/02/04(火) 06:08:47.82
>>1
そんなわけない。
今後は、マシンパワーをフルで使う処理こそ関数型になってくだろ。
遅いのは処理系。

53 :デフォルトの名無しさん:2014/02/04(火) 06:18:09.82
関数型でしか書けないってのは強い制約。
わざわざ不便にするのは、実行の流れを無くすためとか。
そうなれば、主導でマルチスレッドプログラムせずに、自動でマルチスレッド対応に出来る。

54 :デフォルトの名無しさん:2014/02/04(火) 19:19:33.49
>>47
多い土方が使用してないんじゃ流行ってるとは言わないだろ

55 :デフォルトの名無しさん:2014/02/05(水) 02:15:51.68
まあ遅さが問題にならないとこで
物好きだけが使ってればいいんじゃないでしょうか

56 :デフォルトの名無しさん:2014/02/05(水) 08:45:41.16
関数型は遅いダメだろ
時代はウインドウズでC♯とVBを極めるのが最強。関数型は絶対に使うな!
VBとC♯だけに集中して関数型は使わないようにするのが情強だぞ。絶対に使うな。関数型はクソだとみんなも言っているだろ。VBとC♯だけをやるのが正しい。絶対に関数型は使うな。関数型はクソだ。

57 :デフォルトの名無しさん:2014/02/05(水) 09:03:52.18
C#も遅い
C++があるんだからそれ使え

58 :デフォルトの名無しさん:2014/02/05(水) 12:53:57.33
>>56
ププ

59 :デフォルトの名無しさん:2014/02/05(水) 17:50:26.29
代入が出来ないとか強いプログラム上の制限がある分、速く出来るのが普通だ。
翻訳、コンパイルするほうの性能が悪いだけ。

60 :デフォルトの名無しさん:2014/02/05(水) 17:52:21.46
静的単一代入

61 :デフォルトの名無しさん:2014/02/05(水) 18:37:25.38
関数型を使ってみました。
目から鱗でした。
目には鱗が付いていることがわかりました。
これはすごいです。
ナチュラルかつ完璧な制約があります。
ごく自然な形で制約を受け入れたコードが書けるのです。
制約は私を縛るものではありませんでした。
構文上のみならずロジック上の誤りすら見つけ出してくれるのです。
コンパイルを通ればバグが無いことが保障されました。
そして、生成されたコードは速いです。
Cの二倍速いJSよりさらに早いです。
これはJSなんか使ってる場合ではないと思いました。

62 :デフォルトの名無しさん:2014/02/05(水) 18:54:11.31
関数型で書けないコードってあるの?
ヒープソートとか辛そうだけど

63 :デフォルトの名無しさん:2014/02/05(水) 18:58:27.64
Javascriptは関数型ハイブリッド言語。
Javascriptのクイックソート。

QuickSort = function (X) {
if (X.length <= 1) return X;
var pivot = X[0];
return (new Array).concat(
QuickSort(X.filter( function(x){ return pivot>x;})),
X.filter( function(x){ return pivot==x;}),
QuickSort(X.filter( function(x){ return pivot<x;})));
};

64 :デフォルトの名無しさん:2014/02/05(水) 18:59:08.27
Scalaのクイックソート


def sort(xs: Array[Int]): Array[Int] = {
if (xs.length <= 1) xs
else {
val pivot = xs(xs.length / 2)
Array.concat(
sort(xs filter (pivot >)),
xs filter (pivot ==),
sort(xs filter (pivot <)))
}
}

https://sites.google.com/site/scalajp/home/documentation/scala-by-example/chapter2

65 :デフォルトの名無しさん:2014/02/05(水) 19:01:15.54
たぶんCのクイックソートが一番速いだろうな。

66 :デフォルトの名無しさん:2014/02/05(水) 19:04:32.98
>>64
手続き型で書いた場合と比べると読みにくいし、理解するのが難しい
それでもって速度はJava以下
笑えるな

67 :デフォルトの名無しさん:2014/02/05(水) 19:06:31.08
>>66
このコードはクイックソートのロジックそのものだろ
脳みそ腐ってんじゃねえの

68 :デフォルトの名無しさん:2014/02/05(水) 19:10:18.79
マルチコア時代のプログラマは関数脳になろう
CPUのクロックアップに限界が訪れ、マルチコア化することで処理性能向上を目指す時代になりました。
これからのプログラマには、マルチコアで処理性能が向上するプログラム=マルチスレッドで並列処理が可能なプログラムを書く能力が必要になります。
今回は「関数型」でプログラムを書くことによって、いとも簡単に並列化ができることを実例を元に解説します。
http://tech-sketch.jp/2013/08/parallel-functional-programming-1.html



現場で活かす関数型プログラミング
クラウドやマルチコア、メニーコアを利用する大規模並列型のシステム開発を行なう上では、プログラミング言語の選択も重要になってきます。
そんな中でここ数年注目を浴びているのが、Haskell,OCaml,Scala,F#などといった関数型言語です。
ですが、関数型言語は、並列処理等の複雑なアルゴリズムを 記述するだけの言語ではありません。
http://www.mamezou.com/training/f_pro.html



プログラマが知るべき97のこと/関数型プログラミングを学ぶことの重要性 - Wikisource
最近プログラミングコミュニティでは、再び関数型プログラミングへの関心が高まっています。
その理由としては、業界全体でマルチコアヘの移行が進んでいる、ということもあるでしょう。
移行によって生じる新たな課題への対処に、関数型パラダイムの持つ特性がうまく合致することが明らかになってきたからです。
重要なのは、参照透過性(referential transparency)が向上するということです。
参照透過性が高い、というのは非常に素晴らしいことです。参照透過性が高いとは、関数がどこでいつ呼び出されようと、入力が同じであれば、
常に得られる結果が同じになる、ということを意味します。
つまり、関数の評価結果が状態変化の副作用に左右されることが少ない(あるいは、まったくない)ということです。
http://ja.wikisource.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%8C%E7%9F%A5%E3%82%8B%E3%81%
B9%E3%81%8D97%E3%81%AE%E3%81%93%E3%81%A8/%E9%96%A2%E6%95%B0%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A
9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82%92%E5%AD%A6%E3%81%B6%E3%81%93%E3%81%A8%E3%81%AE%E9%87%8D%E8%A6%81%E6%80%A7

69 :デフォルトの名無しさん:2014/02/05(水) 19:11:55.97
関数型で書いても並列処理の結果は結局共有部分で受けないといけないのではないんですか

70 :デフォルトの名無しさん:2014/02/05(水) 19:13:40.55
処理を関数型のイディオムに落とし込むのがだるい
パフォーマンスをいちいち考えないといけないのがだるい
数学みたく、無限の計算リソースがあるならまだしも

71 :デフォルトの名無しさん:2014/02/05(水) 19:15:26.71
適当に書いたC>>>>>>クソ遅いゴミ言語による並列処理

72 :デフォルトの名無しさん:2014/02/05(水) 19:15:58.20
CPUのマルチコア化が関数型普及の引き金
現在,皆さんが使っているパソコンを見てください。ちょっと昔のを使っているんでしたらCore2 Duo,今どきの新しいものでしたら,Corei7とか5とか3とか。
CPUの中身の配線の問題でこれ以上の集積化は難しくなってきたので,CPUコア数を増やす方向で処理能力を上げることになりました。
それが,Core iシリーズです。Core i7は1つのCPUの中に4コア入っています。コア数が複数個あるので,マルチコアCPUと言われています。
さて,話を戻します。そうしたマルチコア・マルチスレッドCPUのパワーを引き出せるのが,関数型プログラミング言語だと言われています。
CPUのマルチコア・マルチスレッド化で今もっとも注目され,再評価が進んでいます。
実は関数型プログラミング言語とは,突然現れたものではありません。1970年代頃からあるもとしてLisp(リスプ)が有名です。
関数型の特徴として非常に抽象度が高いコードになるので,一見判読しにくいことがあります。
しかし,ほんの数行コードを書くことで,スゴイ処理を実行できるので,プログラマーや研究者達の知的好奇心が沸き立ちます。それが魅力なのです。
http://gihyo.jp/book/pickup/2013/0089?ard=1391594763


10月25日 マルレク2013「クラウドとクラウド・デバイスの新時代」第五回(東京都)
講演概要
「関数型言語と並列・分散処理」
マルチコアの下でのプログラミングについては、丸山は今年1月のクラウド研究会で、「関数型言語と並列・分散処理」という講演を行いました。
そこでは、ハードウェアのMany-Core化がやむことなく進み、ソフトウェアのParallel化の要求がますます高まる中で、
ソフトウェア側の対応が遅れているという認識から出発しました。
1月の講演は、Many-Coreのパワーを引き出す上で、Data Parallelの手法を効率的に表現出来る関数型言語の有効性に注目したものです。
http://kokucheese.com/event/index/119193/



「世界は並列的に進行していて、人々も並列で動いています。コンピュータも並列で動いているのなら、なぜ逐次型プログラミング言語に固執する必要があるのでしょう。」
NI LabVIEWソフトウェアの生みの親であるJeff Kodoskyは何年か前のNIWeekでこのような質問を投げかけました。
http://www.ni.com/newsletter/50473/ja/

73 :デフォルトの名無しさん:2014/02/05(水) 19:18:58.77
最適化技術が進歩すれば分からなくなるけどな
超でかい配列 -> 処理 -> 処理 -> 処理・・・
これを自動でテンポラリ使うか遅延評価使うかを判断して
メモリアクセスパターンも考慮して最適化してくれるなら
使ってやってもいい

74 :デフォルトの名無しさん:2014/02/05(水) 19:19:51.53
関数型言語ってI/Oも並列で行えるの?

75 :デフォルトの名無しさん:2014/02/05(水) 19:20:34.40
できます。

76 :デフォルトの名無しさん:2014/02/05(水) 19:21:03.17
関数型言語を使えばクイックソートが
並列で処理可能・・・ってことには
ならないんだよな。

77 :デフォルトの名無しさん:2014/02/05(水) 19:21:49.89
>>75
ん? たとえばDVDを読み書きするとして、
並列で行うならば、レーザーが複数なければ
いけないはずだけど?

78 :デフォルトの名無しさん:2014/02/05(水) 19:22:59.93
>>76
100万の数値をソートするなら50万50万に分けた後で並列化できないの?

79 :デフォルトの名無しさん:2014/02/05(水) 19:24:05.94
>>78
いえ、だから関数言語を使うだけで簡単に並列可能に!には
ならなくて並列可能なアルゴリズムに作り変えなきゃならないでしょ?って話。

80 :デフォルトの名無しさん:2014/02/05(水) 19:24:44.61
>>78
手続き型で並列化するには特別なコードが必要
関数型なら普通に書けば・・・

81 :デフォルトの名無しさん:2014/02/05(水) 19:26:22.67
特別と言ったって
たいして特別でもないよなぁ。
ローカル変数使っていればいいだけだし。

82 :デフォルトの名無しさん:2014/02/05(水) 19:27:09.98
関数型に不可能なことはないのです。
なぜなら自分自身を書き換え進化していくことができるからです。

83 :デフォルトの名無しさん:2014/02/05(水) 19:28:07.96
いや、普通のクイックソートを書けば自動で並列化してくれる
夢の言語に対して並列化のための特別な(余計な)コードが必要という意味で

84 :デフォルトの名無しさん:2014/02/05(水) 19:28:48.30
もう全部OSがやってくれればいいのに

85 :デフォルトの名無しさん:2014/02/05(水) 19:30:27.04
>>78が書いているように
> 100万の数値をソートするなら50万50万に分けた
という、分ける処理をしないといけないしね。

1. 分ける
2. 並列で処理する
3. 統合する

単なる1工程で良かった処理が
3工程に分かれてしまう。
もうこれアルゴリズムが変わってるから。

86 :デフォルトの名無しさん:2014/02/05(水) 19:33:39.42
ScalaだとActorクラスをラッパーとして使えばいい感じにできそうだけどそれも無駄なコードだからなあ

87 :デフォルトの名無しさん:2014/02/05(水) 19:33:47.74
RPGの町にいる人みたいに各々がその他と
かかわらずに独立しているようなものなら
並列化しやすいんだけどね。

多くの問題は、一つのデータの塊を扱うことが多い。
その塊を処理するには、小さな塊に分割して
終わった後に合わせるという作業が必要になってしまう。

入力データが一つで、出力データも一つだから
並列化しにくいんだよ。

88 :デフォルトの名無しさん:2014/02/05(水) 19:36:56.85
>>87
その人達を並列化しても当たり判定とかを世界全体で同期しないといけないから意味なくね

89 :デフォルトの名無しさん:2014/02/05(水) 19:40:07.98
>>88
同期する量が少なければいいんだよ。

ソートなんか典型的な全データを同期しなければ
いけない処理だからね。

90 :デフォルトの名無しさん:2014/02/05(水) 19:48:27.11
やめろ!おまえら関数型を知るな!
C♯とVBの方がいいぞ!Javaがいいぞ主流だぞ!
関数型はクソだ!!!みんなもクソだと言っているから誰も使ってないだろ
みんなC♯とVBを使ってるだろ。みんなと同じ方が互換性があっっていいのです。関数型は忘れましょう。関数型はクソだぞ使ってると恥ずかしい笑われるぞ。

91 :デフォルトの名無しさん:2014/02/05(水) 19:49:20.45
簡単な例は手続き型でも簡単にかけるしな
簡単じゃない例は関数型でも難しいしな
並列をウリにするのはおかしい

92 :デフォルトの名無しさん:2014/02/05(水) 19:51:54.45
宗教とはそういうものです。

93 :デフォルトの名無しさん:2014/02/05(水) 19:52:06.99
そもそもshared mutable stateが問題になるほど複雑な並列処理を行うプログラムを作る人間がこのスレにいるのかどうか

94 :デフォルトの名無しさん:2014/02/05(水) 20:00:14.99
>>91
だな
関数型よりC♯とVBの方が優れてるよな。おれも同意するわ。

>>92
関数型教だよなwww
惑わされずにC♯とVB使うのが情強だ。

>>93
だな。
おれも同意する。C♯の方が良いとみんなも思ってるよ

95 :デフォルトの名無しさん:2014/02/05(水) 20:06:24.04
ドカタ用の汎用プログラミングを侵食するものではないから不安がることは無いよ

96 :デフォルトの名無しさん:2014/02/05(水) 20:37:29.86
ランダムアクセス(readもwriteも)がO(1)で
クローンがO(1)であるような、リストって作れる?

これが出来れば並列プログラミングがぐっと楽になるぞ?

97 :デフォルトの名無しさん:2014/02/05(水) 20:38:30.33
できます。

98 :デフォルトの名無しさん:2014/02/05(水) 20:39:38.49
>>97
どうすんの?普通の俺んちのパソコンでだぞ?

99 :デフォルトの名無しさん:2014/02/05(水) 20:43:04.38
関数理論を調べてください。

100 :デフォルトの名無しさん:2014/02/05(水) 20:55:55.52
>>99
みつけた。VListか?
これなんでみんな使わないの?

101 :デフォルトの名無しさん:2014/02/05(水) 20:57:00.85
関数理論にアレルギーがあるからです。

102 :デフォルトの名無しさん:2014/02/05(水) 21:01:10.24
これ最強じゃね?普通な配列におとるかもしれないけど
参照でやれば効率いいけど誰かが書き換えないか心配
コピーしてしまえば楽だけど・・・っていうトレードオフをしなくて良い
さっそく、俺の愛用するC#で実装してみるかな

103 :デフォルトの名無しさん:2014/02/05(水) 21:22:56.61
>>73に一歩近づいたかっていうか
研究者は2002年の時点でこれやってるわけだから
まだ普及した実装がないだけで、今分かっている研究を全て
集結させたコンパイラ作ったらかなり最適化できるのかな

104 :デフォルトの名無しさん:2014/02/05(水) 21:36:39.70
データ集合体へのアクセスパターンを認識し、集合構造を最適化します。
これは知識と呼ばれるものと同じであり、近い将来において、人工知能に
進化する可能性が危惧されています。

105 :デフォルトの名無しさん:2014/02/05(水) 22:20:53.60
関数型の利点は並列プログラムをしなくても、意識しなくても、コンパイラが対応すれば出来てしまうところ。
1コア、10コア、100万コアでも同一コードで動かせる。
純粋関数型で、対応コンパイラがあれば。

106 :デフォルトの名無しさん:2014/02/06(木) 00:17:06.85
>>105
残念ながら、現在の並列関数型言語処理系の研究で成果を挙げているのは、
メモリを共有する密結合型並列方式のみ
そして今後半導体の集積技術がどこまで進化するのか予測は難しいが、
せいぜい数十から数百で限界がくるから、
結果的にHPCの世界で研究されている粗結合型超並列へと向かわざるをえない
それを、従来のアルゴリズムで書かれたプログラムを粗結合型並列へ自動変換できる
魔法のコンパイラがたやすく実現できるものだと想像してしまうのは、
素人の浅はかな考えと言わざるをえない

107 :デフォルトの名無しさん:2014/02/06(木) 00:25:51.52
>>77
並列に動く複数のレーザを備えたDVDドライブがあれば、
関数型言語でもI/Oを並列に処理できるよ。

108 :デフォルトの名無しさん:2014/02/06(木) 01:08:10.67
>>64
なんかScalaって読みにくいな

何が読みにくいかって、
xs.length とメソッドっぽい書き方、Array.concat(...) とモジュールっぽい書き方、
と思えばsort(...) と普通の関数っぽい書き方、
さらには xs filter (...) と中置記法の演算子のような書き方、
さらに (pivot >) では中置記法の演算子を部分適用、

なんだかsyntaxが盛りだくさんで統一感がないように思えるんだが。

109 :デフォルトの名無しさん:2014/02/06(木) 03:40:15.90
CだってCで書きやすいようにCPUが設計されてたりするんだし
関数型で書かれたコードを動かすことが前提のプロセッサがあってもいいんじゃないの?
そういうのは世に無いの

110 :デフォルトの名無しさん:2014/02/06(木) 07:43:42.91
標準のコレクション(List)が連結リストな時点で、速いわけがない。

111 :デフォルトの名無しさん:2014/02/06(木) 19:14:44.32
VListちょっと思ってたのと違うな
fully persistent arrayっていうのが俺の思ってたのに近い
これはclone, read, writeがlog(log(操作数))

112 :デフォルトの名無しさん:2014/02/06(木) 19:57:23.87
Haskellは問題によってはアセンブラより速いらしいよ。

113 :デフォルトの名無しさん:2014/02/06(木) 21:57:24.60
誰も釣られてくれないようだな。下手糞なアセンブラよりも早いってことかな。

114 :デフォルトの名無しさん:2014/02/06(木) 22:11:03.09
たらいまわし関数をgccとsbclで試したら僅差でsbclの方が速かった

115 :デフォルトの名無しさん:2014/02/06(木) 22:26:42.18
たらい回し言語機w

30 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :


read.cgi ver 05.2.2.0 2014/02/06 もも ★ if
FOX ★ DSO(Dynamic Shared Object)