[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 05/14 13:02 / Filesize : 255 KB / Number-of Response : 780
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【激突】関数型言語 VS オブジェクト指向言語2



1 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/07(土) 21:26:47.61 ]
一般的には、オブジェクト指向型言語が優勢でが
一部には関数型言語を崇拝している人もいます

どちらが上なのか、この際はっきりさせましょう

前スレ toro.2ch.net/test/read.cgi/tech/1331328955/

145 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 03:27:47.51 ]
>OOPにある機能は皆OOの機能なら

そうは言ってないだろ。
GenericsやtemplateやオーバーロードをOOの機能と認めないなら、
parametric polymorphism や ad-hoc polymorphism を使ったところで
オブジェクト指向といえないし、
逆に、GenericsやtemplateやオーバーロードをOOの機能と認めるのなら、
parametric polymorphism や ad-hoc polymorphism を使ったら
オブジェクト指向といえる。

146 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 06:17:57.25 ]
>>139
考えねぇよ
リストとかが多態なだけで、自分はあくまでリスト型を受け取って何かを返す関数作ってるだけ



147 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 08:13:50.81 ]
>>145
JavaやC++よりもMLにparametric polymporhismが入った年のほうが早くね?
それなのにオブジェクト指向が起源になっちゃうの?

148 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 08:22:12.21 ]
リストに対する(多相な)map

map f [] = []
map f (x:xs) = f x : map f xs

を定義しただけでOOとは、OOの範囲はすごいなぁw

149 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 08:40:02.66 ]
lispのプログラムの特徴を「全てリスト」とするなら、OOは「全てOO」なんだよ

150 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 14:11:18.89 ]
誰も起源なんて書いてないんじゃね?

151 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 17:38:02.23 ]
parametric polymorphism と ad-hoc polymorphism がOOの機能なら
モナドは両方使って定義されてるからOOの機能だな

152 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 18:07:22.23 ]
>>149
「全てobject oriented」って何だよ意味分からん
「全てオブジェクト」って言いたいのか?
だとしても、Javaのようにブロックすらオブジェクトでない言語も
OOPを名乗ってるから事実と異なる

153 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 18:25:42.02 ]
parametric polymorphism と ad-hoc polymorphismがOOの機能なら
モナドは両方使って定義されてるから、モナドにはOOが使われている、が正解。



154 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 18:28:02.27 ]
圏論にはOOが使われている(キリッ

155 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 18:31:10.09 ]
>>154
あちらさんの言葉で言うところで、だよ。

156 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 19:09:26.44 ]
JavaはGenericsが入る前からオブジェクト指向言語を名乗ってた
=> parametric polymorhism は OOPL の必要条件じゃない

オーバーロードが無いRubyがオブジェクト指向言語を名乗ってる
=> ad-hoc polymorhism は OOPL の必要条件じゃない

157 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 20:40:19.99 ]
手続き"型"言語、関数"型"言語
そして、オブジェクト”指向”言語

名前からして比較するべきものじゃないんだよ。
オブジェクト指向は、指向って書いてあるとおり考え方。

手続き型言語を使ってオブジェクト指向が出来るように
関数型言語を使ってもオブジェクト指向が出来る。

ではオブジェクト指向言語とは何か?
答えは、オブジェクト指向を素直に表現するのに
便利な構文を持っている言語

だから必須条件なんてものは存在しない。
オブジェクト指向を代表する機能が一つでもあれば
それはオブジェクト指向言語

158 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 20:49:59.98 ]
まあ極端な話すれば、C言語はオブジェクト指向じゃないけど、C89でもOOP自体はできるわけだし

159 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 20:55:14.86 ]
今どきOOを手放しで絶賛する椰子は、今までコンピューターサイエンスが発展してきた流れとか知らないんだろうな
Simula,Smalltalkから1985年ころのflavorまでの流れ、その後C++1.0がcfrontとして登場しオブジェクト指向が一旦退化、
C++はその後複雑化の一途を辿っていること。
また、当初アプレットのためにC++を単純化したようなJavaが登場ししばらくはぱっとしなかったこと。
その後2000年ころのITバブルを機会にtomcat,WSDL,UDDIと合わせてWEBサービスで使われるようになり、
Java自体がが中庸のプログラマ向け言語としてソフトウエア開発分野の裾野へ普及していったこと、
素人向けの誤ったのOO本が入門者に誤解を与えいま変なOO感が普及し弊害が目に付くようになったこと、
それとは別の流れとして、haskellのparottなどでの成功を契機に関数型の利点の認識が広まってきたこと…
時代の節目かな。

160 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 20:57:58.20 ]
>>159
OO感→OO観

161 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 20:57:59.82 ]
基本的な流れとして手続き型も、関数型も
オブジェクト指向を取り入れる方向で進化してるよね。

162 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 20:59:11.07 ]
>>159
parottはなかろう…

163 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 21:00:32.51 ]
オブジェクト指向言語は
関数型言語の利点を取り入れ、

関数型言語はそれだけではアプリを作りにくと
現実的な選択肢としてオブジェクト指向を取り入れる。



164 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 21:01:15.18 ]
>>159
最近楽しいなと思うのは10年くらい前に産声を上げたオデスキーのScalaがここ近年
実用に使われるようになってきたこととか、Clojureというもう一つの選択肢がでてきたこととかetc

165 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 21:02:41.73 ]
>>162
あ、いや成功したのはparottでは(まだ)なく、parottの実装でhaskellが注目されたこと

166 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 21:03:54.88 ]
絶賛というか、今のOOPは単なる常識でしかない
関数型もまた、珍しい技術から単なる常識になりつつある
ただそれだけのことだろ

167 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 21:05:12.46 ]
メソッドをメッセージと捉えるのは、その多くの場合の使われ型から無理を感じる

168 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 21:06:16.77 ]
なれればどうってこと無い

169 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 22:21:19.77 ]
OOも関数型も単なる一機能なんだから、
それをもって〜言語って言い張るのは無理があるんだよ。

170 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 22:52:21.84 ]
>>169
でも、マルチスレッドや分散処理の論文は関数型や論理型の推奨する永続データモデルばかりだよ?
シングルスレッドならともかく、マルチスレッド意識したら純粋関数型や論理型じゃないと厳しい時代になってくると思うんだけど


171 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 22:53:59.95 ]
>>170
今は普通にマルチスレッドの機能は
オブジェクト指向言語に搭載されてる。

172 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 23:20:47.45 ]
ストラウストラップのOOのキモは「抽象データ型にクラスを使うアイデア」。
ref. www2.research.att.com/~bs/whatis.pdf

ケイのOOのキモは「処理系のみならず、その受け皿であるナンチャッテOS、工程まで
ひっくるめたあらゆることで徹底した動的性」。
ref. metatoys.org/oxymoron/oxymoron.html

関数型のキモは「非破壊操作とそれがもたらす参照透明性」。

型推論とかメッセージとかパターンマッチとかはオマケです。偉い人には(ry

173 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 23:31:04.63 ]
>>170
分散したいならデータも共有しないのが基本なので
永続データの共有を推奨するのはおかしいと思う



174 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 23:41:08.58 ]
>>170
あんま最近は追いかけてないから知らないけど、
汎用手続き型+トランザクショナルメモリの研究はもう止めちゃったのかね。
デッドロックのみならず、例外処理もしやすくなるから期待していたんだけど。
トランザクションで思い出したけど、SQLは宣言的言語と言われてたはずだったんだけど、
今どきはストアドプロシージャとかも使うらしいね。

175 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 23:44:18.47 ]
結局欲しいのは副作用の管理

176 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 06:49:32.37 ]
>>161>>163
オブジェクト指向の何を取り入れたの?
Haskellのどの機能がオブジェクト指向由来なのか教えてくれ

177 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 06:55:00.27 ]
OOで見るべきところがあるのはメッセージング(徹底的な動的性)とtraitsのみ
他はゴミ

178 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 07:27:14.51 ]
OCaml のことを言ってるんじゃないのか?

あとジェネリックプログラミングとかは、中途半端に型があるオブジェクト指向系の
言語でやるより、がっちり型のある関数型言語でやったほうがいいし、ST モナド
使えば、本物の「状態のカプセル化」ができる。
関数型ではオブジェクト指向なんてできない、というのは初心者が陥りがちなデマ。

179 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 07:47:00.64 ]
そういや、関数型でOOPLでいう継承ってどんな形になるの?

180 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 08:04:22.67 ]
>>179
継承っぽいやつ>>93
プロトタイプOOっぽいやつ>>25

OCamlは普通にクラスも継承もあるので省略

181 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 08:24:34.70 ]
>>179
OCamlで高階ファンクター
F はモジュール X,Y を引数にして新しいモジュールを返す

module type S = sig end
module type T = sig end

module F (X : S) (Y : T) =
struct
  include X
  include Y
end

182 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 09:21:46.15 ]
やろうと思えばCでもできること
自然に書けるかなんだけどな

183 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 12:05:42.06 ]
不自然なものを自然にしたいという需要は確かにあるね
科学的に有害か無害かは関係なく、自然か不自然かだけで商売になる



184 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 12:30:26.91 ]
ただし自然かどうかはOO信者のさじ加減ひとつで決まります

185 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 13:06:13.85 ]
セマンティクスとしては x の評価を 2 度する、というのは変わらんじゃないのかな。
その評価が状態に対して idempotent かどうかという違いであって。

186 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 13:08:03.10 ]
(誤爆w)

187 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 23:37:56.20 ]
>>183
自分はHaskellのリバース関数が自然だと感じて入門当時は感動したな

reverse [] = []
reverse (x:xs) = reverse xs ++ [x]

もちろん、組込み関数のreverseは速度重視の直感的ではないコードなんだが・・・


188 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/11(水) 01:26:37.69 ]
>>187
演算子とコンストラクタの違いが直感的に分からない
英単語だったら先頭が大文字かどうかで分かるんだが

189 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/11(水) 03:24:43.28 ]
>>188
コ、コンストラクタ!?
Haskellを例に出した私にレスされましても・・・
クラスの生成時に呼び出すメソッドと演算子に直感的な違いも何も無いと思いますが・・・

Cons演算子のことでしたら、リストという構造に対する演算子だと理解しておけば良いと思います

[1,2,3] = 1:[2.3] = 1:2:[3] = 1:2:3:[]

関数の引数にリストの全部の要素を書きたければ(要素数固定になりますが)書けますよ

sum3 (x:y:z:[]) = x+y+z

(x:xs)の部分の理解はghci上で

let (x:xs) = [1..5]

とかしてxとxsの値を調べると良いです
リストを引数に取る時の表記は、Haskellの中では特別な表記法と言う訳ではないです

+演算子もこう言う書き方は出来ま・・・廃止になったけど、ちょっと前までは出来たんです

dec (n + 1) = n


190 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/11(水) 03:47:40.43 ]
>>189
彼には言っても無駄な稀ガス…

191 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/11(水) 13:49:19.06 ]
>クラスの生成時に呼び出すメソッドと演算子に直感的な違いも何も無いと思いますが・・・

右辺で使う演算子を左辺に書いてみれば違いが分かるよ
reverse (xs++[x]) = x : reverse xs
実際には xs++[x] というパターンマッチはできない

192 名前:デフォルトの名無しさん mailto:sage [2012/04/11(水) 21:29:08.42 ]
ユーザ定義のデータコンストラクタは頭大文字で始まるから
そんな混乱せんだろ
むしろコンストラクタを関数としても使えるのは便利だ
まあリストやタプルのコンストラクタは記号だが、それくらい覚えとけ

193 名前:デフォルトの名無しさん mailto:sage [2012/04/11(水) 23:24:51.38 ]
関数型言語ってようするに、
関数がクラスになる。

言ってみればJavaScriptからprototypeがなくなったようなもの。
prototypeがなくなっても効率が悪くなるだけで
オブジェクト指向できるでしょ?

それが関数型言語。



194 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 00:08:31.03 ]
オブジェクト指向言語ってようするに、
オブジェクトがクロージャになる。

言ってみれば関数型言語から代数データ型やパターンマッチやカリー化が無くなったようなもの。
代数データ型やパターンマッチやカリー化が無いと効率悪いけど
関数型スタイルでプログラミングできるでしょ?

それがオブジェクト指向言語。

195 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 00:14:31.10 ]
> 代数データ型やパターンマッチやカリー化が無いと効率悪いけど
それはないな。


196 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 00:22:10.76 ]
>>194
それはチョット違うだろ。
クロージャーはlexical scope内にある変数をバインドして保持している関数オブジェクトで、あくまで関数オブジェクト。
オブジェクト指向のオブジェクトは、主に構造を持ったデータオブジェクト(単純スカラーでも可)またはクラスscopeにメソッドやインスタンス変数を
従属させモジュラレティーを確保する事に加え、インヘリタンス/mixin/treitなどで共有または階層関係を持たせ、データドリブンなインターフェースを提供する。
似たところもあるけれど、分けて考えるべきかと。

197 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 00:29:40.32 ]
>>196
いや、マジレスされると困るわw

つーか、そこ突っ込むなら>>193の方が違いすぎるだろ
> 関数がクラスになる

198 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 00:39:23.32 ]
>>197
じゃあ、関数の戻り値がオブジェクト(インスタンス)になる。でいいか?

オブジェクトを作り出すもの = クラス
戻り値を作り出すもの = 関数

言ってることは同じだけどなw

199 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 00:48:53.41 ]
>>198
カリー化されてんだから関数の戻り値も関数だろ
クラスとインスタンスのような関係はねーよ

それともあれか?関数もオブジェクトだから
関数型言語はオブジェクト指向ってやつか?くだらねえ

200 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 00:56:44.16 ]
気持ち悪いアナロジーで無理矢理OOに対応付けて
理解しようとしなくても
ドカタの人生で関数型言語を使う機会なんて来ないから
安心しろよ
お前にとって運悪く関数型言語が普及してしまったとしても
その頃にはお前の仕事は無くなってるよ

201 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 00:57:45.87 ]
>>197
>>193も突っ込もうと思ってたw
JSがらprototype削ったらinfix notationなlispみたいなのになっちゃうから。

202 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 01:01:03.49 ]
ドカタ以下のトイプログラマー

203 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 01:05:35.12 ]
オレ>>169>>201だけれど、

関数をOOのオブジェクトとみなすところにはそれ程違和感無かった。
言語によっては、関数オブジェクトにもメタ情報設定してOOのオブジェクトみたいにmethodを従属させたり、他のmethodをmixinさせることもできるものがあるから。
ただしhaskellではないが。



204 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 01:12:21.32 ]
関数型が自己満足以上のメリットがあると感じたこと無い

205 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 01:15:35.37 ]
>>203
うそつけ。>>169はオレの書き込みだ。

206 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 01:17:46.33 ]
>>203
あ、でもやっぱ違うか、勘違い。
クラスは静的な物(ともかぎらないclassすらもオブジェクトという概念の言語もあるけれどちょっとおいて置いて)
オブジェクトの生成はコンストラクタってのが昨今普及している概念だから。

207 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 01:18:40.06 ]
>>205
こめ、あんか間違えた。えーとどれがオレのレスだったっけw

208 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 01:19:35.18 ]
ぶっちゃけいうと

関数型は今仕事がない。
将来はあると信じてる。

オブジェクト指向は今仕事がある
将来はなくなって欲しいと、関数型厨は思ってる。
>>200とかそうだなw

209 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 01:49:53.91 ]
スパコン向けのプログラム書いてる人とかなら関数型を使う機会があるかもだが、
求められるのはプログラミング技術じゃなくて、対象問題の専門知識だわな。
あとは、大学教授が自分の論文に必要な計算をキャンパスのコンピュータを使って並列計算しました的な。

関数型は並列化が容易だから、実行速度が求められる分野に適していそうだが、
手続き型で並列化したほうがもっと速くなるから、結局なんだかなーな。

クラスタを電卓代わりに使う人用かと。

210 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 02:03:13.63 ]
>>209
本気で並列化に取り組むとその考えかたは変わるよ。
関数型の並列化はタスク?データ?どっちのparallelだと思う。
スパコンは徹底的に性能重視だし。
まいいや2chでマジレスカコワルイオレw

211 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 02:20:44.68 ]
>>210
関数型で出来ることが手続き型で出来ないってことはないんで。
FPGAとかは別としても、主流のノイマン型は手続き型がネイティブなんで。

212 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 02:45:31.08 ]
>>211
できるできないまで話を広げればパラダイムなぞ何でもいいんだよ。
性能を徹底的に追及するにはCPUの命令レベル並列化SIMD並列化core間メモリ共有離散並列化ネットワーク分散並列化
徹底的に実効効率(≒GFLOPS)と性能を追求する。
一方の関数型で一部取りざたされる並列化は、並列化のしやすさ=参照透過による並列依存解析の簡便さなどで
まだ止まっている段階であり性能の追求に関してはマッタク解になっていないンジャマイカ?
だからデータパラレルorタスクパラレルか上で訊いてみた。その答えでどのくらい深く考えている椰子かわかるから。
簡便さは無視できず大切なことかもしれないが、それで数値解析がいままでより早くなっていないのであればつかわれなくてもしょうがない。。
安易に並列化に研究成果を求めて逃げるのは愚。

で、FPGAって何の話だ?と小一時間w
もしかしてハード・ソフト両面でずぶの素人さんをオレは相手にしてしまった?
上のクロージャーもしかりだけれど2chでマジレスあまりしたくない。

213 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 03:06:38.71 ]
あーわかったわかった。
関数型が並列化に向いてるって書き込みに噛み付いてたのか。そりゃ食い違うわ。
でも、参照透過性って並列化以外に上手い生かし方が無いと思うんだが。
遅延評価も言語レベルでサポートが欲しいかと言われると、別にねぇ。



214 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 03:13:37.82 ]
>>213
参照透過性はプログラムコードの理解しやすさ、バグの入りにくさなどに少なからず貢献あるんじゃマイカ

215 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 03:20:08.01 ]
でも、副作用のないプログラムが読みやすいのは、手続き型でも同じことだしなぁ。
言語レベルでサポートしていることの意味は、自動化、
つまりは自動遅延評価や自動並列化になるとおもうんよ。

216 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 03:27:10.53 ]
>>215
副作用を禁止しちゃっても十分ソフトウェアは記述できるという数学的な原理に基づき
そのための仕組みを言語レベルの機能でちゃんとサポートし副作用を低減しようとする意義はあるのでは?

217 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 03:42:11.67 ]
そんな蓮舫さんみたいなこと言われても。

218 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 06:22:33.36 ]
副作用のある部分をコードの一部に隔離したとき、
それが他に漏れてないことを静的型検査できるのがメリット

静的型検査なんて要らないし、副作用の有無なんて
コメントにでも書いとけば分かるだろ
というプログラマにはメリット無い(批判する意図はないので注意)

219 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 06:34:07.76 ]
ただし、>>218は特定の言語(HaskellとかD)のメリットであって
関数型言語のメリットでは無い

220 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 06:44:16.58 ]
普及してるかどうかで使う言語を決めてる人って
TIOBEとか見て一喜一憂してるの?

www.tiobe.com/index.php/content/paperinfo/tpci/index.html

JavaプログラマならJavaの人気が長期的に下がり続けてる
(ついに今月は2位に陥落)の見てショック受けてるの?

幾らでも他と交換可能な木っ端プログラマは大変だね

221 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 09:49:24.36 ]
中身無いなぁ。
普及率は人気の度合い。なぜ人気があるのか考える必要がある。
誰かさんの思い込みより価値ある。

222 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 09:50:24.09 ]
>>216
仮にIOを禁止しても、IOと殆ど同じモナドを簡単に作れる
だから禁止していいんだという解釈もあるが、禁止しても無意味だという解釈もある
Haskellが、いずれかの解釈を一方的にサポートすることはない
あくまで中立

223 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 09:55:43.85 ]
モナドって副作用の定義を限定的にして副作用なくしたと主張してるだけで
ソフトウェア工学上で問題になる事項をすべて解消しているわけではいないと思うんだけど
どう思う?



224 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 11:16:27.37 ]
問題を定義した本人には、自己解決しましたと主張する権利があると思う

225 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 16:43:59.37 ]
>>221
全くもってその通り!!
中国語だって世界中で大人気だからな!!

226 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 16:51:24.45 ]
>>223
現実のコンピュータが副作用必須の設計で、モナドは副作用解決に使えるというだけ。
モナドが副作用解決のために作られた訳じゃない。

227 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 17:45:50.95 ]
モナドは何のために作られたの?

228 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 18:33:25.41 ]
人工知能だけに限らず人間の知能にも起こり得るフレーム問題は、ジョン・マッカーシー
らの提案したフレーム問題と区別して一般化フレーム問題と呼ばれている。
ソースはwikipedia

>>223
限定的なフレームを選択しないと、フレーム問題に対処できない

229 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 19:54:30.42 ]
関数型は問題資源を乱獲してあっという間に死滅させる蛮族の手法

対して従来のやり方は問題を死滅させず適宜再生産もする
農耕・牧畜をおぼえた文明人の手法

230 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 20:03:40.16 ]
は?

単に生産性が低いものを賞賛してるだけのバカですねw

231 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 20:11:16.33 ]
OOを使ったプロジェクトは次の二つに分類される

・プロジェクトが成功した場合 => 成功したのはOOのおかげ
・プロジェクトが失敗した場合 => 設計者やプログラマがOOに未熟だった

以上の詭弁により、OOはソフトウェア工学の全ての問題を解決した

232 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 20:12:09.57 ]
え、関数型って生産性あったんですか。

233 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 20:15:51.90 ]
どんな被害妄想だよ。成功も失敗も設計者の腕次第だろ。



234 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 20:41:17.18 ]
解決はするけど生産はしない

235 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 22:36:25.45 ]
>>232
生産性については職業プログラマの人に比較して貰うとして、少なくとも、rubyで入門書のサンプル以上のものが作れなかった自分が、haskellでは>>41,>>74のコードを書ける様になった

初心者には、rubyよりhaskellの方が自力でコード書ける様になり易いんじゃ無いかと思う



236 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 23:36:58.60 ]
せめて一ファイル千行ぐらいのものを
数十ファイルからなるアプリを作ってから
書けるようになったといって下さい。

短い関数一つと程度、
あんなの誤差でしかない。

237 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 23:59:11.36 ]
プログラムが書けるようになったといえる最低ラインは数万行のアプリを作れてから・・か。

238 名前:デフォルトの名無しさん mailto:sage [2012/04/13(金) 00:07:17.03 ]
gihyo.jp/design/serial/01/ec_cube2011/0002
EC-CUBE 4万行らしいよ。

239 名前:デフォルトの名無しさん mailto:sage [2012/04/13(金) 00:08:42.48 ]
www.mapee.jp/ruby/ruby173.html
Rubyは10万行

240 名前:デフォルトの名無しさん mailto:sage [2012/04/13(金) 00:12:30.38 ]
picomu-tech.blogspot.jp/2010/01/openpne2.html
OpenPNE2 13万行

Linuxは1500万行らしい

www.infoq.com/jp/news/2012/03/Defects-Open-Source-Commercial
解析対象のオープンソースプロジェクトは、コード行数が10万〜50万のものが
ほとんど(700万行を超えるプロジェクトが2つ)で、
の合計コード行数は3,744万6,469行、平均コード行数は83万2,000行になった。

241 名前:デフォルトの名無しさん mailto:sage [2012/04/13(金) 00:21:31.21 ]
OpenDylanは処理系が80万でIDEが100万stepだったっけ、失念
gccが少し前は30~40万行あった、いまの4.6,47はもっとだろうな

242 名前:デフォルトの名無しさん mailto:sage [2012/04/13(金) 00:23:31.62 ]
>>236
書きたいものを書ける様になったら行数関係無い気がするけど・・・
そもそも、私の場合、Rubyではどう書けばいいかすら思い浮かばない
(学習が足りないと言われればそうだけど、どっちも入門書読みかけ状態での知識でしかない)

Haskellは入門書読みかけの状態でも結構色々書けるから、入門者のモチベーション維持にも良いんじゃないかな
(少なくとも、自分のモチベーション維持には良い効果がある)


243 名前:デフォルトの名無しさん mailto:sage [2012/04/13(金) 00:27:01.11 ]
書きたいものを書けるのは
プロである以上最低限のことです。



244 名前:デフォルトの名無しさん mailto:sage [2012/04/13(金) 00:27:48.64 ]
>>241
間違えた、The compiler includes an IDE (Win32 only, sorry), CORBA, OLE, all in all 850000 lines of code. This is (nearly) all Dylan code.

245 名前:デフォルトの名無しさん mailto:sage [2012/04/13(金) 00:33:06.76 ]
>>243
書きたくない物でも金を受けとる以上書き上げるのが…(ry






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<255KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef