1 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 10:56:12.10 ID:U+dh/xlD.net] 前スレ 【JavaScript】スクリプト バトルロワイヤル51【php,py,pl,rb】(c)2ch.net peace.2ch.net/test/read.cgi/tech/1438094104/
29 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 13:32:15.53 ID:AIIBuHzT.net] >>23 広告クリックさせたりする事が優れたソフトウェアやサービスとは思えないからTwitterとかFacebookとかクソだね。 SVの人達もそういう考えだし。
30 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 15:57:18.77 ID:XJEeMP8F.net] >>29 やっぱり考え方が狭すぎだねw
31 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 19:15:14.88 ID:5ati5bYz.net] Rubyに関係なく、素朴な意見として、 なぜ静的型を動的言語で? 最初から静的言語を使えばいいだろ おわり
32 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 19:41:24.67 ID:6jGim2k9.net] Pythonの型付けもそうだけど、一番はドキュメントとして型表記を利用したいんだよ。 別に一部で型を明記したところでそうでない部分との関係で対して最適化や補助は効かないけど ドキュメントとしては価値がある。
33 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 20:25:48.63 ID:XJEeMP8F.net] 例えば、current_timeという名前の変数があったとして、 そこに何型が入っているかはわからんのだよね。 処理を読めが型は推測できるが、推測して判明するまで 時間がかかるのは、可読性が低いということを意味する。 名前からは何型かわからないが、処理は特定の型 専用のコードになっている。 変数自体は動的であっても、処理自体は動的ではない。 処理が動的じゃないのであれば、型も静的でいい。
34 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 20:58:32.42 ID:6jGim2k9.net] まあRuby的には超賢いIDEができて推論した型を表示してくれるというのが理想なんだろうけどな
35 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 21:18:59.86 ID:VUX4VOf2.net] 無理無理 だって、メソッドの引数の型は、呼び出し元で変数を渡してもらって始めて決定する 未だかつてどこからも呼び出されていないメソッドの引数の型は解析も無理
36 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 21:48:52.37 ID:gadIIZk0.net] それ以前にメソッドの有無すら実行してみるまで分からない メタプログラミングを捨てずに静的チェックやるなら、 チェック時に全てのクラスの中身を一度実行してみて、 その結果できたクラスオブジェクトを解析するしかないんじゃないかな 解析する時と実行する時でクラスのコンテキストが変わるというのは、 クラスを書く人にとってはバグの温床になりそうだが
37 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 03:41:12.46 ID:53GvI8rG.net] Perlみたいにコンパイルフェーズってのを作ってればよかったのにね。 だいたいのメタプログラミングってのは、実行時にやりたいんじゃなくて 実行前にやれば十分なんだよ。 例えばある標準クラスがあったとして、そこにメソッドを つけ加えたいなと思った時、実行時につけ加えるじゃなくて 実行前に付け加えれば十分でしょ?
38 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 04:56:12.47 ID:L9nzf7kh.net] >>35 別に完璧である必要はないじゃん ある程度上品な書き方(MethodMissingとか動的なメソッド追加とか使わない)において ある程度の情報が提供されればそれで十分だと思うけど
39 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 09:31:45.11 ID:+zms5d6G.net] Swiftが美しすぎる
40 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 09:38:22.19 ID:QcfJYyiX.net] Pythonには型推論して型を表示してくれる 超賢いIDE(jediとか)があるんだから、Rubyでもヨユーヨユー
41 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 10:24:06.79 ID:kiUfesSB.net] C++を使いこなす余裕があればRubyもSwiftもいらねーんだよ おまえらの仕事は余裕のない弱者を助けることだけだ
42 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 11:46:17.79 ID:7BEPgWVx.net] C++のOOPは偽物 RubyのOOPは本物 動的なメソッド追加は本物の証 この解釈が撤回されたときC++は復活する
43 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 11:47:38.50 ID:lzwRwYon.net] >>32 従来変数名でやってたことだね それだけのことで静的型を入れようとかいう話になるの?
44 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 11:51:33.35 ID:DSHcQooM.net] C++の静的型は本物 Rubyの静的型は偽者 って言われる日がくるかもね
45 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 11:52:06.13 ID:GPJRvwrY.net] OOPに本物とか偽物とか言ってる情弱がまだいるとは… Rails土方、恐るべしだな
46 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 12:06:39.18 ID:DSHcQooM.net] そうそう、本物のOOPならマルチメソッドぐらい無いとね 第一引数だけを特別扱いしてレシーバとして前に出して記述するRubyのOOは偽者だよね 真のOOPならこうかけなきゃ ( obj1, obj2 ).method もしくは method( obj1, obj2 ) ←これで多態出来なきゃね 動的型言語の癖にこんな事もできないRubyは偽者だよ
47 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 15:19:12.41 ID:83Q2zR6P.net] Railsを日本で広めようとしてる奴らは大体腹黒いやつなきがする。 あくまでも個人的な意見ね。
48 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 16:39:34.85 ID:NwCMAomS.net] >>46 例えばJavaScriptでも 自動振り分けのラッパー噛ませた関数を出力するヘルパー作っておいて 共通プロトタイプと組み合わせて使えば、 もしくは適切な方に適切に振り分けるプロキシを共通プロトタイプにしておけば スマートに実現できると思うけど、 Rubyでも出来るんじゃないの?
49 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 17:20:55.95 ID:jcvepef5.net] let o = { anch:[this.tag.dt, this.infobg, is_anch(e)] } で (o.anch[2])? o.anch:""; ができるんだな
50 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 17:21:47.20 ID:53GvI8rG.net] >>48 工夫すればなんでも出来るんだよ。 例えばC言語でオブジェクト指向ができるように。 だけどそういうのは本物ではない。
51 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 18:52:10.29 ID:7BEPgWVx.net] >>50 「C言語はオブジェクト指向言語」と宣言したら嘘で偽物だが 宣言しなければ嘘でも偽物でもない 宣言することがそんなに良いことなら自分ですればいいのに 他人に広めようとしてる時点で怪しいんだよ
52 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 19:02:59.91 ID:DSHcQooM.net] つまりRuby3.0が静的型を正式に取り入れた、と宣言したのに 実物がいい加減な代物で「嘘」「偽者」だったって未来へ向けてのフリですね
53 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 20:49:27.38 ID:ZTa/or21.net] Matzの戯れ言を本気にする人間っているんだな… Rubyのことをちょっとでも知ってるなら、ただの燃料だということはすぐ分かりそうなものなのだが…
54 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 21:06:58.48 ID:GPJRvwrY.net] >>46 少なくともケイのメッセージングOOP(が本物と言うつもりはさらさらない。為念)の考え方では (obj1, obj2).msg なら (obj1, obj2) というタプルに対するmsgというメッセージ送信になるのでは? そもそもこのパラダイムでは、msgというメッセージ送信によってセレクタmsgと同名のメソッドmsgが コールされるとは限らないという仕組みにより遅延結合をユーザーに意識させるところがミソなので、 metatoys.org/oxymoron/oxymoron.html マルチメソッドを持つか(メソッドのオーバーロードが可能か)否かはいうに及ばず、 メソッドが静的型を持つかといった話とは別のような。 ケイ曰わく、 「型には反対しないが、複雑さに悩まされない型システムを見たことはない。動的型付けはまだマシだ。」 d.hatena.ne.jp/katzchang/20080807/p2
55 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 21:58:43.99 ID:DSHcQooM.net] 別に俺はマルチメソッドに静的型が必要だとは主張していないが
56 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 22:01:06.33 ID:lzwRwYon.net] Matzが静的型を導入したかったのか?
57 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 22:20:18.93 ID:DSHcQooM.net] 多分本音は導入したくなさそう 静的型に対してかなりモニョってる印象 しかーし、最近のスクリプト言語はこぞって静的型を取り入れているし 流行に敏感ってことにしたいRubyとしては取り入れざるを得ないんだわ 一体今更どういう風に取り入れるかは見ものではある 静的型を導入すると当然昔からの風習にならって 「なるべく型は書くべき」、って派閥が出来るだろう しかしそれはRubyの世界観にアンマッチになるっつーかさ しかも、もし、ジェネリックすらないような中途半端な静的型しか導入できなかったとしたら まともに使い物にならないものを押し付けられる 使い物にならなければ使わなければいいわけだが、 しかし型は書いたほうが良いという古くからの風習もあり、 一体どうしたものかと途方に迷う事になる
58 名前:デフォルトの名無しさん [2015/10/13(火) 02:05:16.01 ID:3QE/NkoP.net] >>42 C++のoopはバートランド・メイヤーの流れをくむものじゃないかな。時期的にC++のが早かったとしても。 メイヤーのeiffelはあれはあれで良いものだぞ
59 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 02:17:53.92 ID:O9bZKJjD.net] >>57 途方に迷うのではなく暮れるのさ
60 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 06:34:58.02 ID:3LDxUoaZ.net] ブレてるねー 1年前にmatzが自分で動的言語信奉者だと言ってたのを聞いたことあるけど これじゃ更に人気を落としてくんだろうね
61 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 06:48:50.37 ID:cMOwnvUD.net] >>54 そうか、マルチメソッドはそのタプルクラスのメソッドと考えることができるのか だったら配列クラスのメソッドミッシングメソッドを賢くしてやれば実現できそうだな
62 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 09:20:37.48 ID:Rl12UR24.net] >>61 そうですね。あとはC#の拡張メソッド(実体は静的メソッド)みたいに構文糖をまぶせば 通常のメソッド呼び出し(メッセージングOOPのパラダイムならレシーバーへのメッセージ送信)の 書き方にできるはずです。 ただ、ぱっと見レシーバーに見えるオブジェクトが、実質はタプル・配列等の要素となってしまっているため、 その(あるいはそれらの)内部情報に対する当該メソッド記述中でのアクセスについては制限が加わります。 C#の拡張メソッドと同じですね。 CLOS等の総称関数のように割り切るか、従来のメソッドと同レベルの使い勝手や メソッドのありかた(特定のクラスに内包される)にこだわるならさらなる細工が必要になるでしょう。 (Dylanがこの問題をどう解決しているかは調べてません。ごめんなさい) あと参考まで、メッセージングOOPのパラダイムでは古典的にはダブルディスパッチというベストプラクティスパターンが すでにあるので、構文までいじくり回してマルチメソッドやメソッドオーバーロードを実現する価値が本当にあるか よく吟味する必要はあるのかとも思います。
63 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 09:44:43.93 ID:IPzu3dLL.net] 何を言ってるんだ? タプルに対する拡張メソッドにしたところでマルチメソッドでもなんでもないだろ >>46
64 名前:63 mailto:sage [2015/10/13(火) 09:45:46.79 ID:IPzu3dLL.net] すまん途中で書き込んだ >>46 が言ってるのは複数の引数の型によるディスパッチであり >>54
65 名前:63 mailto:sage [2015/10/13(火) 09:47:48.53 ID:IPzu3dLL.net] 何度も申し訳ない >>54 は議論をすり替えているだけ
66 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 11:00:06.67 ID:E12GE1WX.net] まあ落ち着こうよ。 >>46 については「本物のOOP」が指すのがケイの動的・遅延結合をモットーとするメッセージングのOOPなのか、 ストラウストラップ・メイヤー・リスコフらの抽象データ型をクラスで実現するOOPなのかをはっきりさせないと。 もっとも、前者なら>>54 にあるとおりメッセージ(に含まれるセレクタ)と同名メソッドのコールを保証する義理はないし、 後者ならレシーバとかいう表現がでてくる時点で何を言っているのか意味不明になるから、どっちにしてもあれだけど。 Rubyを擁護する気はないけど、Ruby開発陣の技術力不足をすべて動的・遅延結合におっかぶせる論調はよくない。
67 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 11:19:38.71 ID:aIVsWkps.net] よく分からんけど それが出来ることによって何がどう役立つの?
68 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 11:23:22.41 ID:BR4NEKph.net] 極稀にあるパターンをわかりやすく記述できる。
69 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 11:37:53.98 ID:eox7qbM1.net] マルチメソッドが必要な理由がはっきりするまでは放っておけばいい 第一引数を特別扱いしたら偽者、というのはマルチメソッドとは関係ない 第一引数に頼らないクロージャを使って書き直すだけでOK
70 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 11:58:16.93 ID:LdSr9S5L.net] マルチメソッド自体の必要性は静的言語のオーバーロードや動的言語の醜悪な型チェックの大さを見れば明白
71 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 12:10:35.89 ID:WPI+iK8W.net] 単純な対象性に対する疑問でもある 引数は0個から無限大まで幾つあってもよいはず その中で第一引数だけ特別扱いして しかも前に出して記述するのは対象性の観点から見てどうなのか 引数は全て等しい扱いを受けるべきでは ここをクリアしないことにはOOPは学問になれない 単なる経験則で終わってしまう
72 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 12:34:02.06 ID:BR4NEKph.net] >>71 可読性というものはそういうことなんだよ。 コンピュータから見れば、どちらでも同じだが、 人間が見てどう感じるかが、重要。
73 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 12:35:50.72 ID:aIVsWkps.net] >>68 確かに定義においては認めるけど、使用の際には、そんなごく稀な記法を特別に使わせるのは分かりやすくないと思う
74 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 14:24:13.32 ID:WPI+iK8W.net] >>72 人間からみても何とも言えないような場合はどうするんだ?
75 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 14:31:26.07 ID:i1awIWf/.net] >>74 何と何の話?
76 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 14:39:04.87 ID:WPI+iK8W.net] 何でもいいけど、例えば基本的なところで 1+2なんてどう? Rubyは1に+2ってメッセージが飛んでくるってノリらしけど 数学的ではないしように思うし 人間的にもplus(1, 2)ってイメージなんだが
77 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 15:32:13.81 ID:WPI+iK8W.net] だいたいなんだけど、Rubyの1+2で 「1」に「2」を足しこむ機能が備わっているって解釈はどうなんだろう 「1」に「整数の1」以上の意味は要らなくない? 単なる整数の「1」や「2」をどう使うかは、演算子の「+」が決める事では? 「1」が「+2」を処理するというよりは、「+」が「1」「2」を処理するのでは? そっちのが数学的だと思うんだが
78 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 15:41:38.20 ID:i1awIWf/.net] >>76 何を考えているのかさっぱりわからんが、 人生を思い返してみればわかる。1+2という数式は 小学校でならって体に染み付いている。 これが人間が読んだ時の可読性ということ。 可読性というのは、過去の経験から決まるものなんだよ。 例えば、1を○、2を△、+を□に置き換えて、 ○□△と書いたとしても同じ意味になるんだけど、 読みにくいでしょ? そんな風に習ってないから。
79 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 15:42:38.37 ID:WPI+iK8W.net] もしくはマルチメソッド風に、 「1」と「2」が両方力を合わせて「+」を処理するってノリならまだ分かるんだけど 「1」が「+2」を処理するってのは腑に落ちないものが有るね 1+2で、「1」と「2」に格差がありすぎる それに「+」の演算の定義は「1」が決めずに「+」自身が決めれば良いような
80 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 15:44:45.88 ID:WPI+iK8W.net] >>78 言葉が足りなかったね 表記は1+2で問題ないが、その解釈の問題 Rubyは1が+2というメッセージを処理するって解釈する 1に演算がぶら下がっている状態 単に1と2を足すという、ただそれだけの事に それ以上の拡大解釈が必要なのかという事
81 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 15:49:04.01 ID:WPI+iK8W.net] >人生を思い返してみればわかる。1+2という数式は >小学校でならって体に染み付いている。 全くその通りなんだよね、体に染み付いている 1+2は単に1と2を「+」という処理をするって考える 1と2は単なる数で、+は両者間の演算を定義している ところがRubyは1が+2というメッセージを処理する、と考えることになっている これは小学校からずっと習ってきた事と違うし不自然だね 小学校で1+2を1が+2を処理する、とは習わないだろう
82 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 15:59:08.67 ID:WPI+iK8W.net] とにかく1+2をシングルディスパッチで、1が+2というメッセージを処理する、と考えると、 「1」と「2」の格差が物凄いことになってしまう 「1」は足し算の処理をする主体そのもので、足し算の意味すら定義している 「2」は単なるデータ ここは一つ、マルチメソッド風に、「1」「2」が共同で「+」を処理する、と考えるか もしくは単に、「+」が「1」「2」を処理する、と考えたほうが、素直なのでは
83 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 16:38:33.72 ID:lCXr92CT.net] メッセージングのOOPというパラダイム(考え方)にいったん乗っかった以上、 obj.selector(args) を obj への selector(args) というメッセージの送信だという 解釈は曲げてはダメでしょう。たとえ小学校でそのように習わなかったとしても。
84 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 16:49:10.34 ID:lCXr92CT.net] 3+4 という演算式を 3 に +4 というメッセージを送ると解釈するのが違和感あるというのはむしろ逆で、 アラン・ケイは、オブジェクトにメッセージを送るという操作ですべてを表現する世界線で 3+4 という演算も説明できるようにするには、3 に +4 というメッセージを送ると解釈すればよい というアイデアに思い至ったわけです。 gagne.homedns.org/~tgagne/contrib/EarlyHistoryST.html By this time most of Smalltalk's schemes had been sorted out into …あたりから
85 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 17:08:12.66 ID:QDO/4Imo.net] 足す物と足される物の区別があるんだから格差があって当然じゃない? たまたま3+4という表記に限ってはたまたま交換定義も成り立つしそう見えるかもしれないけど
86 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 17:32:14.96 ID:eox7qbM1.net] 格差が悪いならpublicとprivateの格差を無くせ 情報が漏れるgetterと 情報が丸見えのHashTableを使え multimethodTable[obj1.getType()][obj2.getType()](obj1, obj2)
87 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 17:37:36.35 ID:tExxK6rC.net] 格さんが駄目なら助さんで…
88 名前:デフォルトの名無しさん mailto:sage [2015/10/14(水) 12:51:47.73 ID:Zx/eGv5t.net] >>62 Dylan のマルチメソッドを調べてみましたが CLOS 同様に単なる総称関数で特別な工夫はないようです。 そこで、>>46 に質問なのですが、本物のOOPにはマルチメソッドが必要だよ派、 あるいは、第一引数だけ特別扱いはNG派としては、マルチメソッドを記述する際に どの引数(オブジェクト)の内部情報にアクセスできるようにしたらよいと考えていますか? あるいは総称関数のように内部情報のアクセスに関しても特別扱いはしないという立場でしょうか?
89 名前:デフォルトの名無しさん mailto:sage [2015/10/14(水) 13:07:10.70 ID:oRHV6ndY.net] >>88 つまり、そういうこと つきつめればOOは面倒な事が沢山起こる 統一理論のようなものは無い 全ては経験則
90 名前:デフォルトの名無しさん mailto:sage [2015/10/14(水) 17:15:12.58 ID:D87FbFvB.net] >>89 C言語が嫌いじゃないなら、C言語を統一理論にすれば全て丸く収まる C言語が面倒ならどこが面倒か理論的に解明してからOOやらないと砂上の楼閣になる
91 名前:デフォルトの名無しさん mailto:sage [2015/10/14(水) 20:06:32.48 ID:EqVBJrGR.net] >>90 ?
92 名前:デフォルトの名無しさん mailto:sage [2015/10/14(水) 21:17:42.32 ID:dBNBVrr+.net] みんなそんなに暇じゃないよ
93 名前:デフォルトの名無しさん mailto:sage [2015/10/14(水) 21:25:49.86 ID:oRHV6ndY.net] まぁ真のOOPにマルチメソッドが必要かどうかはおいておいて 第一引数だけ特別扱いするのは対称性の観点から気持ち悪いのはおいておいて ともかく当面は RubyにC#並みの静的型のシステムが組み込まれるかどうかだな 当たり前だけど、中途半端な静的型は、有るだけ邪魔で使い物にならない ジェネリックも何もなくてC言語程度の静的型の機能しか導入されなかったら 今の時代に使い物にならないし、 当時そういう柔軟性の無いC言語の静的型システムが不便に感じたから、こその Rubyだったわけだから、今更C言語程度の静的型ではダメなのは当たり前、何にもならない やはり今更静的型を導入するなら動的型言語に負けず劣らずな柔軟性をもった? C#レベルのを導入しない事には、使い物にならないだろう それに、中途半端な静的型を実装したら、他の最新の静的型言語と比べられて、 静的型に関して優劣を付けられ、Rubyが不利な立場になってしまうかもしれない もし、動的型言語で柔軟性が売りのはずのRubyが、静的型の機能や柔軟性で あの堅物のC++にも劣っていたとしたら、良い笑いものになってしまう なので、最低限ジェネリックと型推論と、できれば共変性と反変性ぐらいは必要かと
94 名前:デフォルトの名無しさん mailto:sage [2015/10/14(水) 21:27:31.95 ID:RZLA+pyr.net] 第一引数だけ特別扱いするのは対称性の観点から気持ち悪くても 英語の文法の観点から見れば、極自然なことです。
95 名前:デフォルトの名無しさん mailto:sage [2015/10/14(水) 21:29:58.48 ID:RRpWZ3GK.net] 日本語でプログラミングしたい派からしても、第二引数以降を前に持ってきて欲しい
96 名前:デフォルトの名無しさん mailto:sage [2015/10/14(水) 21:35:31.38 ID:fHrqAp5M.net] プログラミングにわざわざ日本語を持ち込むバカ居るんだな。 プログラムは以下に車輪の再発明を避けて生産性を上げるか、人に再利用しやすいコードを書くか、バグを減らせるか。 こういったことが核になる事なのに、その核をダメにする要素をわざわざ自分の怠慢と劣等遺伝子で持ち込む理由がわからない。 そんな事する位ならプログラミングしない方が世のためになるんじゃ無いかな。
97 名前:デフォルトの名無しさん mailto:sage [2015/10/14(水) 21:40:23.30 ID:aRVLWehY.net] プログラミングはプログラミングセンスの欠片もない連中を統率して なるべくマシなクソを作り上げるゲームだよ
98 名前:デフォルトの名無しさん mailto:sage [2015/10/14(水) 21:42:31.55 ID:oRHV6ndY.net] >>94 英語の文法は必ずオブジェクトを一つとると決まっているわけではないと思いますが、どうでしょうかね 第3文型は SVO では、確かにオブジェクトは一つですのでシングルディスパッチですね プログラミングでは、Cもオブジェクトと考えても良さそうなので、 第2文型の SVC もシングルディスパッチでしょうかね 第1文型の SV はただの関数、静的メソッドですかね しかし、 第4文型の SVOO はオブジェクトを二つとりますし、これはマルチメソッドが良いんでしょうかね 第5文型の SVOC はOを主体としたシングルディスパッチと捉えるか Cもオブジェクトと考えてマルチメソッドと捕らえるかは、人によるんですかね どちらにしても英語の語順は、動詞→目的語、の並びなので func( arg );のスタイルは英語の語感に合ってるんですよね obj.method()は寧ろ日本語的な並びですね、〜を〜する っていう
99 名前:デフォルトの名無しさん mailto:sage [2015/10/14(水) 22:33:52.89 ID:aRVLWehY.net] 逆だろ 主語と動詞を明確に意識するのはいかにも英語的な感覚だ 引数で述語を修飾しているだけのfunc(arg)の方がむしろ日本語的
100 名前:デフォルトの名無しさん mailto:sage [2015/10/14(水) 22:47:46.19 ID:JkkT4x6h.net] >>98 アラン・ケイの「『ソフトウェア工学』は矛盾語法か?」metatoys.org/oxymoron/oxymoron.html にある、「新しいアイデアを学ぶとはどういう事か?」あたりと食い違ったことを改めてここで主張する理由は? いちおう彼は、OOPの「obj msg」という記法を発案し、英語を母国語とする人なのだけれども…
101 名前:デフォルトの名無しさん mailto:sage [2015/10/14(水) 22:48:09.97 ID:D87FbFvB.net] 自己責任論の時代に他人を統率するゲームって
102 名前:デフォルトの名無しさん mailto:sage [2015/10/14(水) 23:12:04.10 ID:oRHV6ndY.net] >>99 それはないわ func(arg)はどう見ても命令文じゃないですか 命令を並べて書いておけばバッチ処理してくれるっていう 手続き型の基本じゃ無いですかね この場合命令する相手はコンピュータなので主語は分かりきっているから 書く必要ないんです ちなみにobj.method()のobjは主語じゃなくて、どちらかと言うと目的語じゃないですかね SVOのOってObjectのOでしょ、一応 オブジェクト指向って名前だし、主語指向って言いませんし
103 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 00:12:43.73 ID:MzOq+ouz.net] >>98 ひゃーこれ分かりやすい。 なるほどオブジェクト指向の文法ってそうだわと膝を打ったので、思わず外野からコメント
104 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 06:45:48.10 ID:T2FVuNbU.net] 上から目線のプログラマが多いね ユーザのために便利な道具を作る立場なんだけど、勘違いしてるダメな奴
105 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 07:20:39.98 ID:7x3qta5X.net] ×ユーザのために便利な道具を作る ○ユーザーの業務を人質に取って搾取する 便利な道具を作りたかったら特定のユーザーからは距離をとることだ
106 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 07:22:51.89 ID:lgLg0FTk.net] >>103 こういうのが毛の壁の関数型本とかを「わかりやすい!」とか絶賛するんだろうな…
107 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 07:41:39.67 ID:7x3qta5X.net] >>100 でもはっきり書かれているように、 一般的にオブジェクト指向のレシーバはsubjectだね 奴等の脳味噌には主語と動詞が絶対的な存在として君臨している 主語のないジャパニーズの思考回路で理解しようとしてはいけない
108 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 07:54:59.40 ID:DZU/K3fq.net] >>102 俺もオブジェクトは主語に喩える方がスッキリすると思う どうせ比喩の世界だから「オブジェクト」指向の字面に拘る必要はない そう言えば、むかしエージェント指向なんてのもあったね
109 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 08:12:38.93 ID:UBpGI0vG.net] ネイティブの奴等は常に主語と動詞がセットでないと気が狂うらしいし受動的な表現を嫌うからな レシーバは普通に主語だよ
110 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 09:14:21.36 ID:gCkyElll.net] Smalltalkのセレクタ見てたら主語はともかく動詞ってのはどうかと思うけどな 動詞のようなものもあるけど他の多く(?)は何と言うんだろなこういうの 例: www.gnu.org/software/smalltalk/manual-base/gst-base.html#Array add: value ←動詞 atAll: keyCollection ←atって何だっけ? copyFrom: start to: stop ↑こういう複数のやつだとどう考える?fromとtoは無視して動詞と言い張る? value ↑こういうのはメソッドじゃないから動詞じゃなくていいとする? それとも都合よく(get value)みたいなのの省略だと考える?
111 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 09:50:58.72 ID:BaxKs2Tu.net] >>110 >>98 を全否定しているわけではないのだから、まあ、落ち着こうよ。 Object は Object でも、OOPのOは文法要素の目的語であるところのOとは別だというだけ。 とりあえずまず、発案者のアラン・ケイの言う>>100 の参照先をベースに話を進めないか? もしどうしても Smalltalkをベースにしたいなら、やはり彼の書いた The Early History of Smalltalk gagne.homedns.org/~tgagne/contrib/EarlyHistoryST.html の 「By this time most of Smalltalk’s schemes had been sorted out …」のあたりからがいいだろう。 Smalltalk はちょっとかじったことがあるから、彼の文章でわかりにくいところがあったら訊いてください。
112 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 10:10:59.25 ID:YhiK7HuV.net] Smalltalk系の「オブジェクト」とは「ソースではない」という意味だ ソースをemacsで書いてコンパイルする言語とは違う emacsがなくても動的にメソッドを追加したりできる
113 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 10:17:49.04 ID:BaxKs2Tu.net] >>98 派がリンク先にアクセスしたら死ぬ病気の人だといけないので、>>100 の参照先をコピペしておくよ。 ▼新しいアイデアを学ぶとはどういう事か? このような柔軟な機能はどれだけ複雑である必要があるだろうか? 文法上は決して複雑で無くてもよい。 なじみ深い英語の語順である主語、動詞、目的語(よく前置詞や、たまに暗黙の主語を伴う)があれば 全く十分だ。オブジェクト指向の言い方で言うと、主語はメッセージのレシーバであり、文の残りはメッセージだ (ここでは「動詞」を強調※して書く)。これで次のような読みやすい形式になる。(※強調は _ でくくった) 3 ‘this is some text’ pen _up_ 3 _+_ 4 3 _*_ ( 4 _+_ 5 ) car _forward by_ 5 {1 2 3 4 5 6 7} _collect_ [ n | n _odd_ ] _Repeat_ (1 _to_ 100 _by_ 2) _do_ [ ******* ] そして大切なのは、この単純な決まりに従って必要なだけ新しく読みやすい記法を作る事が出来る事だ。 これは、ユーザが文法と意味の関係を一つだけ念頭に置いておけば良い事を意味する。 レシーバ メッセージ -- レシーバが意味を把握している事を意味する。 という事で、オブジェクトはただネットワーク上のピア・ピア・サーバのように考えられ、使われると考える。 (これは偶然ではなく、六十年代後期におけるARPAnet から Internet にかけての開発にさかのぼる アイデアを起源とする)。 従って、動的なオブジェクト指向プログラミングを行うという事は通信しあうオブジェクトでシステムを設計し 構築する事になる。もしもわたしたちのオブジェクトシステムの内部がそれ自体オブジェクトから出来ている とすれば、必要な構造上の知識は全て知っている事になる。
114 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 10:35:30.54 ID:a474rjS3.net] 確かに、本当に通信し合うオブジェクトを扱うErlangは大規模なサービスで使われてるね 昔はマイナーだったけど、やっぱり本物は残るんだね 一方ニセモノのオブジェクト指向のSmalltalkは死んだね
115 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 10:56:29.02 ID:YhiK7HuV.net] Smalltalkはコネがない 大抵の言語はC言語のコネがある ErlangはPrologやSQLのコネがある?
116 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 11:19:27.13 ID:BaxKs2Tu.net] >>115 現在よく使われ名前が知られた言語等との“コネ”ということなら、Smalltalkにはないはずですよ。 なにせ作られたのが、ここでコネ元として挙げられているC言語と同時期の1972年頃ですから。 強いて挙げればSIMULA67、LISP、Logoですが、これらが今よく知られ使われているかというと 難しいところです。
117 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 11:31:04.82 ID:BaxKs2Tu.net] >>114 ちょっとググればわかりますが、Smalltalkはまだ死んではいないようですよ。 Squeakやそこから派生したPharoなどのコミュニティは比較的活発ですし、 ゼロックス謹製のSmalltalk-80の直系であるCincom社のSmalltalkでVisualWorksという 商用の処理系もあるようです。ファンお手製のGUIを持たない変わり種のGNU Smalltalkや altJSとしてのAmber Smalltalkもあるようです。 もっともアラン・ケイはもうすでにSmalltalkへの興味を失っていて、Rubyの生みの親のMatzにも そんなことを漏らしていたようで、Smalltalk(er)を目の上のこぶみたいに煙たがるMatzが大喜びする 一幕もあったようです。www.rubyist.net/~matz/20060608.html ちなみにアラン・ケイはGUI付きのOSを2万行程度で記述できる次の言語の実験に取りかかっているようです。 「Smalltalk 勉強会@名古屋 STEPS プロジェクトご紹介」 d.hatena.ne.jp/propella/20091219/p1 「STEPS プロジェクトご紹介その2」 d.hatena.ne.jp/propella/20111022/p1
118 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 11:50:07.59 ID:N9hEQVX6.net] > GUI付きのOSを2万行程度で記述できる次の言語の OSを作る人は極僅かなんだから、別の研究すればいいのに。 にしても、OSは行数2万行です。ただし言語にドライバが含まれています。 とかそういう落ちだったりしてw
119 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 12:03:22.06 ID:BaxKs2Tu.net] >>118 > OSを作る人は極僅かなんだから、別の研究すればいいのに。 OSを含め、自分たちが利用するソフトウエアの仕組みを知り、自由に改変・拡張でき、 できれば最初から作り上げることすらできる世界が彼の理想であり、主張するコンピューターリタラシーな わけですから、そこはDynabook、その暫定OSとしてのSmalltalkのときからぶれていませんね。 > ただし言語にドライバが含まれています。とかそういう落ちだったりしてw リンク先を読んでもらえばわかりますが(他人のリンク先読むと死ぬ病気の人?^^;)、 ミソはPEGベースのパーザーでDSLを手軽に作れるようにして、階層的にコードの抽象度を上げるところらしいです。
120 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 12:31:43.88 ID:BaxKs2Tu.net] >>112 > Smalltalk系の「オブジェクト」とは「ソースではない」という意味 気になったのでちょっと調べてみましたが、Smalltalk のオブジェクトは、SIMULA67の言語機能としての オブジェクトから来ていて、そのSIMULA67のオブジェクトは、ホーアのレコード・オブジェクト archive.computerhistory.org/resources/text/knuth_don_x4100/PDF_index/k-9-pdf/k-9-u2293-Record-Handling-Hoare.pdf [PDF注意] 1. Basic Concepts 1.1 Objects and Records. A fundamental feature of our understanding of the world is that we organise our experience as a number of distinct objects (tables and chairs, blank loans and algebraic expressions, plynominals and persons, transistors and triangles, etc); and our thought, language, and actions abased on the dsignation, description, and manipulation of these objects, either indivisually or in relationship with other objects. のオブジェクトから来ているので、C言語とかのオブジェクトの意味合いよりは、文字通り「物」としての オブジェクトに近いみたいですね。
121 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 12:46:45.96 ID:N9hEQVX6.net] >>119 > ミソはPEGベースのパーザーでDSLを手軽に作れるようにして、階層的にコードの抽象度を上げるところらしいです。 いえ、そんなのはどうでもよくて、ドライバを誰が作るのかって話ですね。 ドライバの行数はOSに含まれています。 あと言語が多くのライブラリを提供するのであれば、 そりゃOSの行数は減るでしょう。
122 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 12:53:29.51 ID:YhiK7HuV.net] >>120 we organise our experience as objects and language オブジェクト != 言語 という前提があるよね
123 名前:110 mailto:sage [2015/10/15(木) 13:23:04.01 ID:E/Ij5YUU.net] >>111 > >>98 を全否定しているわけではないのだから、まあ、落ち着こうよ。 > Object は Object でも、OOPのOは文法要素の目的語であるところのOとは別だというだけ。 なんか人違いしてない?>>98 を否定もなにも 俺はむしろ目的語のOのほうがなじみが無いんだが かつてぼんやりobj.methodを主語+動詞みたいに考えてた けど今はobj.methodはやっぱ単にobj+methodだなって思うだけ あえて言うならobjが主語ってのはまだわかるが…ってのが>>110
124 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 17:17:29.28 ID:BaxKs2Tu.net] >>123 それは失礼いたしました。 唐突に Smalltalk のコードをひっぱり出してきて疑問符を連発されていたので てっきり >>98 派がファビョってきたのかと勘違いしました。ごめんなさい。
125 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 17:25:35.28 ID:BaxKs2Tu.net] ちなみに念のため、アラン・ケイはメッセージ式 rcvr msg の msg が動詞でなければならないとは ひとことも言っていないと思いますよ(>>113 )。SVO の S を rvcr、VO 以降を msg に当てはめると すっきり書けて読みやすい、というような趣旨のことはいっていますが… ですから、メッセージが atAll: keyCollection でも copyFrom: start to: stop でも value でも、必ずしも動詞のみでなくても、さらに動詞が含まれなくてもかまわないと思います。
126 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 17:35:42.93 ID:BaxKs2Tu.net] >>125 メソッド名をどのようにしたらよいかという観点からは、ケント・ベックがいろいろと試行錯誤しているので 興味のある向きは彼の著作を読んでみると面白いかと思います。 「ケント・ベックのSmalltalkベストプラクティス・パターン―シンプル・デザインへの宝石集」 www.amazon.co.jp/dp/4894717549 同書原書のドラフト 「Smalltalk Best Practice Patterns Volume 1: Coding」 stephane.ducasse.free.fr/FreeBooks/BestSmalltalkPractices/Draft-Smalltalk%20Best%20Practice%20Patterns%20Kent%20Beck.pdf [PDF注意] 同書をJava向けに書き直したもの 「実装パターン」 www.amazon.co.jp/dp/4894712873
127 名前:110 mailto:sage [2015/10/15(木) 18:47:55.64 ID:USDIK8mq.net] >>125 > ですから、メッセージが atAll: keyCollection でも copyFrom: start to: stop でも > value でも、必ずしも動詞のみでなくても、さらに動詞が含まれなくてもかまわないと思います。 うん。メッセージ、という表現だけで十分だと思う 英文法をモデルにするより巧妙な抽象化だと思う そこにどんな品詞が来たって平気だし 実際すでに来ちゃってるんじゃないのかな obj.methodのmethod部分にすらも
128 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 19:45:08.84 ID:whFEoHyO.net] アランケイの妄言なんかどうでも良いだろう 普通メソッド名は動詞にすることが多いんだから、動詞的な何かでよいだろう 実際に実行するわけだからイメージと合う ところで実際に実行するのはコンピュータなのでオブジェクトを主語に見立てる必要性はまるで無い 「オブジェクトが実行する」と考え直すことで、何か問題が解決されるわけでもないし、 静的メソッドやC/C++に見られるような何にも属さない普通の関数は、 オブジェクトが無いのに、一体誰が実行していると考えればよいのか? という新たな問題を生み出すだけなので 単純に、実行するのはコンピュータでオブジェクトが実行する内容を知っている とでも考えておけばよいだろう 実際のコンピュータの動作に則した考え方なので、破綻が無い
129 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 19:57:15.22 ID:whFEoHyO.net] オブジェクト指向はオブジェクトが自身の振る舞いを知っている、という考え方をする 実際に振る舞いを実行するのはコンピュータとかCPUとかスレッドとかの外的なもので問題なく 単にオブジェクトは自分の振る舞いを知っていさえすればよい