トップページ > プログラム > 2014年08月16日 > pCqm9jUF

書き込み順位&時間帯一覧

7 位/158 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000200000101206



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
【Python】スクリプト バトルロワイヤル45【pl,rb,php,js】
Ruby 初心者スレッド Part 55

書き込みレス一覧

【Python】スクリプト バトルロワイヤル45【pl,rb,php,js】
676 :デフォルトの名無しさん[sage]:2014/08/16(土) 13:27:39.72 ID:pCqm9jUF
>>670,674
「(Haskell に代表される遅延評価を基本とした)純粋関数型言語では
 プログラムの自動並列化が容易/可能」
という主張には、大きな盲点(あるいは詐欺)がある
それは >>673 の最終段にある
「ほとんど全てのコンピュータのハードウェア実装は命令型である。」
という純然たる現実を(意図的に?)無視している点だ

>>672 が言うように、関数型言語の計算モデルであるラムダ計算には
もともと計算順序という概念が存在しないから、原理的には自動並列化は可能である
しかしそのプログラムを実行するのは命令型CPUだから、(逐次処理にせよ並列処理にせよ)
先行評価または遅延評価(あるいは他の評価戦略)といった計算順序を持ち込まなければ、
プログラムを命令型CPUコードへ翻訳(コンパイル)できない
このプログラムとヘードウェアとの間に立ちはだかる技術的に大きな壁は
「意味論的な隔たり(セマンティック・ギャップ)」と呼ばれ、長年の研究テーマになっていた
結果として、意味論的に命令型CPUに近い先行評価を採用した最初の関数型言語である
LISP は1960年代には実用的な処理系が存在していたにもかかわらず、遅延評価を採用した
関数型言語の実用化には、それから20年を経た Miranda の登場を待たねばならなかった

だから冒頭の間違った主張を正しく書き直すと以下のようになる
「関数型専用CPU上での実行を前提条件とすれば、
 純粋関数型言語ではプログラムの自動並列化が容易/可能」
現実には Intel 系に代表される命令型CPUが主流だから、この主張は幻想と言わざるをえない
【Python】スクリプト バトルロワイヤル45【pl,rb,php,js】
679 :デフォルトの名無しさん[sage]:2014/08/16(土) 13:59:21.32 ID:pCqm9jUF
>>677
そのとおりだよ
でも、言葉で「ギャップを埋める」と言うのは簡単だけど、
Haskellコンパイラの中の人達はロックやセマフォといった
泥臭い並列化プリミティブと格闘しなければならない

実際にこのギャップに挑戦しているのが
たとえば Parallel Haskell というプロジェクトだけど、
今のところ実験的な実装に留まっている
もしも:
・GHCの公式リリース版にこのプロジェクトの成果が反映され、
・デフォルトで並列化が有効とされ、
・適切な並列化アルゴリズムで書かれたプログラムであれば
 アムダールの法則を打破できる、すなわちコア/プロセッサ数に
 正比例して計算速度が向上できる
ようになれば、Haskell における並列化は実用化されたとみなせる

現状は最初の一歩を踏み出したレベルだから、(その将来性は否定しないけど)
現時点での「Haskell なら楽に並列化できる」という断定は、
あまりに性急すぎると考える
Ruby 初心者スレッド Part 55
318 :デフォルトの名無しさん[sage]:2014/08/16(土) 19:08:17.04 ID:pCqm9jUF
Programming Ruby 2.1 が出版されてから
翻訳を検討し始めるのではないかと思われ

Ruby 2.2 リリースとの熾烈な競争になるなぁ(棒
Ruby 初心者スレッド Part 55
321 :デフォルトの名無しさん[sage]:2014/08/16(土) 21:43:07.02 ID:pCqm9jUF
>>320
コードの可読性が数学における表記法との類似性を指すのであれば:
>> if [1, 2, 3].include?(foo)
が最も類似していると思う

もしコンパクトさを最重要視したいのなら、
Ruby では識別子に UTF-8 文字が利用できるから、
以下のコードを書けばいい

irb(main):001:0> module Enumerable; alias ∈ include?; end
=> nil
irb(main):002:0> [1, 2, 3].∈ 2
=> true
irb(main):003:0> [1, 2, 3].∈ 4
=> false
irb(main):004:0>
(2ch では「∈」という文字が化けている可能性が高いけど、
 これは「ある要素が集合に含まれているか」を表す数学の記号)
Ruby 初心者スレッド Part 55
323 :デフォルトの名無しさん[sage]:2014/08/16(土) 22:06:29.30 ID:pCqm9jUF
>>322
>>321 では「数学的表記との類似性」という視点でコードを示したわけで、
これが「Ruby的」とは一言も書いていない
だから一体、何に対して過敏に反応しているのか、わけがわからんな

「Ruby的」とか「Rubyっぽい」というのは、>>320 の前半3つの書き方、
そのどれでも受け入れ、その中からどれを選択するかはプログラマに
任せるという「寛容な設計哲学」にある(と、個人的には考える)

これの「Rubyらしさ」は、常にプログラマへ「論理的に合っててシンプルならいい」を
強要する Python とは対照的だね
Ruby 初心者スレッド Part 55
326 :デフォルトの名無しさん[sage]:2014/08/16(土) 22:17:39.81 ID:pCqm9jUF
>>325
typo をいちいち揚げ足取りするほど野暮じゃないんで....


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。