少なくとも半ダースのプログラミング言語を学ぶこと。そのうちの一つはクラス抽象をサポートするもの(例えば Java や C++)、一つは関数抽象をサポートするもの(例えば Lisp や ML)、一つは構文抽象をサポートするもの(例えば Lisp)、一つは宣言的記述をサポートするもの(例えば Prolog や C++ テンプレート)、一つは coroutine をサポートするもの(Icon や Scheme)、そして一つは並列処理をサポートするもの(例えば Sisal)であること。
自分がちゃんと使えるのはまあせいぜい C++ ruby OCaml 程度のものだと思う。OCaml が出きるといえるなら C とかも言えそうだけれど C は言語よりそれを取り巻くほげほげのほうが重要なので簡単にはできるとはいえないなあ。OCaml は実はできるというほどではないけれどまあいいか的な…
ということで C++ ruby OCaml でどれだけカバーできるか的な。しかしクラス抽象て色々あるからなあ…
クラス抽象 : C++, ruby, OCaml
関数抽象 : C++(!!!!), ruby, OCaml
構文抽象 : OCaml
宣言的記述 : C++
coroutine : „,
concurrency : „,
ライブラリとか入れると coroutine concurrency は簡単に満たせるけれどそれは何か違う。あとは OCaml の方言とか。
まあ go やれ Haskell やれってことなんだろう。
C++ に関数抽象はあります!!!!!
そもそも関数抽象ってなんですか?
ずれやがった…!クソッ…クソッ…!!
649 枯れた名無しの水平思考 [sage] 2009/11/16(月) 17:02:53 ID:KHgagsh70 Be:
_,. -‐''´ ̄`''ー- ,,
,. ''´ ,. -―- ,, `ヽ、
/´ ,. -''´,. -‐―‐- ,, ` 、, \
/ / /7゙ \,__ \\ \ ませー。
r―''゙ / / /l ヽ`ヽミ、ヽ \
. 〉 / / ,バ ', ', ヽ ',. `i (はぁ…AA作るのめんどくさ…)
r=彡 \ / / / ヽ i ',. l. / \
\_ \ | | ,,! __,メ \ `ト- V / _,,>
// \ ヽヾ7 \l\ ハ /‐''´ |
( | __,, `''i癶゙ ━━━ V━━ { /ヾ、ー′
人 ̄/ 八 _」=ミ /l/ /l/ iミ彡‐ァミ
/ / l人/_,/`\ ,!'゙ /´,,__ `''ォ
‐゙──┴‐┴タ /_ォ‐---'゙ヽ..,,__ σ _,. ィl r Yヘ!  ̄! ヽ──
L(r_イ_!__,!_」  ̄ ̄ ̄ ̄ `ミニ7こZ.オン′
` ̄ ´
- 416 枯れた名無しの水平思考 [sage] 2009/11/16(月) 00:07:47 ID:mXj+ypmM0 Be:
- RFにハマってたらラブプラスのデートすっぽかしてしまった
スゲーごめん…
http://twitter.com/camlspotter/status/5195342729
そう、末尾再帰です!とか言いながら dame_rev っぽいのを書いちゃう人は一定数いるはずで、それは末尾再帰の厳密な定義の認識というのがきちんと広まっていないせいで、何となく最後に読んでたら末尾再帰だ、的な…実際ボクが昔そうだった。
どうしてそうなった、を考えるのは割と楽しそうだけれど考えても今は状況が変わってそうだからもういいや。
http://d.hatena.ne.jp/camlspotter/20091027
誤解をされた気がする。
別にさようならはまあそれなりにどうでもいいと思う。どうでもいいと思う理由はこの辺参照 http://0xcc.net/pub/shibuyapm4/0003.html
ただ本当にどうでもいいと思うわけではない。後述。
実際あれ試しても何が悪いのかな?ほげほげーって言う子は、そもそも関数型どうこうの前にプログラミング言語と付き合うこと自体あまり幸せにはなれない可能性が高いとボクも思う。試せばわかるけれど明らかに何かがまずい遅さになるし…
しかし初学者向け(と思ってたけど今みたら初心者~中級者向けとある)と断った上でそういうことを書いちゃうのははっきりいって無闇に敷居をあげてしまうだけだし、それは誰相手に何を書きたいのかまるでわからんなーというのがあった。
で、ボクにとって本当に重要だったのはその部分で、基本的に camlspotter さんは誰対象に書いてるのか割とわからないことを初心者向けとかで書いてるので、これはためにならないなあ…という話なのだった。
内容的には第一回とか面白かったのだけれどあれどう考えても初心者向けとはいえないところがあって、まあそれは割と良い意味だったのでもっとやれと思ってたら、第二回のリストの話は内容薄めな上に前述のとおりの調子なので「ためにならねー」が「ためにならん…」になったのだった。プラスなためにならないがマイナスなためにならないになってしまった。
プラスポイントを上げるためには :: が OCaml では特殊なコンストラクタ扱いである点とかに触れるとプラスなためにならねー感が増してよかったと思う。どうでもいい。
で、ボクが二番目に言いたいのは、関数型言語や再帰とか何も特別なことではなくって、ただそれを取り巻く文化が偶然これまで特殊だったというだけで、いい加減そういうのを難しいとか悟りとか言っちゃう悪習は捨てようよっていうことなのだった。まあこれは二番目。これが後述の部分。
あと今回お互いにとって不幸だったのは例にある dame_rev が遅い理由は割と本当に難しかったというところかなあ。少なくともボクにとっては難しかった。遅いのはどうせ allocation だろう、と適当に思ってたら、実際には allocation よる GC の方がすごく遅くて、にょろろーんって感じだった。あと @ が N なことを見落としていた。
長さ 10000 のリストに適用。List.init 1000 (fun i -> i);;
% cumulative self self total
time seconds seconds calls ms/call ms/call name
10.77 0.29 0.29 3759 0.08 0.15 sweep_slice
9.85 0.56 0.27 3531 0.08 0.08 mark_slice
9.49 0.82 0.26 39995403 0.00 0.00 caml_fl_merge_block
9.31 1.08 0.26 40023678 0.00 0.00 allocate_block
7.66 1.29 0.21 40023678 0.00 0.00 caml_alloc_shr
7.48 1.50 0.20 4580 0.04 0.21 caml_oldify_mopup
6.75 1.68 0.18 40030151 0.00 0.00 caml_oldify_one
6.57 1.86 0.18 4841 0.04 0.04 caml_do_local_roots
6.57 2.04 0.18 camlExtList__loop_129
5.11 2.18 0.14 1355 0.10 0.31 caml_compact_heap
4.74 2.31 0.13 31913064 0.00 0.00 invert_pointer_at
4.01 2.42 0.11 4580 0.02 0.02 caml_oldify_local_roots
3.83 2.52 0.10 27227370 0.00 0.00 compact_allocate
3.65 2.62 0.10 40025412 0.00 0.00 caml_fl_allocate
2.55 2.69 0.07 50004999 0.00 0.00 caml_modify
sweep と mark はまあ GC でござろう。
fl は FreeList だったっけな。前読んだので覚えている。allocate_block も多分そこで読んでる的な alloc の人だろう。oldify はぐぐる先生がいうには GC 的な何からしい。
stdlib の List.rev は rev_append l [] 的なアレで、rev_append は :: を使うので N。
dame_rev は @ を使いまくるので alloc するは @ が N で @ を N 回呼ぶから N^2 だわで alloc しまくった結果が GC だよ!ってなって終わる。終わった。知るかよくそ。ボクは頭が痛い。
アルゴリズム本買ってErlangで書いてみるとか、いろいろ案があるんだけど、 この手の停滞期にある人間向けのドリル的なものは どんなのがふさわしいんだろう。コーディングコンテストの過去問とかが いいのかしらと思っている
コンテストの過去問を解くためのアルゴリズムの勉強とかは兎も角過去問はコーディングコンテストでの成果をあげることが目的でないかぎりはあんまりプラスにならない的な。
とはいえ普段書かない類のコードを書くということ自体はプラスな気も。
わかんないなー
まとめだけかくとまあ、はまちさんは見当違いな突っ込みをしているという話だった
作業ゲーとか努力が実ってハッピーってなるゲームなのに金を持ち込まれるとしぬしかないおれはもういきていけないってなる!っていう!
ねむいじゃんかよー