トップページ⇒tech
1001コメント341KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2012/03/10(土) 06:35:55.71
一般的には、オブジェクト指向型言語が優勢でが
一部には関数型言語を崇拝している人もいます

どちらが上なのか、この際はっきりさせましょう
0153デフォルトの名無しさん2012/03/17(土) 22:24:01.37
なんかリスト内包ある言語の勝ちに持ってきたいという意図が透けてみえて嫌ぽ
0154デフォルトの名無しさん2012/03/17(土) 22:37:38.40
まあ、実際に内包表記は便利なんだけどさ
それは関数型言語特有の機能かと言うと違う訳で、最近の言語なら内包表記か、似た機能サポートしてるっしょ
(pythonも内包表記サポートしてるし、C#も似た機能有ったの見かけた)
0155デフォルトの名無しさん2012/03/17(土) 22:46:21.64
ここからは Haskell vs.Python の対決が始まる訳ですね、wktk(棒
0156デフォルトの名無しさん2012/03/17(土) 23:23:34.86
包茎表記
0157デフォルトの名無しさん2012/03/17(土) 23:28:51.93
何でこういうちょっと難しい(?)問題だと、とたんにコードが出なくなるのw
多分、コード自体はどっちも大して変わらんはずなのに
0158デフォルトの名無しさん2012/03/17(土) 23:43:19.86
n=3
(1..n).to_a.permutation(n){|a|p a}
0159デフォルトの名無しさん2012/03/17(土) 23:48:37.10
>>148
おまえのCPUはハードウェアでガベコレしてんのか。
0160デフォルトの名無しさん2012/03/18(日) 00:08:33.09
ガベコレはしったら、メモリ以外のリソースまで
掃除されると思ってる先輩がいるんだが
どうしたらいい?
0161デフォルトの名無しさん2012/03/18(日) 00:13:34.62
>>158
待て待てw
組込みメソッド使ったら意味無いだろ

それを言ったら、Haskellも

import Data.List

parmutations [1..3]

で良いわい
0162デフォルトの名無しさん2012/03/18(日) 00:17:41.67
お題。

JavaScriptでは、nullとundefinedがありますが
これと同じ物を関数型言語で実装してください。
0163デフォルトの名無しさん2012/03/18(日) 00:26:07.90
>>161
OOPLで書くっつーても、それが単に数値でしかない以上
単なる手続き型のコードが最適解になるからなあ
限りなくOOP的なアプローチを取ると冗長だろうし
0164デフォルトの名無しさん2012/03/18(日) 00:31:26.19
ようするに、ユーザー視線での問題を
出せばいいんだよ。

たとえば、ドラッグアンドドロップを実装するとかさ。
0165デフォルトの名無しさん2012/03/18(日) 00:35:30.88
>>161
組み込みメソッドはプリミティブとして定義されているのだから、
使ってもいいんじゃね?
そのHaskellの例だと、import Data.List はプリミティブではないから、
明らかに反則だけどね

どこで線を引くかで、このスレでローカルルールが必要になると思うけど
0166デフォルトの名無しさん2012/03/18(日) 00:38:41.98
>>165
そんなことを言ったら、PHP最強ってことになるぞw

関数型言語で、ウェブサイトから
データを取ってきて表示してください。

<?php echo file_get_contents('http://www.example.com/');

完了w
0167デフォルトの名無しさん2012/03/18(日) 00:39:30.13
>>163
手続き型のコードでもいいんじゃね?それが最適解であるのなら....
実際にアンチ関数型スレでは、素数生成についてジェネレータを使った
PythonとSmalltalkのコードが示されていたけど、誰からも文句は出なかったし
0168デフォルトの名無しさん2012/03/18(日) 00:43:21.47
>>166
アンカを間違えていまいか?

そういったライブラリ利用があるから使っていいのはプリミティブまでにしようぜ、
というのが>>165の主旨なんだけど
0169デフォルトの名無しさん2012/03/18(日) 01:01:14.18
>>168
Cだと文字の表示すら出来んがな
0170デフォルトの名無しさん2012/03/18(日) 01:18:29.30
そのとおりだね
それどころかHaskellだって、もしリストの畳み込み処理が必要になったら、
組み込み関数のfoldlは使えず、いちいち
 foldl _ v [] = v
 foldl f v (x:xs) = foldl f (f v x) xs
と書かなければ反則扱いされてしまう(>>39)

だから、プリミティブまでは使ってもいいんじゃね?というのが>>165の主旨
また、ライブラリの利用は禁止とまでは言わないが、減点の対象になるだろうね(>>161)
0171デフォルトの名無しさん2012/03/18(日) 01:59:34.90
Rubyなんかはどーでもいいんだけど、
Haskell vs. Python の仁義無き闘いはマダー? チン、チン
0172デフォルトの名無しさん2012/03/18(日) 02:03:26.75
>>167
んじゃ俺は再帰で…

def perm(ns)
  return [] if ns.empty?
  return [ns] if ns.size == 1
  ns.inject([]){|r,n| r + perm(ns.reject{|x| x == n }).map{|xs| [n] + xs }}
end
n = 3
p perm((1..n).to_a)
0173デフォルトの名無しさん2012/03/18(日) 02:13:07.05
むしろ、一切の組込み関数使わないで、入出力以外の関数作れるのがHaskellやCの強みで、プログラミング学習には最適なんだがな・・・
(と言うか、自分が知らんだけで、ruby/pythonでも組み込み機能を再現できるんじゃないの?)



ライブラリ使ったら、誰かの言葉じゃないが、言語間の違いなんぞ簡単に埋められるさね
0174デフォルトの名無しさん2012/03/18(日) 02:25:27.96
>>173
Rubyの場合「組み込みクラスを使わない」となると配列はおろか数値や真偽値すら存在しないことになっちゃうし
演算子も大半のものがメソッド扱いなんで、言語としてほとんど成り立たなくなる

逆に大量の機能が言語本体に組み込まれてるから
上に書かれたようなのは全くrequireを行なわなくても実行できちゃう

なので「ライブラリ使用禁止」が「組み込みも禁止」だと無茶だし
「組み込みOK、require禁止」だとpermutation一発じゃん、となるワケで線引きが難しいと思う
0175デフォルトの名無しさん2012/03/18(日) 02:29:04.34
Haskell
ここのpermutationsの使用例で動作確認した
http://rubyist.g.hatena.ne.jp/edvakf/20090416/1239829830

checkPermu xs = and.concat $ check xs
where
check [] = []
check (x:xs) = map (x/=) xs : check xs

permutations 0 _ = [[]]
permutations _ [] = [[]]
permutations n ns = [x:xs | x <- ns, xs <- permutations (n-1) ns, checkPermu (x:xs)]

意図せず、>>161のライブラリVerより自由度が上がった(ruby版の使用例のお陰?)


>>170

ネイティブ関数に関しては、言語によってネイティブ関数を少なめにするポリシーがあったりするからな・・・
(主に言語仕様の軽量化。ライブラリとして追い出して、言語仕様をスリムにするため。Cとrubyはそれぞれ、その極端な例)

たしか、JavaやPythonもどっちかと言うとライブラリに追い出す主義のはず
0176デフォルトの名無しさん2012/03/18(日) 02:34:52.73
>>174
それはrubyが異質なだけ
上でも書いたが、rubyは何でもデフォルトに詰め込みすぎなのよ
どっかで読んだが、JavaやPythonは小クラス主義で、rubyは大クラス主義なんだと

小さなクラスの組み合わせでプログラム作るか、大きなクラスに何でもさせるか

この変はパフォーマンスとの兼ね合いや、自由度とかの兼ね合いになるんだろうけど
0177デフォルトの名無しさん2012/03/18(日) 03:03:46.85
逆に、ライブラリを使っていい前提で
開発効率を比べてみないか?

まあ、さすがに非公開ライブラリとかじゃダメだが。
0178デフォルトの名無しさん2012/03/18(日) 07:28:55.36
checkPermuを無くすと、内包表記の条件式を書いてないのと同じ動作になるので、checkPermuを追い出して、さらに自由度をあげてみた


allPattern 0 _ = [[]]
allPattern _ [] = [[]]
allPattern n ns = [x:xs | x <- ns, xs <- allPattern (n-1) ns]

permutations n xs = filter checkPermu $ allPattern n xs



各要素(リスト)から先頭要素が偶数のもののみ抽出

filter (\x -> (even.head) x) $ allPattern 3 [1..3]

各要素のリストが昇順になっているもののみ抽出

filter (\(x:y:z:[]) -> x <= y && y <= z) $ allPattern 3 [1..3]
0179デフォルトの名無しさん2012/03/18(日) 10:12:47.30
ライブラリの使用が前提で比較するなら
それなりの規模の内容である必要があるな
0180デフォルトの名無しさん2012/03/18(日) 11:04:54.77
そうだな。Rail On Railsの15分で作るブログ
あの程度でいいから関数型言語で作ってみてよ。
0181デフォルトの名無しさん2012/03/18(日) 11:08:23.44
Ruby信者を装ったRubyアンチ厨の新たな荒らしネタだと判明しましたw
0182デフォルトの名無しさん2012/03/18(日) 11:26:23.79
それなりの規模と言われてRoRを思い浮かべる
Webドカタ思考は非常にRuby信者らしいじゃん
どうしてRubyアンチ厨だと思ったん?
0183デフォルトの名無しさん2012/03/18(日) 11:45:35.73
>>180
自分は、Web系全く触ったこと無いんでパスするが、この辺見ながら、RoRと使い比べてみては?
http://yannesposito.com/Scratch/en/blog/Yesod-tutorial-for-newbies/
0184デフォルトの名無しさん2012/03/18(日) 12:03:18.74
それなりの規模って言って
本当に実務レベルのもの要求したって
書けないだろw

だから15分程度でできる課題を用意したのに、
それすらできないのか?
0185デフォルトの名無しさん2012/03/18(日) 12:07:45.51
>>182
Rails信者はRuby信者だけど
Ruby信者にはRailsアンチもいる事に注意
0186デフォルトの名無しさん2012/03/18(日) 12:07:56.84
Ruby on Railsの「15分」の真実を知らずに偉そうな奴もいたもんだw

あれはRoRがまだマイナーだった頃、IRCのしかるべきチャンネルに入れば
DHHとかが直接指導してくれた、だなんていう時代の話。
0187デフォルトの名無しさん2012/03/18(日) 12:12:02.90
関数型言語で、それなりの規模といったら
それなりの”関数”でしかない件。

関数型言語だけではアプリは作れない。
それが関数である宿命。
0188デフォルトの名無しさん2012/03/18(日) 12:49:16.35
>>184
英語読みながらだと確実に15分以上かかるじゃないか
おまけに私は全くWebに興味が無い

と言うか、>>175,>>178書いててなんだけど、Haskell入門書もまだ読み終わってない入門中の身なんよ
(正直、>>158見るまで、>>161のライブラリ関数の存在自体知らなかったw)

それなのに、Rubyのコードが>>172のみってのは・・・

今回見たかったのは、プログラミングする際の思考の流れが見たかったんだ
自分の場合は、内包表記で1から3までの重複なしの組み合わせを素直に書くと、こうなる

xs = [1..3]
[[x,y,z] | x <- xs, y <- xs, z <- xs, x /= y, x /= z, y /= z]

んで、1から4の場合はこうなる

xs = [1..4]
[[w,x,y,z] | w <- xs, x <- xs, y <- xs, z <- xs, w /= x, w /= y, w /= z, x /= y, x /=z, y /= z]

ここで、w /= ..., x /= ..., y /= ...に注目する

w /= x, w /= y, w /= z
x /= y, x /= z
y /= z

と、x /= ...と、y /=...については、1から3と共通な事が分かる
1から5や、1から2についても、同様な法則性があるだろう

そう言う思考の流れでcheckPermuは組んでみた
なので、出来れば、>>172書いた人はどういう思考の流れで組んだのかお聞きしたい
0189デフォルトの名無しさん2012/03/18(日) 12:50:53.34
おまえらpermutationはsortの逆関数だと気付くまでに何分かかった?
0190デフォルトの名無しさん2012/03/18(日) 12:56:25.47
> 今回見たかったのは、プログラミングする際の思考の流れが見たかったんだ

一般のプログラミングで1から3までの重複なしの
組み合わせを書くことなんてまずないよ。

そんな考えることが殆ど無いこと、
思考の流れなんて言われても思考しません。

あえて言うのなら、「重複なしの組み合わせ」を返すメソッドを書いて
それを呼び出すだけだな。ぱっとコードを見て説明(名前)が必要なら関数にする。
xs = get重複なしの組み合わせ(1,3);
すごくわかりやすいよね。

あんた、実戦経験ないんじゃない?
プログラミングのための勉強ばっかしてて
動くアプリを作ったことないでしょ。
0191デフォルトの名無しさん2012/03/18(日) 12:56:53.80
>>189
お前のレス見たので5秒w
0192デフォルトの名無しさん2012/03/18(日) 13:02:12.43
最近、言語仕様でサポートされてるのも
ライブラリでサポートされるのも、
違いを感じないな。

とある言語なら、こうやって書ける!と言われても、
たしかにこの言語でそれ書くの大変だけど、
とある言語では、そうやって書ける構文を言語開発者が
作ってくれてるだけだよね。

作ってくれてるから楽だ。という話なら
それがライブラリでも、作ってくれてれば楽だよね。

言語仕様も、ライブラリも大差ないんじゃない?
この考え、否定出来ないな。
0193デフォルトの名無しさん2012/03/18(日) 13:05:19.48
>>190
日本のIT業界が世界に勝てない理由が分かった気がする・・・
0194デフォルトの名無しさん2012/03/18(日) 13:07:04.68
>>193
うん。開発力の差だよ。
やつらは、まずとりあえず動くものを作る。
そしてあとで直す。こういうやり方。
0195デフォルトの名無しさん2012/03/18(日) 13:09:08.78
railsとかもそうだよね。
まず、動くものが出来るスピードが大事。
興味がないと言ってる場合じゃないよ。
0196デフォルトの名無しさん2012/03/18(日) 13:31:31.34
>>194
それもあるが、考える力が全般的に負けてるんじゃないか?
(自分も人の事言えないが、壁にぶち当たったときの突破力みたいなのがRubyじゃ身につかなさそうな意見だ)

素人のコードに付き合う余裕も無いとは・・・
実践じゃ、ありもののコード使えばいいけど、頭の体操も実践風にするのはどうなの
0197デフォルトの名無しさん2012/03/18(日) 13:36:25.08
仕事ではもっと面倒な事を考えてるから問題ないよ。

既存ライブラリの成熟、過去との互換性、新技術見極め、開発者集め、
どちらも自分が頑張っただけじゃ解決しない
もっと面倒な問題だ。
0198デフォルトの名無しさん2012/03/18(日) 13:38:44.54
GithubがあっさりクラックされたRailsがどうしたって?
0199デフォルトの名無しさん2012/03/18(日) 13:40:51.49
関数型言語でクラックされたって話は聞かないな。

使われてないからか。
0200デフォルトの名無しさん2012/03/18(日) 13:44:34.99
Rubyは静的型チェックが無いんだから
Haskellと同じ長さ/時間でプログラムを書けたとしても
同等じゃないんだよ

全ての変数にkind_of?でチェックを入れても、
所詮は実行時チェックにすぎないから
まだ同等じゃない
0201デフォルトの名無しさん2012/03/18(日) 13:51:50.56
> Haskellと同じ長さ/時間でプログラムを書けたとしても
> 同等じゃないんだよ
いや、速く作れる。
0202デフォルトの名無しさん2012/03/18(日) 13:54:33.14
>>199
これって、割と有名なサービスだと思うけど・・・
http://tanakh.jp/pub/unisys-tech-2011-11-09.html#7
0203デフォルトの名無しさん2012/03/18(日) 13:56:42.59
>>202
daemontoolsの再実装のことですか?
仮想ドライブじゃない方の
daemontoolsですよね?
0204デフォルトの名無しさん2012/03/18(日) 13:59:43.03
>>202
それは、(ウェブ)サービスではなく
UNIXのサービス管理ツールだ。マヌケめ。
0205デフォルトの名無しさん2012/03/18(日) 14:00:39.82
命題論理実装してみようず

data Expr a =
    TRUE
  | FALSE
  | And (Expr a) (Expr a)
  | Or (Expr a) (Expr a)
  | Not (Expr a)
  | Base a

eval :: (t -> Bool) -> Expr t -> Bool
eval evalBase expr =
  case expr of
       TRUE -> True
       FALSE -> False
       Base base -> evalBase base
       And x y -> eval' x && eval' y
       Or x y -> eval' x || eval' y
       Not x -> not $ eval' x
  where eval' = eval evalBase
0206デフォルトの名無しさん2012/03/18(日) 14:02:37.01
つまらん。
なんでいつも関数レベルの話しかせんのだ?

設計レベルの話しろよ。
デザインパターンを関数型言語で実装するとか
0207デフォルトの名無しさん2012/03/18(日) 14:11:32.23
数学屋はヒントを隠して問題を出す。
宣言を明示するパラダイムとは全く逆のことをしている。
0208デフォルトの名無しさん2012/03/18(日) 14:16:12.84
俺は拡張性を重視しながら開発をしているわけだが、

拡張性のある関数。
なぜこの言葉に違和感があるのだろうか?
02091722012/03/18(日) 14:24:18.89
>>188
俺は手続き的に、最初に自分が手でその作業をやる場合の手順を考えた
1〜nのカードを用意して、手から順番に机の左から置いてくイメージ
そのイメージをする中で、1枚置いたら、その残りで同じことを繰り返す…つまり再帰であると気付いたって感じ
0210デフォルトの名無しさん2012/03/18(日) 14:27:20.70
1.普通に考えたら手続きで書く。
2.関数型って言えば再帰だよねwww
3.やってみた。

こんな感じ。
0211デフォルトの名無しさん2012/03/18(日) 14:52:30.30
>>208
コンビネータを知らないから
0212デフォルトの名無しさん2012/03/18(日) 14:56:49.54
>>211
うん。それで?
0213デフォルトの名無しさん2012/03/18(日) 15:00:56.35
馬鹿には拡張は無理
0214デフォルトの名無しさん2012/03/18(日) 21:37:40.20
>>206
GoFに実装する価値のあるもん在ったっけ?
0215デフォルトの名無しさん2012/03/18(日) 21:42:49.62
>214
デザパタを勘違いしてないか?

最初に何かしたいというお題があって
それをオブジェクト指向で実装したのが
デザインパターンね。

最初の何かしたいというお題は
別にオブジェクト指向に限ったものじゃないよ。
0216デフォルトの名無しさん2012/03/18(日) 22:21:20.65
デザインパターンがそんなにすごいのなら
どうして抽象化して再利用できるようにしないのか?
それはつまりデザパタが行える抽象化は
関数プログラミングでは取るに足らないばかりなので
一瞥の価値もないからだ。
と密かに思ってるんだけどどうだろう
0217デフォルトの名無しさん2012/03/18(日) 22:29:29.87
>>216
デザインパターンは抽象化して
再利用できるようにしたものだよ。

だから、あんたの結論は逆
0218デフォルトの名無しさん2012/03/18(日) 22:57:07.07
Javaの場合、言語がカチコチなせいで、具体的汎用的なコードとしては
実装できず、「パターン」とするしかないものもある。Smalltalkでは確か
そういうパターンのいくつかは具体的に実装できるとかいう話があったはず。
0219デフォルトの名無しさん2012/03/18(日) 23:15:13.21
デザインパターンは言語は関係ないよ。
実装が違っても、パターンと呼ばれる概念は存在する。
0220デフォルトの名無しさん2012/03/18(日) 23:58:41.53
実装が改善される必要はないんだよな
コードは何も変わらなくても、概念が有名になれば説明しやすくなって可読性は向上する
0221デフォルトの名無しさん2012/03/19(月) 00:25:35.48
なんか抽象化という言葉の意味が違う
パターンを抽象化したのなら元の記述より短くならないと
書き写すのは抽象化とは言わないでしょ
でも何となくわかったよ
javaでは抽象化はできないんだね
だからパターンってもので凌ぐわけだよ
でやっぱり関数型で行える抽象化からすると
デザパタはおもちゃにしか見えないというか
だからパターンってもので凌ぐわけだよ
でやっぱりデザパタは関数型で行われる抽象化からすると
02222212012/03/19(月) 00:29:00.39
ごめん最後の二行は忘れて
0223デフォルトの名無しさん2012/03/19(月) 00:33:12.35
末尾再帰?
0224デフォルトの名無しさん2012/03/19(月) 00:56:24.28
そりゃデザパタはパターンランゲージに端を発するもので、
元々は建築家がいかに住人参加型の街づくりが出来るかを考えたものだからな。
数学的な抽象化とはまるで意味合いが違う。
違うものを同列に語るのは間違っているし、優劣を付けるのも同様。
0225デフォルトの名無しさん2012/03/19(月) 00:58:15.82
「まるで」とは言い過ぎた。当然、絡む部分もある。
0226デフォルトの名無しさん2012/03/19(月) 01:57:44.05
>>221
オブジェクトは書き写すとは言わないでしょ
書き写すのはstringだが、stringは関係ないな
0227デフォルトの名無しさん2012/03/19(月) 02:47:22.22
class nullObject;
class undefinedObject;

全部共通のポインタにいれたいなら、shared_ptr<void>で解決
0228デフォルトの名無しさん2012/03/19(月) 07:17:56.65
>>205はCompositeパターンもStrategyパターンも
Interpreterパターンも使ってる
0229デフォルトの名無しさん2012/03/19(月) 07:31:17.07
建築と数学だから関係ない、とか言ってる奴は、『親族の基本構造』を知らないとみえる
0230デフォルトの名無しさん2012/03/19(月) 10:12:40.12
他人のソース読んでいるとゴミみたいに冗長なんだよな。
書き方が下手だとかそういう瑣末な話ではなく論理的な無駄が多い。
エレガントさに目覚めたHaskell厨には頑張って欲しい。
しかしこういう論理的にガチガチなのは平均的なプログラマーには受け入れられないだろうな。
0231デフォルトの名無しさん2012/03/19(月) 11:06:48.16
Haskell使うには副作用ありきの考え方から抜けないといけないのが辛い。
参照やポインタありきなデータ構造をピュアにすんのが辛い。
何かこの構造はこう書けるとか、代わりにこれ使えとかいう指針はないの
0232デフォルトの名無しさん2012/03/19(月) 11:51:36.72
親族の基本構造って、パターンを勉強したら親族が繁栄しましたって話じゃなくて
何も勉強しなくても自然にエレガントな構造になってたって話だろ
0233デフォルトの名無しさん2012/03/19(月) 13:25:25.68
>>231 Purely Functional Data Structures の翻訳が待たれる
0234デフォルトの名無しさん2012/03/19(月) 13:28:55.61
>>231
再帰とか高階関数とか、dataで独自データ型作るとかで大体対応出来る
0235デフォルトの名無しさん2012/03/19(月) 14:13:18.29
宣言型を拡張していくのは限界がある

プロの棋士じゃないんだから
「たった一手悪手を指しただけで敗北」
みたいなのはいらない
0236デフォルトの名無しさん2012/03/19(月) 14:59:32.85
それ命令型or手続き型の悪口にしか思えないのだが
0237デフォルトの名無しさん2012/03/19(月) 18:53:35.57
>>233
博士論文版(PDF)の方はSMLコードしか載っていませんが、
本の方はHaskellコードが巻末に載っているそうです。
英語が苦手でもHaskellが得意なら活用できるかもしれません。
PFDS読書会が進行中なので議事録が参考になると思います。

Purely Functional Data Structures
http://www.cs.cmu.edu/~rwh/theses/okasaki.pdf
Purely Functional Data Structures
http://www.amazon.co.jp/dp/0521663504

Purely Functional Data Structures読書会議事録
http://wiki.haskell.jp/Workshop/ReadPFDS/
20分でわかる Purely Functional Data Structures
http://www.kmonos.net/pub/Presen/PFDS.pdf
0238デフォルトの名無しさん2012/03/19(月) 21:18:01.23
>>143
mallocに関して他の板でも同じ事をいってたヤツがいたな。
どっから出たガセねたなんだろ。

glib使ってるgccは、mallocつかうと毎回mmap呼ぶし、
Windows上のgccとcl.exeは、Platform SDKにある同じ
malloc関数を使う。そのmalloc関数のコールスタックを追うと
毎回HeapAllocを内部で呼んでる。

なんでそういう仕組みになってるか多少考えればすぐ解るはずなんだけどな。
OSのメモリ関数は、呼ばれても実際にはメモリーを割り当てない。
仮に複数のアプリが同時に2GBの領域を要求しても実際にメモリーを
割り当てないことでスライシングに陥るという最悪の事態を緩和してる。

個々のソフトでメモリー管理なんかしてたらシステム全体として遅くなんだよね。
0239デフォルトの名無しさん2012/03/19(月) 21:20:41.77
>>238
メモリアロケータとか
newの実装を勉強してから
またおいで。
0240デフォルトの名無しさん2012/03/19(月) 21:23:34.66
>>239
newも毎回呼び出してる。
アロケーターとはそもそも書いてなかったろ。
余談がアロケーターはちっさいオブジェクト作るときやたらと重いし
学が無いなら黙っとけよ
0241デフォルトの名無しさん2012/03/19(月) 21:24:13.71
呼び出している呼び出していると主張しているが、

呼び出してませんよ。
0242デフォルトの名無しさん2012/03/19(月) 21:25:17.66
>>241
ソース。
0243デフォルトの名無しさん2012/03/19(月) 21:37:59.73
operator newの場合msvcr80.def, msvcr90.def, msvcr100.defの
いずれかに定義しているoperator new呼んでて、そんなかで毎回
HeapAlloc呼んでたわ
0244デフォルトの名無しさん2012/03/19(月) 21:50:53.53
allocatorは、gccやclのヘッダーをずっと追っかけてくと
こういうのがあって、結局newしてるだけ。
例えばgccはnew_allocator.hってのに定義してある。

pointer
allocate(size_type __n, const void* = 0)
{
 if (__builtin_expect(__n > this->max_size(), false))
   std::__throw_bad_alloc();

  return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp)));
 }

0245デフォルトの名無しさん2012/03/19(月) 21:52:12.74
>>189
>おまえらpermutationはsortの逆関数だと気付くまでに何分かかった?
30分たったがまだ分からん。
0246デフォルトの名無しさん2012/03/19(月) 21:54:08.38
>>239
>>241

さー苦しくなって参りました
そーすっ! そーすぅ! 早よ出せ そーす!
0247デフォルトの名無しさん2012/03/19(月) 21:57:08.54
>>241
実装の一つでも挙げてみろよw
0248デフォルトの名無しさん2012/03/19(月) 21:57:35.05
>>216
デザパタは抽象化なんかじゃない。
しかし(だから)取るに足らないものであるのはその通りだ。
まだ分からん奴が多いらしい。
0249デフォルトの名無しさん2012/03/19(月) 21:59:06.59
>>238
glibcじゃなくてglib?
0250デフォルトの名無しさん2012/03/19(月) 22:01:41.48
>>249
cがあろうが無かろうがそんな揚げ足どうでもいいだろ
mingw-w64-crtとソレが呼び出してるライブラリだ
0251デフォルトの名無しさん2012/03/19(月) 22:06:17.98
>>250
なんだWindowsべったりの話か。どうでもいいや
0252デフォルトの名無しさん2012/03/19(月) 22:07:58.36
>>251
だからWindows以外でいいから実装一つでも出してみろよ
linuxだと毎回確実にmmap呼び出してるぞ
俺のPC Linuxだし
■ このスレッドは過去ログ倉庫に格納されています