一般的な処理を関数型の書き方をすると遅い
■ このスレッドは過去ログ倉庫に格納されています
2014/01/26(日) 15:05:44.15
Rubyで関数型とか遅いからやめればいいのに
2014/01/26(日) 15:06:32.36
関数型に適した問題を、
関数型に特化した言語でやって
どうにか速い例が見つかる程度。
関数型に特化した言語でやって
どうにか速い例が見つかる程度。
3デフォルトの名無しさん
2014/01/26(日) 15:08:32.09 まあそうだよねw
2014/01/26(日) 15:14:08.87
副作用を起こさないから、配列を処理して配列に入れなおしてって
やってるから、メモリコピーのコストかかるし、メモリ使用量も増えるしね。
やってるから、メモリコピーのコストかかるし、メモリ使用量も増えるしね。
2014/01/26(日) 15:15:07.78
普通にループで書いてブロックの中に処理書けばいいのに、
関数呼び出しにしてしまうからその分のコストもかかる。
関数呼び出しにしてしまうからその分のコストもかかる。
2014/01/26(日) 15:16:09.95
Ruby よりは速いから問題ないよ
2014/01/26(日) 15:32:58.37
2014/01/26(日) 16:00:44.07
意味分からん。
Rubyの時点で遅いだろ。
無理せずC/C++を使えよ。
Rubyの時点で遅いだろ。
無理せずC/C++を使えよ。
9デフォルトの名無しさん
2014/01/26(日) 16:07:26.20 >>8
あすぺおつ
あすぺおつ
2014/01/26(日) 17:15:31.95
次から次へと自分の無能を宣伝するスレを立てて嬉しいのかこのバカは?
2014/01/26(日) 17:19:35.61
>>10
事実ですが
事実ですが
2014/01/26(日) 17:22:58.01
「一般的な処理を関数型の書き方をすると遅い」
それは体感とか実測からくる事実なんだろう
しかし、それだけなら関数型の書き方にできる機能など誰も盛り込まないはず
速度を失った代わりに得たものがあるんじゃなかろうか
たまたまそれが >>1 にとってメリットに感じなかっただけで
だから、考えもしないでやめればいいのにというのは安直だ
ところで、関数型の書き方って何?
それは体感とか実測からくる事実なんだろう
しかし、それだけなら関数型の書き方にできる機能など誰も盛り込まないはず
速度を失った代わりに得たものがあるんじゃなかろうか
たまたまそれが >>1 にとってメリットに感じなかっただけで
だから、考えもしないでやめればいいのにというのは安直だ
ところで、関数型の書き方って何?
2014/01/26(日) 17:27:15.45
まあ>>1にはわかってないんだろうさw
2014/01/26(日) 17:29:08.45
はっきりした定義はないけど…たぶん >>1 が例に出したRubyでなら
生のループ文を使わず、再帰やcollect/select/detect/inject/rejectなどを使い
ifやcaseの分岐は文ではなく式として用いて
変数への再代入をしないプログラミング…って感じじゃね?
生のループ文を使わず、再帰やcollect/select/detect/inject/rejectなどを使い
ifやcaseの分岐は文ではなく式として用いて
変数への再代入をしないプログラミング…って感じじゃね?
2014/01/26(日) 17:32:24.44
関数を一級のオブジェクトとして扱うのが関数型の書き方に決まってるだろ
それ以外あるのか
それ以外あるのか
2014/01/26(日) 17:35:43.55
それは書き方じゃなくて言語仕様とかの話じゃね?
17デフォルトの名無しさん
2014/01/26(日) 17:35:53.35 >>15
ループの代わりに再帰を使うとか、副作用がないとか
ループの代わりに再帰を使うとか、副作用がないとか
2014/01/26(日) 17:36:08.25
>>15
そこでいう「関数」が何を指すかが問題だ
数学的な関数に近い意味での関数表しているのか、
C言語みたいなプロシージャに近い意味での関数を表しているのか
前者なら、関数を一級のオブジェクトとして扱うだけじゃ
関数型の書き方というには足りないと思う
そこでいう「関数」が何を指すかが問題だ
数学的な関数に近い意味での関数表しているのか、
C言語みたいなプロシージャに近い意味での関数を表しているのか
前者なら、関数を一級のオブジェクトとして扱うだけじゃ
関数型の書き方というには足りないと思う
2014/01/26(日) 18:07:02.54
もともと意図して設計してない以上あったりまえだろ
2014/01/26(日) 18:07:30.44
>>11 君の無能が事実なんだねw
2014/01/26(日) 18:08:27.37
>>17
まったくわかってない
再帰は手続き型言語でも普通に使うし
対象が数学的関数なら手続き型言語で書いたって副作用はない
例
int fib(int n) {
return n < 2 ? n : fib(n-1) + fib(n-2);
}
まったくわかってない
再帰は手続き型言語でも普通に使うし
対象が数学的関数なら手続き型言語で書いたって副作用はない
例
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.9724デフォルトの名無しさん
2014/01/26(日) 18:20:30.50 >>23
間違ってるかどうかは言った本人に聞かないとわからないでしょ。
あなたが判断することではないし、あなたが判断できることでもないよ。
だからあなたが何言おうと無駄だと思うけどなあ。
自分の解釈が絶対正しいんだーなんてのは思い込みだよ。
世の中に絶対なんてことはないんだ。常に自分を疑うべき。
間違ってるかどうかは言った本人に聞かないとわからないでしょ。
あなたが判断することではないし、あなたが判断できることでもないよ。
だからあなたが何言おうと無駄だと思うけどなあ。
自分の解釈が絶対正しいんだーなんてのは思い込みだよ。
世の中に絶対なんてことはないんだ。常に自分を疑うべき。
2014/01/26(日) 18:22:45.19
そういうメンドクサイ哲学的な話に興味ないからもういい
俺が言いたいのは、再帰や副作用なしってのは関数型言語と関係ない
ということだけ
俺が言いたいのは、再帰や副作用なしってのは関数型言語と関係ない
ということだけ
2014/01/26(日) 18:28:58.86
メンドクサイことは好きなんだろ
くだらない日曜夕方の雑談に花咲かしていけよ
くだらない日曜夕方の雑談に花咲かしていけよ
27デフォルトの名無しさん
2014/01/26(日) 18:29:05.51 >>25
そういう解釈ができるってだけの話だね。
相手の言うことを理解するときに自分の物差しで
測ってどうこう言ってもしょうがないと思うけどなあ。
そういうことやって周りの人間とうまく関係を構築できるものなのかなあ。
あなたの人生が心配です。
そういう解釈ができるってだけの話だね。
相手の言うことを理解するときに自分の物差しで
測ってどうこう言ってもしょうがないと思うけどなあ。
そういうことやって周りの人間とうまく関係を構築できるものなのかなあ。
あなたの人生が心配です。
2014/01/26(日) 19:59:56.73
遅いかどうかの話。
関数型に適していない問題を
書き比べてみればいい。
関数型に適していない問題を
書き比べてみればいい。
2014/01/26(日) 20:00:45.27
データ構造を扱う問題は適さないよな
2014/01/26(日) 20:03:10.26
時々関数型言語は速いなんて反論を見るけど、
それ一部の処理を省略することができる問題を
関数型言語では省略して、
手続き型・オブジェクト指向言語では、省略しないで
不公平なコードで比較しているんだよね。
それ一部の処理を省略することができる問題を
関数型言語では省略して、
手続き型・オブジェクト指向言語では、省略しないで
不公平なコードで比較しているんだよね。
31デフォルトの名無しさん
2014/01/26(日) 20:05:17.99 >>28
クイックソートかな
クイックソートかな
2014/01/26(日) 20:10:37.18
ではクイックソートの実装を関数型言語 VS C言語で
比較してみましょう。
比較してみましょう。
2014/01/26(日) 20:12:01.93
代入の代わりに遅延評価が使えず、新しく生成するようなプログラムは遅くなるし、リソースを無駄に使う
だから純粋関数型言語ではなく、scalaを使って手続き型と関数型の良いどこどりしましょうね〜
だから純粋関数型言語ではなく、scalaを使って手続き型と関数型の良いどこどりしましょうね〜
2014/01/26(日) 20:13:37.36
速いのが良いならアセンブリとCだけ使っとけばいいよもう
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でクイックソートをしっかり書きたいなら手続き型風に書くのが良い」
http://elephnote.com/blog/archives/838
> Togetterにいろいろな主張のまとめがありました。曰く、
>
> 「In-placeソートでないからだめ」「というか遅い」「いやHaskellに効率を求めてはいけない」
> 「5行の例はPivotingをしていないのでだめ」「Pivotingはクイックソートの本質ではない」
> 「メモリを抽象化していて扱えていないのでとても遅い」
> 「Haskellでメモリの議論をするべきでないしIn-placeソートでなくてもよい」
> 「Haskellでクイックソートをしっかり書きたいなら手続き型風に書くのが良い」
2014/01/26(日) 20:15:53.97
そもそもなんで最近になって微妙に流行ってんの?
スクリプト言語が採用したから?
スクリプト言語が採用したから?
2014/01/26(日) 20:17:58.23
2014/01/26(日) 21:06:33.86
非同期厨とも似たような臭いがするんですがそれは
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
ゴミで何が悪いんだ、夢の島にうめたろか?
ゴミで何が悪いんだ、夢の島にうめたろか?
2014/01/26(日) 21:40:53.62
お前は肥溜めかコンポストな
2014/01/26(日) 21:43:47.72
フィルターのメソッドにブール型を返す関数とかを入れるってのは凄くいいと思うよ
44デフォルトの名無しさん
2014/01/27(月) 01:08:26.16 ゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミwwwwwwwwwwww
45デフォルトの名無しさん
2014/01/27(月) 04:36:54.162014/01/27(月) 04:46:22.34
VBのライバルであるDelphiを忘れないで下さい。
2014/01/27(月) 08:08:20.18
>>45
ドカタには無縁なだけですよ
ドカタには無縁なだけですよ
2014/01/27(月) 21:40:11.67
デカイサービスやビジネスに採用された例ってあんの?
2014/01/27(月) 22:18:50.03
>>35
わかりやすさでは、Haskellの圧勝。
わかりやすさでは、Haskellの圧勝。
2014/01/28(火) 00:22:12.97
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
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/
一般論を言えばその通りだ
性能に関して言えば、関数型に適したアルゴリズムやデータ構造の
研究/開発と、その普及が重要になってくる
たとえばアルゴリズムであればメニーコア時代の並列処理や
モナドに代表される圏論を応用したソフトウェア部品化技術、
データ構造であれば「永続データ構造」や「メモ化」(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.8253デフォルトの名無しさん
2014/02/04(火) 06:18:09.82 関数型でしか書けないってのは強い制約。
わざわざ不便にするのは、実行の流れを無くすためとか。
そうなれば、主導でマルチスレッドプログラムせずに、自動でマルチスレッド対応に出来る。
わざわざ不便にするのは、実行の流れを無くすためとか。
そうなれば、主導でマルチスレッドプログラムせずに、自動でマルチスレッド対応に出来る。
54デフォルトの名無しさん
2014/02/04(火) 19:19:33.49 >>47
多い土方が使用してないんじゃ流行ってるとは言わないだろ
多い土方が使用してないんじゃ流行ってるとは言わないだろ
2014/02/05(水) 02:15:51.68
まあ遅さが問題にならないとこで
物好きだけが使ってればいいんじゃないでしょうか
物好きだけが使ってればいいんじゃないでしょうか
2014/02/05(水) 08:45:41.16
関数型は遅いダメだろ
時代はウインドウズでC♯とVBを極めるのが最強。関数型は絶対に使うな!
VBとC♯だけに集中して関数型は使わないようにするのが情強だぞ。絶対に使うな。関数型はクソだとみんなも言っているだろ。VBとC♯だけをやるのが正しい。絶対に関数型は使うな。関数型はクソだ。
時代はウインドウズでC♯とVBを極めるのが最強。関数型は絶対に使うな!
VBとC♯だけに集中して関数型は使わないようにするのが情強だぞ。絶対に使うな。関数型はクソだとみんなも言っているだろ。VBとC♯だけをやるのが正しい。絶対に関数型は使うな。関数型はクソだ。
2014/02/05(水) 09:03:52.18
C#も遅い
C++があるんだからそれ使え
C++があるんだからそれ使え
2014/02/05(水) 12:53:57.33
>>56
ププ
ププ
59デフォルトの名無しさん
2014/02/05(水) 17:50:26.29 代入が出来ないとか強いプログラム上の制限がある分、速く出来るのが普通だ。
翻訳、コンパイルするほうの性能が悪いだけ。
翻訳、コンパイルするほうの性能が悪いだけ。
2014/02/05(水) 17:52:21.46
静的単一代入
61デフォルトの名無しさん
2014/02/05(水) 18:37:25.38 関数型を使ってみました。
目から鱗でした。
目には鱗が付いていることがわかりました。
これはすごいです。
ナチュラルかつ完璧な制約があります。
ごく自然な形で制約を受け入れたコードが書けるのです。
制約は私を縛るものではありませんでした。
構文上のみならずロジック上の誤りすら見つけ出してくれるのです。
コンパイルを通ればバグが無いことが保障されました。
そして、生成されたコードは速いです。
Cの二倍速いJSよりさらに早いです。
これはJSなんか使ってる場合ではないと思いました。
目から鱗でした。
目には鱗が付いていることがわかりました。
これはすごいです。
ナチュラルかつ完璧な制約があります。
ごく自然な形で制約を受け入れたコードが書けるのです。
制約は私を縛るものではありませんでした。
構文上のみならずロジック上の誤りすら見つけ出してくれるのです。
コンパイルを通ればバグが無いことが保障されました。
そして、生成されたコードは速いです。
Cの二倍速いJSよりさらに早いです。
これはJSなんか使ってる場合ではないと思いました。
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;})));
};
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
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
2014/02/05(水) 19:01:15.54
たぶんCのクイックソートが一番速いだろうな。
2014/02/05(水) 19:04:32.98
2014/02/05(水) 19:06:31.08
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
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
2014/02/05(水) 19:11:55.97
関数型で書いても並列処理の結果は結局共有部分で受けないといけないのではないんですか
70デフォルトの名無しさん
2014/02/05(水) 19:13:40.55 処理を関数型のイディオムに落とし込むのがだるい
パフォーマンスをいちいち考えないといけないのがだるい
数学みたく、無限の計算リソースがあるならまだしも
パフォーマンスをいちいち考えないといけないのがだるい
数学みたく、無限の計算リソースがあるならまだしも
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/
現在,皆さんが使っているパソコンを見てください。ちょっと昔のを使っているんでしたら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 最適化技術が進歩すれば分からなくなるけどな
超でかい配列 -> 処理 -> 処理 -> 処理・・・
これを自動でテンポラリ使うか遅延評価使うかを判断して
メモリアクセスパターンも考慮して最適化してくれるなら
使ってやってもいい
超でかい配列 -> 処理 -> 処理 -> 処理・・・
これを自動でテンポラリ使うか遅延評価使うかを判断して
メモリアクセスパターンも考慮して最適化してくれるなら
使ってやってもいい
2014/02/05(水) 19:19:51.53
関数型言語ってI/Oも並列で行えるの?
75デフォルトの名無しさん
2014/02/05(水) 19:20:34.40 できます。
2014/02/05(水) 19:21:03.17
関数型言語を使えばクイックソートが
並列で処理可能・・・ってことには
ならないんだよな。
並列で処理可能・・・ってことには
ならないんだよな。
2014/02/05(水) 19:21:49.89
2014/02/05(水) 19:22:59.93
>>76
100万の数値をソートするなら50万50万に分けた後で並列化できないの?
100万の数値をソートするなら50万50万に分けた後で並列化できないの?
2014/02/05(水) 19:24:05.94
80デフォルトの名無しさん
2014/02/05(水) 19:24:44.612014/02/05(水) 19:26:22.67
特別と言ったって
たいして特別でもないよなぁ。
ローカル変数使っていればいいだけだし。
たいして特別でもないよなぁ。
ローカル変数使っていればいいだけだし。
82デフォルトの名無しさん
2014/02/05(水) 19:27:09.98 関数型に不可能なことはないのです。
なぜなら自分自身を書き換え進化していくことができるからです。
なぜなら自分自身を書き換え進化していくことができるからです。
83デフォルトの名無しさん
2014/02/05(水) 19:28:07.96 いや、普通のクイックソートを書けば自動で並列化してくれる
夢の言語に対して並列化のための特別な(余計な)コードが必要という意味で
夢の言語に対して並列化のための特別な(余計な)コードが必要という意味で
2014/02/05(水) 19:28:48.30
もう全部OSがやってくれればいいのに
2014/02/05(水) 19:30:27.04
>>78が書いているように
> 100万の数値をソートするなら50万50万に分けた
という、分ける処理をしないといけないしね。
1. 分ける
2. 並列で処理する
3. 統合する
単なる1工程で良かった処理が
3工程に分かれてしまう。
もうこれアルゴリズムが変わってるから。
> 100万の数値をソートするなら50万50万に分けた
という、分ける処理をしないといけないしね。
1. 分ける
2. 並列で処理する
3. 統合する
単なる1工程で良かった処理が
3工程に分かれてしまう。
もうこれアルゴリズムが変わってるから。
2014/02/05(水) 19:33:39.42
ScalaだとActorクラスをラッパーとして使えばいい感じにできそうだけどそれも無駄なコードだからなあ
2014/02/05(水) 19:33:47.74
RPGの町にいる人みたいに各々がその他と
かかわらずに独立しているようなものなら
並列化しやすいんだけどね。
多くの問題は、一つのデータの塊を扱うことが多い。
その塊を処理するには、小さな塊に分割して
終わった後に合わせるという作業が必要になってしまう。
入力データが一つで、出力データも一つだから
並列化しにくいんだよ。
かかわらずに独立しているようなものなら
並列化しやすいんだけどね。
多くの問題は、一つのデータの塊を扱うことが多い。
その塊を処理するには、小さな塊に分割して
終わった後に合わせるという作業が必要になってしまう。
入力データが一つで、出力データも一つだから
並列化しにくいんだよ。
2014/02/05(水) 19:36:56.85
>>87
その人達を並列化しても当たり判定とかを世界全体で同期しないといけないから意味なくね
その人達を並列化しても当たり判定とかを世界全体で同期しないといけないから意味なくね
2014/02/05(水) 19:40:07.98
2014/02/05(水) 19:48:27.11
やめろ!おまえら関数型を知るな!
C♯とVBの方がいいぞ!Javaがいいぞ主流だぞ!
関数型はクソだ!!!みんなもクソだと言っているから誰も使ってないだろ
みんなC♯とVBを使ってるだろ。みんなと同じ方が互換性があっっていいのです。関数型は忘れましょう。関数型はクソだぞ使ってると恥ずかしい笑われるぞ。
C♯とVBの方がいいぞ!Javaがいいぞ主流だぞ!
関数型はクソだ!!!みんなもクソだと言っているから誰も使ってないだろ
みんなC♯とVBを使ってるだろ。みんなと同じ方が互換性があっっていいのです。関数型は忘れましょう。関数型はクソだぞ使ってると恥ずかしい笑われるぞ。
91デフォルトの名無しさん
2014/02/05(水) 19:49:20.45 簡単な例は手続き型でも簡単にかけるしな
簡単じゃない例は関数型でも難しいしな
並列をウリにするのはおかしい
簡単じゃない例は関数型でも難しいしな
並列をウリにするのはおかしい
92デフォルトの名無しさん
2014/02/05(水) 19:51:54.45 宗教とはそういうものです。
2014/02/05(水) 19:52:06.99
そもそもshared mutable stateが問題になるほど複雑な並列処理を行うプログラムを作る人間がこのスレにいるのかどうか
2014/02/05(水) 20:00:14.99
2014/02/05(水) 20:06:24.04
ドカタ用の汎用プログラミングを侵食するものではないから不安がることは無いよ
96デフォルトの名無しさん
2014/02/05(水) 20:37:29.86 ランダムアクセス(readもwriteも)がO(1)で
クローンが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.52101デフォルトの名無しさん
2014/02/05(水) 20:57:00.85 関数理論にアレルギーがあるからです。
102デフォルトの名無しさん
2014/02/05(水) 21:01:10.24 これ最強じゃね?普通な配列におとるかもしれないけど
参照でやれば効率いいけど誰かが書き換えないか心配
コピーしてしまえば楽だけど・・・っていうトレードオフをしなくて良い
さっそく、俺の愛用するC#で実装してみるかな
参照でやれば効率いいけど誰かが書き換えないか心配
コピーしてしまえば楽だけど・・・っていうトレードオフをしなくて良い
さっそく、俺の愛用するC#で実装してみるかな
103デフォルトの名無しさん
2014/02/05(水) 21:22:56.61104デフォルトの名無しさん
2014/02/05(水) 21:36:39.70 データ集合体へのアクセスパターンを認識し、集合構造を最適化します。
これは知識と呼ばれるものと同じであり、近い将来において、人工知能に
進化する可能性が危惧されています。
これは知識と呼ばれるものと同じであり、近い将来において、人工知能に
進化する可能性が危惧されています。
105デフォルトの名無しさん
2014/02/05(水) 22:20:53.60 関数型の利点は並列プログラムをしなくても、意識しなくても、コンパイラが対応すれば出来てしまうところ。
1コア、10コア、100万コアでも同一コードで動かせる。
純粋関数型で、対応コンパイラがあれば。
1コア、10コア、100万コアでも同一コードで動かせる。
純粋関数型で、対応コンパイラがあれば。
106デフォルトの名無しさん
2014/02/06(木) 00:17:06.85 >>105
残念ながら、現在の並列関数型言語処理系の研究で成果を挙げているのは、
メモリを共有する密結合型並列方式のみ
そして今後半導体の集積技術がどこまで進化するのか予測は難しいが、
せいぜい数十から数百で限界がくるから、
結果的にHPCの世界で研究されている粗結合型超並列へと向かわざるをえない
それを、従来のアルゴリズムで書かれたプログラムを粗結合型並列へ自動変換できる
魔法のコンパイラがたやすく実現できるものだと想像してしまうのは、
素人の浅はかな考えと言わざるをえない
残念ながら、現在の並列関数型言語処理系の研究で成果を挙げているのは、
メモリを共有する密結合型並列方式のみ
そして今後半導体の集積技術がどこまで進化するのか予測は難しいが、
せいぜい数十から数百で限界がくるから、
結果的にHPCの世界で研究されている粗結合型超並列へと向かわざるをえない
それを、従来のアルゴリズムで書かれたプログラムを粗結合型並列へ自動変換できる
魔法のコンパイラがたやすく実現できるものだと想像してしまうのは、
素人の浅はかな考えと言わざるをえない
107デフォルトの名無しさん
2014/02/06(木) 00:25:51.52108デフォルトの名無しさん
2014/02/06(木) 01:08:10.67 >>64
なんかScalaって読みにくいな
何が読みにくいかって、
xs.length とメソッドっぽい書き方、Array.concat(...) とモジュールっぽい書き方、
と思えばsort(...) と普通の関数っぽい書き方、
さらには xs filter (...) と中置記法の演算子のような書き方、
さらに (pivot >) では中置記法の演算子を部分適用、
なんだかsyntaxが盛りだくさんで統一感がないように思えるんだが。
なんか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(操作数))
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
116デフォルトの名無しさん
2014/02/10(月) 00:16:05.36 細かいところ並列化しても遅いまま。でかいところは、並列化する方法はすぐわかる。
117デフォルトの名無しさん
2014/02/10(月) 11:22:15.55 細かいところの並列化って
パイプラインとかスーパースカラでやってるじゃん?
CPU処理の並列化
で、この機能の限界の原因は、なんでも並列化出来るわけじゃないんだよ。
前処理の計算結果に依存する処理があるから並列化出来ない。
これは関数型言語にしても当てはまる話で
できないものはできない。
で、>>116が言うように、でかいところは並列化する方法はすぐわかる。
パイプラインとかスーパースカラでやってるじゃん?
CPU処理の並列化
で、この機能の限界の原因は、なんでも並列化出来るわけじゃないんだよ。
前処理の計算結果に依存する処理があるから並列化出来ない。
これは関数型言語にしても当てはまる話で
できないものはできない。
で、>>116が言うように、でかいところは並列化する方法はすぐわかる。
118デフォルトの名無しさん
2014/03/06(木) 03:49:38.86 関数型に魅入られた人は我々と違ってなんか宗教のように関数型を推すけど
あれはなんなんだろうか。なにか彼らの中で現行の言語で許せない何かがあって
よくわからない"それ"からの解放が宗教的恍惚をもたらすのだろうか?
たとえば俺はRPNの電卓を愛用していて日常的に2*3+4*5を
2ent3*4ent5*+と操作して計算しているわけだが
この方が計算機の構造に合ってるしエレガントで速いとは思うものの
「これからの数学では2*3+4*5は2ent3*4ent5*+と表記すべき!未来はそうなる!」
なんてあたまおかしなことはそれが引き起こす「副作用」を考えると
とても言えないわけで。
ちょうど俺が最近のC++やらなんやらのわけのわかんない型や書式、クラスの氾濫に嫌気が差して
あの「なんでもクラスだ」「クラス名は読んでわかる奴にしろ」「メソッドも見てわかるように作れ」で
長い名前だらけでキートップの磨耗をできるだけ防ぎたいプログラマーに絶不評のObjective-C最高じゃん?
ってなってんのと逆ベクトルで、関数型こそ至高!ってなる…なにがあるんだろう?
あれはなんなんだろうか。なにか彼らの中で現行の言語で許せない何かがあって
よくわからない"それ"からの解放が宗教的恍惚をもたらすのだろうか?
たとえば俺はRPNの電卓を愛用していて日常的に2*3+4*5を
2ent3*4ent5*+と操作して計算しているわけだが
この方が計算機の構造に合ってるしエレガントで速いとは思うものの
「これからの数学では2*3+4*5は2ent3*4ent5*+と表記すべき!未来はそうなる!」
なんてあたまおかしなことはそれが引き起こす「副作用」を考えると
とても言えないわけで。
ちょうど俺が最近のC++やらなんやらのわけのわかんない型や書式、クラスの氾濫に嫌気が差して
あの「なんでもクラスだ」「クラス名は読んでわかる奴にしろ」「メソッドも見てわかるように作れ」で
長い名前だらけでキートップの磨耗をできるだけ防ぎたいプログラマーに絶不評のObjective-C最高じゃん?
ってなってんのと逆ベクトルで、関数型こそ至高!ってなる…なにがあるんだろう?
119デフォルトの名無しさん
2014/03/06(木) 04:45:59.26120デフォルトの名無しさん
2014/03/06(木) 10:48:44.97 どこが?
121デフォルトの名無しさん
2014/03/12(水) 00:34:00.68ID:3u/X7b5P 時代は、マルチパラダイムに進んでるけどね。
大枠をオブジェクト指向で作って、細かい部分を関数型で埋める。
大枠をオブジェクト指向で作って、細かい部分を関数型で埋める。
122デフォルトの名無しさん
2014/03/13(木) 16:01:01.92ID:Rx1X1E2S クラス=状態がある=テストが書きにくい=管理しにくい
関数=状態がない=テストが書きやすい=管理しやすい
関数=状態がない=テストが書きやすい=管理しやすい
123デフォルトの名無しさん
2014/03/13(木) 18:14:20.27ID:6VGDGWK2 そんなに違いは無いと思うけどね。
テストは関数型が断然やりやすいけど。
テストは関数型が断然やりやすいけど。
124デフォルトの名無しさん
2014/03/21(金) 01:37:37.08ID:S2JQ/MM5 自分で使ってF#で書いた方がバグの発生率やそれの修正コスト含めて圧倒的にC#より生産性高いので使えるならF#使うわ。
>>121
だいたいそんな感じやね。大枠にするようなものまで関数型にする必要ないしと言って細かいクラスを乱立させる意味は無い。
>>121
だいたいそんな感じやね。大枠にするようなものまで関数型にする必要ないしと言って細かいクラスを乱立させる意味は無い。
125デフォルトの名無しさん
2014/03/21(金) 02:34:39.99ID:ftMrioWf カリー化って何の役に立つの?
呼び出しコストが何倍にもなるだけだと思うのだけど
呼び出しコストが何倍にもなるだけだと思うのだけど
126デフォルトの名無しさん
2014/03/21(金) 02:35:00.76ID:GtGmhcv1 機械に対するヒントが手続型より少ないのだから、仕方がないだろう。
Fortranだって早くするには、ディレクティブをたくさん書かないといけない。
Fortranだって早くするには、ディレクティブをたくさん書かないといけない。
127デフォルトの名無しさん
2014/03/21(金) 09:00:49.91ID:lULayLj6128デフォルトの名無しさん
2014/03/23(日) 23:39:20.28ID:KDR7IN4o この関数は副作用ありませんよっていう
キーワードみたいなのが手続き型でも使えれば
デバッグ中にウォッチ式で関数呼び出せたりできて便利な気がする
キーワードみたいなのが手続き型でも使えれば
デバッグ中にウォッチ式で関数呼び出せたりできて便利な気がする
129デフォルトの名無しさん
2014/03/23(日) 23:49:28.28ID:ZhYebgxz __attribute__((pure))
130デフォルトの名無しさん
2014/03/24(月) 01:40:47.03ID:xIV+dpd0 そもそも高級言語は「人間が処理を理解しやすいように」作られてんのに
なんで「こういうわかりにくい書き方をするとこんな利点が!」ってドヤるんだよ
なんで「こういうわかりにくい書き方をするとこんな利点が!」ってドヤるんだよ
131デフォルトの名無しさん
2014/03/24(月) 02:59:59.07ID:CseitgGg >>130
人間が理解しやすい ≠ お前が理解できる
人間が理解しやすい ≠ お前が理解できる
132デフォルトの名無しさん
2014/03/24(月) 10:01:42.73ID:XUp8kLsg 俺にわかりにくいものは、他の誰にも絶対にわかりくい、ってドヤってるバカはおまえだw
133デフォルトの名無しさん
2014/03/24(月) 13:52:41.93ID:qjSjB1WB ×高級言語
○高水準言語
単純にハードに近いか遠いかだけなんだけどな。指摘するのが馬鹿らしくなる位に
高級言語としか書かないのしかいないけど。
○高水準言語
単純にハードに近いか遠いかだけなんだけどな。指摘するのが馬鹿らしくなる位に
高級言語としか書かないのしかいないけど。
134デフォルトの名無しさん
2014/03/24(月) 14:02:52.49ID:XUp8kLsg High level languageという表現を見たことが無い奴を篩い分けるいい目安なので、
そういう正しい知識を広めるの、やめてくれないかなw
そういう正しい知識を広めるの、やめてくれないかなw
135デフォルトの名無しさん
2014/03/24(月) 14:29:26.54ID:qjSjB1WB >>134
高級言語ならhigh class languageになるな。
高級言語ならhigh class languageになるな。
136デフォルトの名無しさん
2014/03/24(月) 17:56:30.52ID:LCI3zej9 関数型言語がまったく普及しないのはコードが読みにくいのに
「これが読める俺tueee!」って厨二病しか支持してないせいだよね…
「これが読める俺tueee!」って厨二病しか支持してないせいだよね…
137デフォルトの名無しさん
2014/03/24(月) 17:58:21.44ID:XUp8kLsg ということにしたいのですね、としか言いようがない。
138デフォルトの名無しさん
2014/03/24(月) 22:09:12.40ID:xu/Rafk6 >>136
そういうことだな
そういうことだな
139デフォルトの名無しさん
2014/03/25(火) 03:26:52.14ID:YPJ89aQY >>136
んーわかってる人の中では普通に使われてるからねぇ。
んーわかってる人の中では普通に使われてるからねぇ。
140デフォルトの名無しさん
2014/03/25(火) 04:19:36.70ID:zpGja909 Javaで書かれたソフトウェアを使いたくないエンドユーザーが一般に存在することを
考えると、関数型で書かれたソフトウェアがユーザーに受け入れられがたいのは
容易に想像できます。
例えば、ホビーで良く使われるmebed NXP LPC1768はフラッシュ512KB、RAM32KBを
搭載、C++で開発するのが主流です。
RAMが32KBしかないのです。
この環境で関数型を使いたいでしょうか?
ユーザーはパソコン上であっても、関数型で書かれたソフトウェアを敬遠するでしょう。
アイデアは良かったと思います。
関数型は遠い未来には期待が持てると思います。
でも今は・・・
考えると、関数型で書かれたソフトウェアがユーザーに受け入れられがたいのは
容易に想像できます。
例えば、ホビーで良く使われるmebed NXP LPC1768はフラッシュ512KB、RAM32KBを
搭載、C++で開発するのが主流です。
RAMが32KBしかないのです。
この環境で関数型を使いたいでしょうか?
ユーザーはパソコン上であっても、関数型で書かれたソフトウェアを敬遠するでしょう。
アイデアは良かったと思います。
関数型は遠い未来には期待が持てると思います。
でも今は・・・
141デフォルトの名無しさん
2014/03/25(火) 04:28:05.32ID:FBko2gtk 訂正
RAMが32KBしかないのです。
関数を使いたくないのは、この環境ぐらいじゃないでしょうか?
RAMが32KBしかないのです。
関数を使いたくないのは、この環境ぐらいじゃないでしょうか?
142デフォルトの名無しさん
2014/03/25(火) 05:06:34.96ID:wfxz3XOd (関数型(笑))
143デフォルトの名無しさん
2014/03/25(火) 08:39:46.40ID:IvUvtejF 関数型言語でどういうコードが「読みやすいか」ってのは、手続き型言語やオブジェクト指向言語に比べてまだ定石のないところだとは思う。
カウボーイコーディングで場当たり的に書いていくと、より手の付けられない状態になりやすいのは関数型言語の方、ってのは実感としてあるがどうか。
カウボーイコーディングで場当たり的に書いていくと、より手の付けられない状態になりやすいのは関数型言語の方、ってのは実感としてあるがどうか。
144デフォルトの名無しさん
2014/03/25(火) 10:40:18.20ID:QImWjIyD >>140
遠い過去の世界に生きてる人がなんか言ってる、という感じにしか聞こえない。
遠い過去の世界に生きてる人がなんか言ってる、という感じにしか聞こえない。
145デフォルトの名無しさん
2014/03/25(火) 10:43:16.42ID:YPJ89aQY >>143
むしろオブジェクト指向より歴史あるんだが(´・_・`)
むしろオブジェクト指向より歴史あるんだが(´・_・`)
146デフォルトの名無しさん
2014/03/25(火) 13:16:02.08ID:XU3TbhQj 正直、C++とか筋の悪いオブジェクト指向言語で
ソースの可読性の問題でやたらバグが出て頓挫するようになったから
"ソースの可読性もクソもないコレで書けばバグが出ないよ!"って
滅んだ過去の亡霊が墓所から這い出て来たようにしか見えない。
ソースの可読性の問題でやたらバグが出て頓挫するようになったから
"ソースの可読性もクソもないコレで書けばバグが出ないよ!"って
滅んだ過去の亡霊が墓所から這い出て来たようにしか見えない。
147デフォルトの名無しさん
2014/03/25(火) 13:27:26.93ID:QImWjIyD それはお前こそが手続き脳ゾンビだと思うw
148デフォルトの名無しさん
2014/03/25(火) 13:43:31.68ID:JLDIFaf/ コンパイラさんから見た可読性が大事なんだよ
149デフォルトの名無しさん
2014/03/25(火) 13:49:04.38ID:QImWjIyD Haskellはむしろ構文解析はめんどいぞ。
PEGの論文書いた人がサンプルに使ったのが、それが理由でJavaの構文を使ってるくらいだからw
PEGの論文書いた人がサンプルに使ったのが、それが理由でJavaの構文を使ってるくらいだからw
150デフォルトの名無しさん
2014/03/25(火) 14:04:37.20ID:YPJ89aQY まぁ普通に書いたら何でもかんでもオブジェクトにしてスパゲティになるよりも値をトランスフォームしてく関数型の方がバグが少ないのは自明だわな(´・_・`)
151デフォルトの名無しさん
2014/03/25(火) 14:22:47.64ID:JLDIFaf/ だがバグのあるプログラムを書く自由は神に与えられた権利
それを脅かす者どもとは戦わねばならない
それを脅かす者どもとは戦わねばならない
152デフォルトの名無しさん
2014/03/25(火) 15:09:23.71ID:QImWjIyD Haskellでもバグのあるプログラムは書けるよ。
単に型システムによって蹴落とされるようなバグだけが、コンパイル時に弾かれる、というだけで。
単に型システムによって蹴落とされるようなバグだけが、コンパイル時に弾かれる、というだけで。
153デフォルトの名無しさん
2014/03/25(火) 15:38:21.95ID:XU3TbhQj C++が勘違いして導入した(そしていまも勘違いしてる奴が多い)オブジェクト指向と違って
本来のオブジェクト指向はオブジェクトにコレをやれとメッセージ(メソッド)を送ると
能動的にオブジェクトが自分で対処するという「ロール」としての区切りだから
本来スパゲティもなんもない。
本来のオブジェクト指向はオブジェクトにコレをやれとメッセージ(メソッド)を送ると
能動的にオブジェクトが自分で対処するという「ロール」としての区切りだから
本来スパゲティもなんもない。
154デフォルトの名無しさん
2014/03/25(火) 15:55:31.26ID:QImWjIyD 本来の、というより、Smalltalk流の、だな。
Simula流を「勘違い」と定義している奴はそんなにいないと思うぞ。
まぁ観測範囲を偏らせれば、それなりにいるのかもしれんが。
Simula流を「勘違い」と定義している奴はそんなにいないと思うぞ。
まぁ観測範囲を偏らせれば、それなりにいるのかもしれんが。
155デフォルトの名無しさん
2014/03/25(火) 16:25:19.67ID:YPJ89aQY >>153
メッセージの実行方式とメッセージをどこに送るかは何も関係ないんだが…(´Д` )
メッセージの実行方式とメッセージをどこに送るかは何も関係ないんだが…(´Д` )
156デフォルトの名無しさん
2014/03/25(火) 17:40:01.96ID:rxYqaddp >>145
歴史があるかどうかは関係ないんだが(´・_・`)
あらゆるソフトウェア、様々な規模のプロジェクトに適用されていて
経験とプラクティスがより蓄積されているのはどっちか言ってみ?(´・_・`)
歴史があるかどうかは関係ないんだが(´・_・`)
あらゆるソフトウェア、様々な規模のプロジェクトに適用されていて
経験とプラクティスがより蓄積されているのはどっちか言ってみ?(´・_・`)
157デフォルトの名無しさん
2014/03/25(火) 21:42:23.18ID:YPJ89aQY >>156
ドカタは知らんかもしらんが、OCamlもHaskellもLispもErlangも色んなものに使われてるんだが(´・_・`)
ドカタは知らんかもしらんが、OCamlもHaskellもLispもErlangも色んなものに使われてるんだが(´・_・`)
158デフォルトの名無しさん
2014/03/25(火) 21:54:28.24ID:pgzxn/ED いろんなものというのはな。
たとえば、・・・あとは>>157が答えてくれるはずw
たとえば、・・・あとは>>157が答えてくれるはずw
159デフォルトの名無しさん
2014/03/25(火) 22:02:41.15ID:IHAwITvv LispはAutocadのマクロに使われていたが、いつの間にかVBAが主流に変わっていた。
使いにくさはいい勝負なのでどっちでもいいけど。
使いにくさはいい勝負なのでどっちでもいいけど。
160デフォルトの名無しさん
2014/03/25(火) 22:08:49.40ID:IHAwITvv 関数型じゃないけど、Paintshop ProはPythonをマクロに導入して、そこから転落が始まり
ついに表舞台から消え去った。
今はひっそりと裏街道をとぼとぼしてる。
ついに表舞台から消え去った。
今はひっそりと裏街道をとぼとぼしてる。
161デフォルトの名無しさん
2014/03/25(火) 22:23:56.86ID:Z148p0/G 例えばお掃除ロボットのAIがlispで書かれてたりするみたい
162デフォルトの名無しさん
2014/03/25(火) 22:26:01.21ID:B2Pq7RkB 特殊な用途ばかりだね。
お掃除ロボットって作ったことあるかい?
お掃除ロボットって作ったことあるかい?
163デフォルトの名無しさん
2014/03/25(火) 22:29:19.16ID:Z148p0/G 使ったことすらないよ
164デフォルトの名無しさん
2014/03/25(火) 22:31:38.58ID:IHAwITvv そもそも関数型はアプリのマクロ程度にしか使いようがない。
ブラウザのスクリプトがJSではなくHaskellだったとしたら、現在のJSと同様に
広まったかもしれない。
そういう言語。
ブラウザのスクリプトがJSではなくHaskellだったとしたら、現在のJSと同様に
広まったかもしれない。
そういう言語。
165デフォルトの名無しさん
2014/03/25(火) 22:47:21.88ID:zZmveeSg 関数型は、マルチコアに良いから出てきた。
未来の言語。
まだ、マルチコアに十分に対応したのがない。
未来の言語。
まだ、マルチコアに十分に対応したのがない。
166デフォルトの名無しさん
2014/03/25(火) 23:01:12.10ID:IHAwITvv それは机上の空論の可能性が高いよ。
マルチコアに良いって言うのが副作用が無いことに依存している時点で、
既に使い道がかなり限定される。
ほとんどのユーザーは副作用のためにソフトウェアを利用するんだから。
マルチコアに良いって言うのが副作用が無いことに依存している時点で、
既に使い道がかなり限定される。
ほとんどのユーザーは副作用のためにソフトウェアを利用するんだから。
167デフォルトの名無しさん
2014/03/25(火) 23:05:22.71ID:zZmveeSg オール純粋関数型でなくてもいい。
マルチコアに対応したいところだけでいい。
CPU、GPUをフル活用しても時間食う処理の部分だけ純粋関数型で書く。
マルチコアに対応したいところだけでいい。
CPU、GPUをフル活用しても時間食う処理の部分だけ純粋関数型で書く。
168デフォルトの名無しさん
2014/03/25(火) 23:06:19.07ID:Z148p0/G 副作用はあるけど無い部分とうまく分けられる部分が評価されてるんじゃないの
169デフォルトの名無しさん
2014/03/26(水) 00:35:10.61ID:R3pTG7sy OSがタスク振り分けるからプログラムは自分で各コア勝手に弄るな!ってなりそうだよね
170デフォルトの名無しさん
2014/03/26(水) 00:48:06.90ID:74tcteRb >>166
Haskellだって副作用のあるコードかけんだよ。馬鹿じゃねーの
Haskellだって副作用のあるコードかけんだよ。馬鹿じゃねーの
171デフォルトの名無しさん
2014/03/26(水) 01:02:50.65ID:Tr2CflOd >>167 Fortran95以降のpure/elemental functionがそれに該当するかもね。
引数わ書き換えたり(Fortranは基本、アドレス渡し)、ファイルI/Oの処理
が内部で禁止される。
スカラーからスカラーへの関数が、ベクトルからベクトルへの関数に自動的に
拡張されて、自動並列化をONにすれば要素毎の演算がコアに割り振られる。
引数わ書き換えたり(Fortranは基本、アドレス渡し)、ファイルI/Oの処理
が内部で禁止される。
スカラーからスカラーへの関数が、ベクトルからベクトルへの関数に自動的に
拡張されて、自動並列化をONにすれば要素毎の演算がコアに割り振られる。
172デフォルトの名無しさん
2014/03/26(水) 02:55:25.28ID:rDn7FARN こんな問題、インライン化できないスクリプト言語だけ
173デフォルトの名無しさん
2014/03/26(水) 09:59:28.83ID:Pcq/Kh4O ソースコードから作られてたんだ!
174デフォルトの名無しさん
2014/03/26(水) 20:16:47.96ID:uCn6QoX+ ↑
とまあこのように、関数型をマンセーしているのは関数型を使いこなせないでいる人たちってことですわ。
使いこなせる人は悟りを開いて使わない選択をする。
そんな時代ですわ。
とまあこのように、関数型をマンセーしているのは関数型を使いこなせないでいる人たちってことですわ。
使いこなせる人は悟りを開いて使わない選択をする。
そんな時代ですわ。
175デフォルトの名無しさん
2014/03/26(水) 21:42:41.71ID:FbuvqMDP ということにしたいのですね。
176デフォルトの名無しさん
2014/03/26(水) 23:37:06.47ID:74tcteRb まぁ今の時代にmutableデフォで作ることがあり得ないけどな
177デフォルトの名無しさん
2014/03/28(金) 15:31:32.57ID:oHjvQv92 関数型言語を使いこなすコストパフォーマンスはオブジェクト指向とはさほど変わらないだろうけど、コストとパフォーマンスの総和はオブジェクト指向よりもかなり大きいって感じるなあ。
178デフォルトの名無しさん
2014/03/28(金) 16:02:36.26ID:7nj/VuU5 >>177
C#とF#で作ったもの、概ね速度同等で動くんだが。
C#とF#で作ったもの、概ね速度同等で動くんだが。
179デフォルトの名無しさん
2014/03/28(金) 16:34:57.35ID:JQ1TOnKh なぜそこでオブジェクト指向がでてくるのか理解できない。
180デフォルトの名無しさん
2014/03/28(金) 17:44:57.16ID:nLurpOLQ ブロックみたいな感じだね。
181デフォルトの名無しさん
2014/03/28(金) 18:21:02.92ID:oHjvQv92 >>178
実行速度じゃなくてプログラマの労力の話ね。
実行速度じゃなくてプログラマの労力の話ね。
182デフォルトの名無しさん
2014/03/28(金) 19:37:13.40ID:8pKr8NG5183デフォルトの名無しさん
2014/03/28(金) 19:41:52.44ID:uqeEKwiN 壊れてんな、この人。
184デフォルトの名無しさん
2014/03/28(金) 22:29:12.64ID:rusWfaEh お前のモジュールって必要以上にファンクショナルだよな
185デフォルトの名無しさん
2014/03/30(日) 10:13:05.52ID:YSazzIHg haskellでforMとかmutable arrayとかRWSTモナドとか使ってると、これもう手続き型言語じゃんって気分になる
でもオブジェクト指向にはなれないんだよな
やっぱ両方使える方がいい
でもオブジェクト指向にはなれないんだよな
やっぱ両方使える方がいい
186デフォルトの名無しさん
2014/03/30(日) 10:57:46.58ID:M1MHIGwx んじゃF#かScalaどぞー
187デフォルトの名無しさん
2014/03/31(月) 00:03:10.70ID:tYwCn8xl x64って何か変なスタックフレームの書き方するよな
再帰呼び出しが遅くなってスタック領域も多量消費すると思うんだけど
再帰呼び出しが遅くなってスタック領域も多量消費すると思うんだけど
188デフォルトの名無しさん
2014/03/31(月) 08:55:02.45ID:pd6KT+yL 製品版はどうせマイクロソフトなんだよ(´・_・`)
189デフォルトの名無しさん
2014/04/04(金) 21:41:40.67ID:XDFeXbOi JAVAで世界が変わる!
JAVAでOSが消える!
全てのソフトウェアはJAVAになる!
JAVA用のプロセッサが開発される!
OOP以外の言語は消える!
と言われていた時代を思い出した。
JAVAでOSが消える!
全てのソフトウェアはJAVAになる!
JAVA用のプロセッサが開発される!
OOP以外の言語は消える!
と言われていた時代を思い出した。
190デフォルトの名無しさん
2014/04/04(金) 22:41:45.02ID:eePHkA+i あー、日経とかがそう言ってたよねw
191デフォルトの名無しさん
2014/04/05(土) 11:52:17.99ID:Y7OVjorE 言ってたって証拠あるの?
192デフォルトの名無しさん
2014/04/05(土) 15:53:48.75ID:iKzYf4PO おまえの目の前の箱で探せばすぐに
193デフォルトの名無しさん
2014/04/05(土) 23:17:15.00ID:Y7OVjorE それは提示できないという意味だろうな。
194デフォルトの名無しさん
2014/04/05(土) 23:48:54.08ID:hZj4gbHT 証拠(笑
そう言うアホみたいな記事で埋め尽くされてた時代を知らない世代の方が多いのかもね、20年近く前の話だものなぁ。
当時の記事は古すぎてほとんど見つからないけど、少しは自分でググれよ。Amazonとかでそう言う本見つかるぜ。
そう言うアホみたいな記事で埋め尽くされてた時代を知らない世代の方が多いのかもね、20年近く前の話だものなぁ。
当時の記事は古すぎてほとんど見つからないけど、少しは自分でググれよ。Amazonとかでそう言う本見つかるぜ。
195デフォルトの名無しさん
2014/04/06(日) 08:04:01.37ID:B8PUb7p+ ほとんど見つからないのは、実際の所、ごく一部のバカが「銀の弾丸だ」と騒いだ、
といういつものパターンだからだよw
バズワード化すると、技術の本質ではなくバズワード的な部分しか見ないおまえのような
バカが沸くのも何十年経っても変わらないねぇw
といういつものパターンだからだよw
バズワード化すると、技術の本質ではなくバズワード的な部分しか見ないおまえのような
バカが沸くのも何十年経っても変わらないねぇw
196デフォルトの名無しさん
2014/04/06(日) 12:57:38.19ID:hTzu53D+ 誰に文句言ってるんだろう?
一人で空回りしてるね >>195のこと
一人で空回りしてるね >>195のこと
197デフォルトの名無しさん
2014/04/06(日) 17:40:55.07ID:M6hmK37I198デフォルトの名無しさん
2014/04/06(日) 20:45:59.56ID:IDxsBa0K 数年前の「安価なAndroidがiPhoneを駆逐するね!」論ぐらいの頻度で
Java無敵論はネットで毎日のように見かけたからなぁ
「おれはバズワードだってわかるもんねうひひ」とか(笑
Java無敵論はネットで毎日のように見かけたからなぁ
「おれはバズワードだってわかるもんねうひひ」とか(笑
199デフォルトの名無しさん
2014/04/07(月) 00:06:53.35ID:hxvNlixn >>195の人気に嫉妬
200デフォルトの名無しさん
2014/04/09(水) 22:27:58.57ID:lvO8yNj8 逆に携帯のOSをオープンソースでなんてあり得ないとか言われてたよね。
201デフォルトの名無しさん
2014/04/09(水) 23:11:17.72ID:rGPWN78T 今でも、ソースコードらしきものはあっても本当にそれからビルドされてるのか怪しいもんだしな
202デフォルトの名無しさん
2014/04/10(木) 03:15:39.42ID:VcyeIpim そーいや携帯のアプリはJavaだったな
203デフォルトの名無しさん
2014/05/19(月) 05:17:19.94ID:3fEqmDZd 関数型プログラミングはなあ
204デフォルトの名無しさん
2014/08/31(日) 19:37:25.77ID:knyC4Rpa205デフォルトの名無しさん
2016/11/23(水) 20:42:30.89ID:8cJNovPT 海上自衛隊のドラム演奏が凄い!東京音楽隊
Haskell's Rascals Paul V. Yoder JapanNavy band
「ハスケルのあばれ小僧」ポール・ヨーダー スネアドラムロール - YouTube
https://www.youtube.com/watch?v=7Stt2bkLSCs
Haskell's Rascals Paul V. Yoder JapanNavy band
「ハスケルのあばれ小僧」ポール・ヨーダー スネアドラムロール - YouTube
https://www.youtube.com/watch?v=7Stt2bkLSCs
206デフォルトの名無しさん
2018/05/01(火) 20:26:39.77ID:sD3/P01t >>63
今はこうだな。
var quickSort = (ary, pvt = ary[Math.trunc(ary.length/2)]) =>
ary.length <= 1
? ary
: [
...quickSort(ary.filter(n => pvt > n)),
...ary.filter(n => pvt == n),
...quickSort(ary.filter(n => pvt < n)),
]
quickSort([32,673,256,78,765,43,28,0,6])
//=> [0, 6, 28, 32, 43, 78, 256, 673, 765]
今はこうだな。
var quickSort = (ary, pvt = ary[Math.trunc(ary.length/2)]) =>
ary.length <= 1
? ary
: [
...quickSort(ary.filter(n => pvt > n)),
...ary.filter(n => pvt == n),
...quickSort(ary.filter(n => pvt < n)),
]
quickSort([32,673,256,78,765,43,28,0,6])
//=> [0, 6, 28, 32, 43, 78, 256, 673, 765]
207デフォルトの名無しさん
2018/05/23(水) 19:36:04.25ID:Au5e7VGg 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
JT78J
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
JT78J
208デフォルトの名無しさん
2018/07/05(木) 01:52:26.38ID:RfoszcD2 EV2
209デフォルトの名無しさん
2018/08/23(木) 12:06:24.33ID:NPcuqlt3 1998年購入
プログラミング言語 ML
https://images-na.ssl-images-amazon.com/images/I/31dHs00pM1L._BO1,204,203,200_.jpg
プログラミング言語 ML
https://images-na.ssl-images-amazon.com/images/I/31dHs00pM1L._BO1,204,203,200_.jpg
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 [蚤の市★]
- 「もうキモくてキモくて…」29歳女性が語る“おぢアタック”の実態。「俺ならイケるかも」年下女性を狙う勘違い中年男性に共通点が★4 [Hitzeschleier★]
- JA全農が「新おこめ券」…来年9月末の有効期限を新設、必要経費のみ上乗せ [蚤の市★]
- 【おこめ券】鈴木憲和農相 小泉前農相の備蓄米放出を“反省”「備蓄の円滑な運営を図ってまいります」 [Hitzeschleier★]
- 自民・麻生太郎副総裁 石破政権の1年は「どよーん」 高市政権発足で「何となく明るくなった」「世の中のことが決まり動いている」★2 [Hitzeschleier★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- 高市ってわざと日本を壊そうとしているスパイ的な役割なんじゃないか? [677076729]
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★7
- トランプ、G7に代わるcore 5を発表 [805596214]
- ハロワって客層悪すぎるだろwwwwwwwwwwwww
- オナニーするか😔
- 【悲報】新米、全く売れなくて倉庫が満杯になってしまうwwwwwwwwwwwwwwwwwwww [802034645]
