- 1 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 23:40:48.89 ID:FvOeAcfn.net]
- 前スレ
【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 echo.2ch.net/test/read.cgi/tech/1458955459/
- 544 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 00:16:09.41 ID:W0pN1+cl.net]
- 要するに、後付で色々したい場合はダックタイピングの方が楽なんだよ。
ただし、全てを見通せるのなら最初からインタフェースにしておいた方が美しいのも事実。 現実的にはJavaScriptはUI用で酷く書き換えを強いられる為、 ダックタイピングの方が向いている。(と俺は感じている) 逆に、仕様がかっちり決まっている場合は型ありでも特に苦労しないし、 数値計算等のバグ出ししにくい状況では型があった方が安心ではある。 (期待値が作りにくい、見た目でバグと分からない) ただ、UIならバグは見て分かるし、ダックタイピングでも問題ない。 動的言語はパターンを当てないとバグ検出出来ないけど、 UIなら「変更が依頼された」=「パターン持ってる」ってことだし。
- 545 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 01:28:08.77 ID:8mjeDRwA.net]
- 真面目にダックタイピングをやろうとする行為は、型やインタフェースを定義するのと違いがない
だからrubyでダックタイピングを考えてプログラミングしてる人なんているわけない
- 546 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 03:12:15.72 ID:LB/3uUQe.net]
- >>544
あの、精神論でごまかさないでください? 何一つ、ダックタイピングのほうが良いという理由を 言っていませんよ
- 547 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 07:17:22.30 ID:W0pN1+cl.net]
- >>546
良い悪いを議論する事じゃないよ。 結局は、どう思うか、どう感じるか、でしかないから。 型には型の得失があるし、ダックタイピングにしてもそう。 選べる状況なら好きな方選べばいいし、無理ならグダグダ言っても意味無いだろ。 利点を感じないのなら、これまでそういう状況に遭遇したことがないか、 或いはそもそもそっち派ではないか。 いずれにしても使わないってことで問題はない。 利点説明おねだり君なんてウザイだけだから止めろ。 yohshiy.blog.fc2.com/blog-entry-244.html 未確認飛行の人も同じようなことを言っていたと思ったけど見つからなかったから上記で。 結論出したいのならこの辺だと思うよ。 >>545 ガチでダックタイピングの利点を享受しようとすると、 型に留まらず世界が統一されていないといけないので、実は型よりも難しい。 そしてJavaScriptもそれに対応出来ていない。理由は標準化している奴らが馬鹿だから。 sizeとlengthが混在してるでしょ。 あれ、どっちでもいいけどどっちかに統一されてないといけない。 だから真面目にダックタイピングをやっている奴なんていない、というのは俺も思う。
- 548 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 09:32:26.96 ID:LB/3uUQe.net]
- > そしてインタフェースをいちいち付けてまわるのは非常に面倒臭いこと
めんどくさい? ダックタイピングではインターフェースがないから 代わりにコメントで同じ情報を書かないといけないじゃん。 インターフェースの情報(コメント含む)を書かないで それが仕様かどうか分かってもらえると思ってんの?
- 549 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 09:43:33.93 ID:oCHN+Sd+.net]
- >>540
同じインターフェースを実装してても、それは引数と戻り値の型が一致するだけで 動作振る舞いがコンパチブルかどうかは保証してくれないけどな JavaやC#みたいなショボい言語では
- 550 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 21:03:29.03 ID:LB/3uUQe.net]
- >>549
interfaceは"インターフェースを"保証してくれるもので インターフェース以外は別の話なのは当たり前だと思うが? 「お前型を保証してくれるんだろ? バグがないことまで保証してくれよ」 っていうのと同じぐらい無茶なこと 普通保証の対象しか、保証しませんってw
- 551 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 22:17:56.90 ID:BH39VCMj.net]
- >>549
ショボくない言語ではどういう感じになるのでしょうか? 純粋な興味として知りたいです
- 552 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 23:27:50.92 ID:LB/3uUQe.net]
- しょぼくない言語なら、
動作振る舞いがコンパチブルかどうかを保証してくれるんだろう?
- 553 名前:デフォルトの名無しさん [2017/04/18(火) 00:29:01.98 ID:n/IUHgwq.net]
- >>544
> 要するに、後付で色々したい場合はダックタイピングの方が楽なんだよ。 メソッドや関数のオーバーロードが可能なら静的型でも変わらなくない?
- 554 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 01:27:12.80 ID:xAHUlHha.net]
- >>553
いや、それだと全部用意しないといけなくなるでしょ。 ダックタイピングだと必要なところだけ用意すればいいし、つまみ食いも出来る。その分楽。 丁度C++のスレが同じ事を言っているけど、 echo.2ch.net/test/read.cgi/tech/1490917669/137- そりゃ全てのオブジェクトが isScrollable や isSerealizable を持っているのが美しいだろうさ。 しかしそれは通常は余計に手間が増えるだろ。 インタフェースが肥大化するか、基底クラスが肥大化するかで。 だったらJavaScriptみたいに、 var obj_serialized = (obj.serialize)? obj.serialize() : null; とか、 SomeObj.prototype.serialize = function(){}; とか、出来たら融通は利くでしょ。少なくとも「今」やりたいことは出来るようになる。 それが後々逆に足を引っ張ることになるかどうかは腕次第でしょ。 ただし、どっちが楽かという話であって、 出来るか出来ないかで言えば、同じだよ。同じ事を逆からアプローチしてるだけだから。 JavaScriptについて言えば、 初期状態は全ての名前のメソッドを定義してあるが、実装してない状態だと言える。 だから未実装ならundefinedが返ってくるし、実装済みなら使える。 C++とかだと、初期状態は全く定義がなくて、自分で全て追加しないといけない。 でも全てのダックタイピングを可能にしようとしたら、 型消去するなりして全てのインタフェースに対応しないといけなくなる。 これってJavaScriptの初期状態と同じでしょ。 C++のテンプレートは空回り感が酷い。 UIなんて張り切って実装しても意外に糞だったりするので、 とりあえず実装してから確認したいってのはある。 そういう時はJavaScriptみたいな、とりあえずサクサク実装出来る言語の方が向いている。
- 555 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 02:34:37.34 ID:ibb6Zkrz.net]
- >>554
シリアライズのことしか考えてなくて、しかもシリアライズメソッドさえあれば 何でもかんでも簡単にシリアライズできるんだって思ってるみたいだけど、 まず前提として、いかなる言語も汎用的なシリアライズはなという話をしようか? これが大前提なので、あとからシリアライズメソッドつければ、 シリアライズできて便利ーにはならないんだよ。 通常シリアライズメソッドは後から追加できないものと考えるべき。 例外的に可能なものもあるけど、あとからシリアライズメソッドを追加できるならば、 obj.serialize() ではなく、Serializer.serialize(obj) とやることで目的は達成できる。 あんたがやろうとしているのは、単にシリアライズ処理を インスタンスメソッドにしたいと言っているだけ。
- 556 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 07:09:23.56 ID:16rBXoJR.net]
- >>551
OCamlあたりで構造的部分型を利用した型推論とかを知っとくといいと思うよ itpro.nikkeibp.co.jp/article/COLUMN/20061107/252787/
- 557 名前:デフォルトの名無しさん [2017/04/18(火) 07:25:53.47 ID:V4ah9bya.net]
- >>554 C++のテンプレートは空回り感が酷い。 とりあえず実装してから確認したいってのはある。
激しく同意する。 An one-liner で書けるようなものでは、型の恩恵などない。Local,global の峻別さえ無意味だ。そのようなときは duck typing で書かねば損だ。 逆に duck typing で一万行を超えてくると、強烈に型が欲しくなる。
- 558 名前:デフォルトの名無しさん [2017/04/18(火) 07:30:18.04 ID:V4ah9bya.net]
- >>554 そういう時はJavaScriptみたいな、とりあえずサクサク実装出来る言語の方が向いている。
俺は JavaScript(というより TypeScript) を使っていない。昔一舐めしただけだ。それ に本格的に手を出すべきか迷っている。意見を貰いたい。 JavaScript を押す人たちのコードを見ていると、Python のほうが三倍程度は濃密な コードで書けそうに見える。その理由は質の良いライブラリが揃っていることにある。 例えば N 重ループの iterator を Python ならば下のように書ける。JavaScript で、 こんな濃密なコードを書けるだろうか。 N=3; import itertools as md; list(md.product(*[range(3)]*N)) =============================== [(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 1, 0), (0, 1, 1), (0, 1, 2), (0, 2, 0), (0, 2, 1), (0, 2, 2), (1, 0, 0), (1, 0, 1), (1, 0, 2), (1, 1, 0), (1, 1, 1), (1, 1, 2), (1, 2, 0), (1, 2, 1), (1, 2, 2), (2, 0, 0), (2, 0, 1), (2, 0, 2), (2, 1, 0), (2, 1, 1), (2, 1, 2), (2, 2, 0), (2, 2, 1), (2, 2, 2)]
- 559 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 09:47:58.51 ID:1155c42j.net]
- >>550
そんなショボいものしか保証してくれないの? まったく安心して使えないね 動的型付けと大差ないじゃん
- 560 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 09:54:21.27 ID:1155c42j.net]
- 動作を保証しないから問題だって言った(>>540)直後に
動作を保証しなくて何が悪いと返せる(>>550)って凄いねw そのチンパンジー並みの記憶力は賞賛に値するよ
- 561 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 21:12:55.65 ID:xAHUlHha.net]
- >>558
俺はPythonは知らないのでJavaScriptとの比較は出来ない。 ただPythonはクロージャに難ありなので今後も使う気はない。 改行が強制されるのも気に入らない。 JavaScriptは書いてて気持ちがいいんだよ。 理由は簡単で、全て具だから。 型等の動作には関係ない物がないから、動作に集中出来る。 なるほどMatzが目指したのはこれだったのか、というのは分かった。 だから俺が次にやるとしたらRubyだね。 今のところ、俺は型自体はは要らないという結論だ。 名前通りの型しか付けないので、見りゃ分かる。 ただ、現実として、実行前にタイプミスを見つけてくれないから困っている。 ダックタイプや動的に使う場所なんて限られているのだから、 そういう場所に対してワーニング出してくれるだけでいいんだが。 そのためのリントを探してはみたものの、 JavaScriptのリンターはそんな方向では全くなかった。 あと、C++が糞なのはクラスは全て独立で親クラスを掴めないことだ。 だから細かくクラスを階層化出来ない。というか、やると余計に手間が増える。 ここら辺はJavaでは改善されていて、明示的に掴めるし、 JavaScriptではデフォで掴んでる。(レキシカルスコープ) 粗結合を目指すのならJava方式がいいし、 お気楽を目指すのならJavaScriptの方がいい。 ところで初心者はそういう「短く書ける方がイイ」みたいなことをよく言うが、 君が本当に一万行のコードを書ける奴なら、それは意味無いと分かるだろ。 そしてそれをここで聞くのも意味無い。 だって俺の腕前なんて未知数だし、ここでは無駄に吠える初心者も多いし。 一般論としては、Pythonはキャズムを越えているっぽいから、 学んでも無駄にはならないと思うよ。
- 562 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 21:41:20.30 ID:xAHUlHha.net]
- ああすまん、質問はPythonではなくて、JavaScriptを学ぶべきか?だったか。
俺が勘違いしてた。 これは俺は正確には答えられないね。 俺は他言語使えるわけではないし。 そもそも道具なんだから、今困ってなければ学ぶ必要はないだろ。 新しいプログラミングを学びたいというのなら、 結局どの言語も似たり寄ったりの方向に進化しつつあるし、 とりあえず「進化している言語」を一つ追跡しておけば問題はないだろ。 一番速いのは多分Rubyだろうし、この点ではPythonは遅いほうだよ。 同様に、この点でJavaScriptを選択する意味はない。 逆に、今使うというのなら、グダグダ言う意味もないだろ。 Web環境ではJavaScript以外の選択肢はないんだし。
- 563 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 22:41:32.37 ID:ibb6Zkrz.net]
- >>560
> 動作を保証しないから問題だって言った(>>540)直後に > 動作を保証しなくて何が悪いと返せる(>>550)って凄いねw なんの動作? ねぇねぇ、なんの動作? わざとぼやかしてるでしょwww
- 564 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 22:42:21.03 ID:ibb6Zkrz.net]
- あとそれから>>540は俺じゃないからねw
IDすら見えない? チンパンジーになみの理解力だった?w
- 565 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 22:43:49.88 ID:ibb6Zkrz.net]
- >>561
> JavaScriptのリンターはそんな方向では全くなかった。 TypeScriptがお前が望むものだよ 型を導入したJavaScriptだ。 いまあちこちで普及してる。
- 566 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 22:45:23.23 ID:ibb6Zkrz.net]
- >>561
> ところで初心者はそういう「短く書ける方がイイ」みたいなことをよく言うが、 > 君が本当に一万行のコードを書ける奴なら、それは意味無いと分かるだろ。 え? なんで? 同じ一万行なら、短く書ける方がより多くの機能を実装できるから やっぱり短いほうが良いじゃんw
- 567 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 23:07:56.67 ID:wXuuRzeA.net]
- >>566
つまり型は余計だということだね インタフェースとか余計なことを書かなきゃいけないから
- 568 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 23:13:36.64 ID:ibb6Zkrz.net]
- >>567
それはインターフェースが余計なものであるという前提で成り立つものだ インターフェースは余計なものではなくプログラマの意図を コードというコンピュータにも理解できる言語で記述した価値がある情報だ
- 569 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 23:14:34.77 ID:wXuuRzeA.net]
- >>568
短く書ける方がいいんでしょ? ダブスタいくないよ
- 570 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 23:18:22.51 ID:ibb6Zkrz.net]
- >>569
正確に言うと「少ないステップ数」というべきだな。 インターフェースは実行されないのでステップには含まれない。 他にも型宣言とかimportとかコメントとか空行とか { だけの行とか、そういうのもステップには含まれない。
- 571 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 23:19:45.52 ID:wXuuRzeA.net]
- >>570
> インターフェースは実行されないのでステップには含まれない。 こんなオレオレ定義聞いたことありませんw
- 572 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 23:20:25.75 ID:ibb6Zkrz.net]
- >>571
デバッガの「ステップ実行」って 使ったことないの? インターフェースの前後でステップ実行することはない
- 573 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 23:26:21.27 ID:wXuuRzeA.net]
- >>572
ググってみたけどステップ数からインタフェースを抜くなんて計算方法はまったく出てこない オレオレじゃないなら、どこか有名なサイトに計算方法が載ってるはずだからさ、ポインタでいいから 示してください
- 574 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 23:39:00.32 ID:ibb6Zkrz.net]
- >>573
ステップ数は単に英語の意味の通り、ステップ(一歩)という意味しかないよ。 ステップイン、ステップアウト、ステップ実行できる単位と考えればいい。 ステップできないのに、ステップ数に数えるとか意味不明だろう ソースコードの行数はLOCという。
- 575 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 23:42:54.39 ID:wXuuRzeA.net]
- >>574
たとえばさ、↓のページにあるように、ステップ数というと一般的にはプログラム規模を測るための 指標なんだよね e-words.jp/w/%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E6%95%B0.html LOCからコメントや空行を抜いたり、中括弧だけの行を抜いたりと言語によって流儀はあるみたいだけど、 お前の言う流儀がどこにも載ってないんだよ どこに載ってるか教えてくれないか?
- 576 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 23:49:43.26 ID:ibb6Zkrz.net]
- >>575
だからステップ数は誰も正確な定義をしてないのだから どんなものでも間違いではない。
- 577 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 23:54:29.25 ID:wXuuRzeA.net]
- >>576
とはいえ、「インタフェースはステップ数に含まない」と断言するからには、それなりに普及してる 流儀なんでしょ? その流儀がどこに書いてるか知りたいんだが
- 578 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 00:50:35.21 ID:4qCNxF1h.net]
- 動的型付言語の苦手な奴が多過ぎ
ダックタイピングでいいじゃん スタティックおじさん馬鹿にしていながら、自分もスタティックおじさんみたいになってる
- 579 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 01:04:19.78 ID:PWf0mJDu.net]
- ダックタイプおじさんに言われても…
- 580 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 02:34:11.69 ID:kxK9Wtdr.net]
- ここでダックタイプ嫌ってる奴って、ダックタイプを静的言語でやるとしたらジェネリクスとか言い出す奴だもんな
「自分の分からない技術は使えない技術だ」なんて完全にスタティックおじさんだよな
- 581 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 02:40:43.54 ID:0X+KA4Ry.net]
- 静的型の言語の補完の快適さは動的型言語には得られないものなんだよなぁ
インターフェイスとかをいちいち記述する手間を含めてもその最適さのほうが上回る感はある
- 582 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 02:43:32.85 ID:kxK9Wtdr.net]
- >>581
という感想を持つ人は静的言語を使えばいいし、インタフェースとかをいちいち記述するのが面倒くさい人は 動的言語を使えばいいよね ただそれだけの話
- 583 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 06:39:45.49 ID:SqPK9IfP.net]
- 自分だけで完結してる話ならそれでいいんだけど仕事だとそれじゃ駄目なんだよね
以前rubyのプロジェクトで酷い目にあったのでもう動的型付け言語は嫌だわ
- 584 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 07:15:17.15 ID:5nJ22bL2.net]
- インターフェースがある言語を使ってる人のほうが、よっぽどダックタイピング的思考をしてるだろう
rubyなんて脳内で型付けしてて、ダックタイピングのことなんて考えてない 教祖だけが狂ってる
- 585 名前:デフォルトの名無しさん [2017/04/19(水) 07:48:20.66 ID:+KnDkITW.net]
- >>562 意見ありがとう。552です。
>Web環境ではJavaScript以外の選択肢はないんだし。 同意します。Google が TypeScript を標準言語にしているのも、その意味なんでしょう。 俺としては型推論の働く、濃密なコード記述可能で、良質のライブラリが揃っている言語が欲しい。 Haskell が型推論で一番強力だと思うが、キャズムを超えられないと思う。Python のよ うな、全世界の知性による良質なライブラリの膨大な蓄積は期待できない。
- 586 名前:デフォルトの名無しさん [2017/04/19(水) 07:53:38.11 ID:+KnDkITW.net]
- >> 562 ところで初心者はそういう「短く書ける方がイイ」みたいなことをよく言うが、
君が本当に一万行のコードを書ける奴なら、それは意味無いと分かるだろ。 この主張への反例として、下の URL にある RSA 暗号の実験コードを示す www.math.kobe-u.ac.jp/~taka/asir-book-html/main/node96.html 二つの素数 p,q, から n=p q, n`=(p-1) (q-1) を経由して、秘密キーd 公開キー e を 構築する。ただし d e==1 mod n`。この 公開キー (e,n) を使ってデータ m から暗号 mm を生成し、mm から秘密キー(d,n) を使って m を復号する ## 素数 p,q から n` の定義する (暗号化されるデータ m は m < n` である) p=13;q=17;n=p q; n`=(p-1) (q-1); n` =============================== 192 # e=35 は gcd(e,n)=1 となる適当に選んだ数数。 ts(); p=13;q=17;n=p q; n`=(p-1) (q-1); e=35; ts.gcd(e,n`) =============================== 1
- 587 名前:デフォルトの名無しさん [2017/04/19(水) 07:54:07.55 ID:+KnDkITW.net]
- ## e から d e %n` == 1 となる d を作る
p=13;q=17;n=p q; n`=(p-1) (q-1); e=35; d = e^(n`-1) %n`; d, (d e) % n` =============================== (11L, 1L) ## p,q から作った (d,n) を秘密キーにして (e,n) を公開する。given m=100 に対する暗号は m^e mod n で行う ↑ (m^e mod n) ^ d mod n により、暗号 (m^e mod n) から m を複合できる # m = 100(<n` == 192) に対する暗号 m^e mod n:94 を生成する m=100; p=13;q=17;n=p q; n`=(p-1) (q-1); e=35; d = e^(n`-1) %n`; m^e %n =============================== 94 # m = 100 に対する暗号 mm=94 から、元の m を複合数 mm=94; p=13;q=17;n=p q; n`=(p-1) (q-1); e=35; d = e^(n`-1) %n`; mm^d %n =============================== 100
- 588 名前:デフォルトの名無しさん [2017/04/19(水) 07:54:36.26 ID:+KnDkITW.net]
- 以上の計算ができれば、RSA 暗号を実装できる程度に理解したと言えます。
ここでの one-liners は、プログラムというより、コンピュータ計算可能な数式です。 これ以上に単純化できない程に濃密です。しかも独立しています。それ以前の文脈に影 響されません。試行錯誤のごみの山から御宝式だけを copy and paste で取り出せま す。 これらの one-liners は短いけれど、可読性も備えています。 Python は、これだけの濃密なコード記述を可能にする良質なライブラリ群を備えています。 これらのコードを書くのに、一々 big num class を持ち出したりしてられません。RSA 暗号数学だけで、手一杯なのですから。 これらの one-liners で、int 型宣言する意味もないでしょう。
- 589 名前:デフォルトの名無しさん [2017/04/19(水) 07:55:01.02 ID:+KnDkITW.net]
- >>562 一番速いのは多分Rubyだろうし、この点ではPythonは遅いほうだよ。
老婆心ながら言っておきます。こんな理由で Ruby に学習コストを書けるのは止めるへき。 スピードが欲しいならば C 言語で実装して繋げばよい。SciPy は、実装にそうして実装 され、data science 分野で使われ、ライブラリが蓄積され続けている。 Ruby が書き安い言語なことには同意する。しかし勝手な互換性の放棄により、良質なラ イブラリの作者たちを離反させすぎた。Python community とは差が付きすぎた。 Python は Ruby と比較して読みやすい。俺にとって読んで楽しめるコードは Python だ けだ。C 言語はマクロの解析が必要になるなど、コードを読むことは苦痛のほうが勝 る。Ruby は C言語よりは読みやすいが、楽しめるほどではない。 今更 Ruby に向かうのは無謀すぎる。
- 590 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 08:42:44.89 ID:NBkpFfOk.net]
- どうせエンジンのお粗末なRubyのことだから
型が付いてもそのまま実行するよりWASM経由でした方が早いとなるだろうな。
- 591 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 09:30:10.92 ID:kxK9Wtdr.net]
- >>589
思いっきり文章の読み方を間違ってるよ >>562 でいうスピードは変化のスピードだよ 君がPython好きなのは分かるが、他の言語をけなそうとする余り文章を読み違えるのは いただけないな
- 592 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 09:59:52.76 ID:96WIxtun.net]
- Julia!
- 593 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 11:52:47.70 ID:oz+MR2rn.net]
- >>591
「このプログラミング言語は速い」って文脈で「進化の速度」のことを言っている奴は初めて見たな 普通は実行速度だよな? プログラミング基礎でO記法とか学ぶもの
- 594 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 12:15:11.91 ID:kxK9Wtdr.net]
- >>593
>>562 で直前で > とりあえず「進化している言語」を一つ追跡しておけば問題はないだろ。 と書かれているので、ここでの速いは進化の速度だよ そうでないとJavaScriptを除外している部分と整合性が取れない (JavaScriptは実行速度はかなり速いしね)
- 595 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 12:54:41.04 ID:D6qUbZcQ.net]
- >>560
亀レスで申し訳ないが、それはお前の認識が誤っているからだ あるライブラリAの、とあるクラスが、別のライブラリBて定義されている インターフェースを実装していた場合 ライブラリAはライブラリBでも使われることを前提としている というかライブラリBの上にライブラリAを築いている あたりまえだろ?だから当然想定されている で、ダックタイピングの場合は メソッド名が一致しているからひょっとして使えるんじゃね? ってレベルだろ そんなの偶然の一致かもしれないし、使えるかどうかわからん 元の開発者はそんなこと想定してないかもしれない 微妙に動作が違うかもしれない
- 596 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 13:04:46.14 ID:D6qUbZcQ.net]
- >元の開発者はそんなこと想定してないかもしれない
と書いたが、逆に使われることを想定しているんなら インターフェース方式でも問題ないんだよ ライブラリBのインターフェースを実装すればよいだけだからな 使われることを想定しているんなら、これは当然できる状態にある そして明確になる
- 597 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 13:17:55.77 ID:cvkGewar.net]
- >>596
どういう主張だっけ? 作者が意図しない使い方はすべきでない、つまりダックタイピングは悪 ってこと?
- 598 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 13:29:02.70 ID:D6qUbZcQ.net]
- 言いえて妙な話で、あるクラスがあちこちで使われることを想定しているなら
クラスの開発者は、想定する全ての使われ方について、全てのンターフェースを 実装すればよい 逆に、実装されてないインターフェースに関しては 「想定してませんよ、考慮してませんよ、ノーサポート」って事なんだよ その場合は、当たり前だが自分でラッパークラスを書けばよい ちょっとしたデータ変換や仕様のすり合わせもそこですればよい 元のクラスが想定してないんだから、これは当然なんだよ ダックタイピングは全てのクラスが自分の管理下にあって 仕様を完ぺきに把握しているのなら可能かもしれんが、という話
- 599 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 13:31:56.22 ID:D6qUbZcQ.net]
- ラッパークラスと書いたが、アダプタクラスと言ったほうが正しいかもしれん
- 600 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 20:03:28.85 ID:NUjiGrCs.net]
- そこそこ有名なライブラリAがあって、多数のライブラリC,D,E,...の中でそれを使っていたとする
それよりパフォーマンスが良くてメソッドに互換性があるライブラリBを作って CDEを変更することなくAからBに置き換えてもらいたくなったとき インターフェースのある言語だとライブラリAのインターフェースをBでも使わないと不可能じゃないの? もしAがGPLならBもGPLにしなきゃダメってこと?
- 601 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 20:58:25.69 ID:kxK9Wtdr.net]
- インタフェースをきっちり設計するのは面倒だからな
これをそうじゃないという人間はある程度の規模のアプリケーションを組んだことがないんじゃないか と言いたくなるぐらいにね
- 602 名前:デフォルトの名無しさん [2017/04/19(水) 21:03:25.43 ID:BnOg8tXa.net]
- >インターフェースのある言語だとライブラリAのインターフェースをBでも使わないと不可能じゃないの?
> >もしAがGPLならBもGPLにしなきゃダメってこと? それはインターフェース有り無し関係ない。FSFの主張だと、GPLなライブラリと組み合わせて使う前提のプログラムは、 全てGPLでなくてはならないことになってる。 実際、ダックタイピングな Python でも、 pyqt が GPL か商用ライセンスしかなくて敬遠されてたので、 pyside という LGPL なライブラリが作られた。
- 603 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 21:09:00.28 ID:Fw9wzeAw.net]
- >>600
それは条件が公平ではない 動的言語がその差し替えを比較的容易に行えるのはソースコードを直に実行しており 依存関係がシンボリックだからにすぎない CDEのソースが手元にあるなら、静的言語でもCDEをソースからリコンパイルすればいいだけの話 静的言語のリンクの仕方には色々あるが、同様にシンボリックなリンク方式を使っているなら ソースが無くてもBにもAと全く同じインターフェースを定義すれば当然動く
- 604 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 21:14:45.53 ID:kxK9Wtdr.net]
- >>603
> CDEのソースが手元にあるなら、静的言語でもCDEをソースからリコンパイルすればいいだけの話 さすがにライブラリ使用者にそこまで求めることはできないよね…
- 605 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 21:17:54.76 ID:Fw9wzeAw.net]
- >>604
だからそれはインターフェースの有無ではなくコンパイルの有無の問題だよね 言ってる意味わかる?
- 606 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 21:19:20.91 ID:kxK9Wtdr.net]
- >>605
ライブラリは基本的にコンパイル済の状態で提供されるよね?
- 607 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 21:23:40.52 ID:Fw9wzeAw.net]
- >>606
だからインターフェースは関係ないと言ってるだけなんだけど 頭大丈夫?
- 608 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 21:33:07.54 ID:kxK9Wtdr.net]
- >>607
ライブラリCDEをソースからコンパイルという時点でおかしよね?
- 609 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 21:44:06.41 ID:Fw9wzeAw.net]
- >>608
そうだね で、それがインターフェースとどう関係していると思うの? 一般論としては動的言語の方が比較的容易であることは>>603の冒頭で認めたうえで それはインターフェースではなくコンパイル(の習慣)の有無の問題であるので >>600の「インターフェースがあるから差し替えが難しい」は誤りだというのが俺の意見なんだけど ここまで説明しないと理解できない?
- 610 名前:デフォルトの名無しさん mailto:sage [2017/04/19(水) 21:46:39.68 ID:kxK9Wtdr.net]
- >>609
ライブラリはコンパイル済が配布されるのだから差し替えは難しいよね?
- 611 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 00:06:00.75 ID:goLojMqI.net]
- >>589
俺に言わせると、Pythonは学ぶ価値がないよ。 新しいプログラミングパラダイムを試したいなら、Rubyだろ。 「新しい事が至高」なコミュニティだから、今後もトップを走り続けるだろう。 逆に言えば、互換性なんて気にしている言語では、どうやってもRubyには追いつけない。 Pythonがゴミなのは、ラムダに式しか書けない点でも明らかだろ。 JavaScriptやってると分かると思うけど、式のラムダなんて使う割合は低い。 やりたいことが出来ない言語なんて、C派の俺にとってはゴミだよ。 そしてそれを教条的理由で採用しないというのも気に入らない。 Pythonの利点は、NumPyとかでしょ。 でもそれはNumJSとかにポーティングされれば終わる話。Python自体の魅力じゃない。 JavaScriptはローカルファイルへのアクセスが出来なかったからこの解はなかったが、 Nodeが出て、Electronが出て、という状況では、NumJSも時間の問題。 ただNodeなら直接Cで呼べるから誰もやらないかもしれないが。 Pythonが問題なのは、糞遅いこと。 これは現段階ではもう手当てする人が現れないでしょ。 NumPyでいい奴はそれで終わってるし。 NumJSが現れたら、Python+NumPyよりも確実に速い。 その時にPythonを選択する理由がない。 JavaScriptの問題は、コミュニティとして非同期が正義な事。 正直、書きやすいとは言えない。ただこれも慣れれば何とかなるのも事実。 ネスト地獄ガーっていうのははっきり言って嘘で、ちゃんと組めばそんなことにはならない。 ただし、関数が細切れになるが。 まあこの辺も何だかなーってのもあるけど、致し方なし。 Pythonを今使うのならいいけど、将来性は無いと思うよ。
- 612 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 00:14:11.81 ID:goLojMqI.net]
- >>593,594
俺が言っていたのは「進化の速度」だよ。 というか、そんなに分かりにくい言い方だとも思わないけど。 ただ、本当に>>558が出来る言語が素晴らしいと思っているのなら、 まずは言語は何でも良いからガンガン書いてみて、 それをきっちり保守してみることだね。 そうすれば、そんな点は全く意味がないと分かるだろう。
- 613 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 00:19:35.76 ID:Xe6G3IeW.net]
- >>611
気持ち良く長文書いてるとこ悪いけど、cythonって知ってる?
- 614 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 01:36:16.89 ID:1ly+xIep.net]
- >>606
> ライブラリは基本的にコンパイル済の状態で提供されるよね? ソースコードが提供されているならば ソースコードを修正してコンパイルすれば良い。 そのライブラリがコンパイル済みの状態で提供されているかどうかは関係ない
- 615 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 01:37:22.80 ID:1ly+xIep.net]
- >>610
> ライブラリはコンパイル済が配布されるのだから差し替えは難しいよね? 少なくともオープンソースであれば、ソースコードとコンパイル済みの 両方が配布されているから差し替えは難しくない。
- 616 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 01:59:48.10 ID:JQpZsY1s.net]
- >>610
多くのコンパイル型言語では故意に差し替え可能に設計しておかない限りインターフェイスの有無に関わらずライブラリのコンパイルが必要 たとえばC#でインターフェイスをつかわず、全部dynamicで呼び出してる場合でもDLL差し替えではだめ
- 617 名前:デフォルトの名無しさん [2017/04/20(木) 02:37:35.64 ID:jSNxj+lA.net]
- >>611
>>>589 >俺に言わせると、Pythonは学ぶ価値がないよ。 > >新しいプログラミングパラダイムを試したいなら、Rubyだろ。 >「新しい事が至高」なコミュニティだから、今後もトップを走り続けるだろう。 >逆に言えば、互換性なんて気にしている言語では、どうやってもRubyには追いつけない。 釣り? 少なくともRubyは無いわ。昔はともかく、この2-3年は停滞しているように見える。 すまんが、最近Rubyに入った、新しいプログラミングパラダイムを教えてくれ。 # ちなみに貴方が腐している Python は、async/await とか、外部チェッカを利用した Gradual Typing とか Null safety とか入りました。
- 618 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 03:11:22.47 ID:1ly+xIep.net]
- >>617
それのどこが新しいプログラミングパラダイスなの?
- 619 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 03:33:31.73 ID:59/j45Wf.net]
- >>618
お前の頭がパラダイスだよアホ ていうか、ruby3にgradual typing入れるってmatzが去年言ってなかったか?
- 620 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 04:55:25.22 ID:DtO/sAcV.net]
- >>611
ラムダ式に式しか書けないのは関数型言語好きがコミュニティに増えたからって気がする。 Pythonそのものも関数プログラミングをサポートしつつあって、同じ機能にオブジェクト指向版と関数プログラミング版と二つあるのがチラホラ。。。 そういう意味じゃすっごく気持ち悪い。 でも、使う側から見れば使えるライブラリ多いPython。 面白いかどうかじゃなくて、使えるかどうかね。 Rubyで使える数値計算やディープラーニングのライブラリ紹介してくれ。 宣伝してやるから。
- 621 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 06:12:51.42 ID:wBOWWhZ0.net]
- >>611
少なくともNumPyが使われ続ける限りPythonを学ぶ価値はあるだろ Pythonから学ぶことは反面教師的なこと以外はほとんどないけどさ しかしRubyには使いどころはおろか、学びも皆無 自称言語オタク(失笑)が聞きかじった話題の他言語の顰みに倣ったり その失敗を含む二番煎じを、ろくすっぽ論文も読まない取り巻きとひたすら繰り返しているだけ Rubyを見て新しいとかいってる奴は元ネタを知らないだけのただの哀れな信者
- 622 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 06:28:09.48 ID:q9J6ThwX.net]
- アニメで小林さんがpython使ってたから本読んだ。仕事でciscoのopenpk使う事になった。小林さん、ありがとう。
- 623 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 07:19:41.16 ID:GRmYdHAz.net]
- >>614-615
mavenやsbtみたいなのを使うなってことですか? これは驚いた…
- 624 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 07:34:57.19 ID:Oql1W8zX.net]
- >>623
意味不明 お前は公開リポジトリに既存の有名ライブラリと同姓同名の俺ライブラリを登録するつもりか? そんな迷惑行為は常識的には認められない
- 625 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 07:37:46.72 ID:GRmYdHAz.net]
- >>624
ソースを入手してビルド、なんて依存性解決は面倒だしバージョンアップに追随するのも 面倒だしやってられないと思うんだが… みんなやってられないと思ったからmavenやsbtみたいなのが作られたわけだし
- 626 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 07:59:30.03 ID:Oql1W8zX.net]
- >>625
Java系なら同じパッケージ名で同じ名称のクラスやインターフェースを定義しておけば バイナリをmavenやsbtを用いて差し替えることは可能だよ そんな”迷惑行為”は大抵のエコシステムでは認められないし、 パッケージ名の勝手な使用によって法的な問題が発生する可能性すらある
- 627 名前:デフォルトの名無しさん [2017/04/20(木) 08:09:16.54 ID:jSNxj+lA.net]
- >>>617
>それのどこが新しいプログラミングパラダイスなの? コルーチンが普通の関数っぽく書けるようになったり、動的型言語に部分的に静的型を導入したりNullチェックを強制できるのは新しくないと。 ま、Pythonが史上初めてではないが、他言語で評判が良い部分を取り込んだ感じだな。 じゃ、貴方が思う、最近Rubyに入った新しいプログラミングパラダイムを教えてよ。 Rubyは「トップを走り続ける」のだから、1つ2つは簡単に紹介できるでしょ。
- 628 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 08:42:44.18 ID:KuJQA9vc.net]
- ここ最近このスレは全く書き込みが無くて閑古鳥が鳴いていて
人いるの?って感じだったのに 俺の書き込みを発端として昔のように熱いバトルが始まって本当にうれしい 書き込んでよかったよ もう絶滅したかと思ってたが、まだ一定数、動的型信者がいるようで あぶり出し大成功ってところか 危険人物なので隔離スレにいつまでも隔離されててください 今の猫も杓子も静的型の時代に、まだ回心できてないってことは これから先もずっと無理だろうし
- 629 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 09:58:21.96 ID:1vogS2Io.net]
- >>628
インターフェース信者君がフルボッコになってるのを熱いバトルってww
- 630 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 10:19:29.42 ID:KuJQA9vc.net]
- このように、もはや違う時間軸に住んでいる人なんだよな
俺の住んでる時間軸では、新しくできた目ぼしい言語は 当たり前のように静的型の機能を持っていて 静的型の落とし込み方自体が言語の特徴というか セールスポイントにもなってるんだが そちらの時間軸ではどうなってるのかな? タイプセーフは今時常識だよ 静的型の先進的機能を否定するのは過去に縛られたstaticおじさんと同じこと また、言語に静的型の機能がないってことは 単純にその言語は手抜きってだけのこと あと、言語としてもつまらない
- 631 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 11:51:49.98 ID:zbrlZyFU.net]
- visual studioとc#の組み合わせが最強すぎる
- 632 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 20:02:10.05 ID:GRmYdHAz.net]
- >>630
staticおじさんというのは「自分の知らない機能を使えない機能だと断言してけなす人」だから、ID:KuJQA9vc のことだよ
- 633 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 21:11:31.08 ID:1ly+xIep.net]
- >>630
まーた、タイプセーフの意味をわかってないやつかw postd.cc/what-is-type-safety/ > C言語とC++:型安全ではない。 > Java、C#:(恐らく)型安全。 > Python、Ruby:(ほぼ間違いなく)型安全。 > タイプセーフは今時常識だよ そのとおりだよ。PythonとかRubyを見よ。 タイプセーフになってるだろ
- 634 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 21:17:24.18 ID:mm5xT/YJ.net]
- タイプセーフと、実行時型エラー出るのとは別かもだが、実行時型エラーが問題。
客からそんな詰まらんエラーでクレームとか恥だわ。
- 635 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 21:25:08.52 ID:1ly+xIep.net]
- 別かもじゃなくて別。全くの別物
- 636 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 21:48:47.90 ID:q9J6ThwX.net]
- staticおじさんは今はタイプセーフの話なんてしてんの?
- 637 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 13:28:51.30 ID:jwNNIRXE.net]
- pythonは単純な手続き型プログラミングもできるしオブジェクト指向もそこそこできるし
関数型もそこそこできるすごいそこそこな言語なんだゾ
- 638 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 15:21:18.45 ID:JPWJqUsf.net]
- 重要な言語である事は誰もが認めるが、凄いかどうかは微妙。
- 639 名前:デフォルトの名無しさん [2017/04/21(金) 17:30:39.41 ID:SD7KIjS1.net]
- 今はjavascriptそのまま使うよりtypescriptでしょ
- 640 名前:デフォルトの名無しさん [2017/04/21(金) 19:41:12.79 ID:qLxCXNxk.net]
- ぼほ主流スクリプト言語はオブジェクト指向も関数型も搭載済み。
- 641 名前:デフォルトの名無しさん mailto:age [2017/04/22(土) 20:52:21.35 ID:vDrwU1OX.net]
- ライブラリに頼らずjavascriptのそのままテキストエディタに手打ちで一気に書けるのが熟練エンジニア
コードの保管などいらないし、変数の型も当然頭の中で整理されていて矛盾など起きない 後で保守する奴のためには、ちゃんと事細かなコメントを付けてやり、見やすく改行とインデントを付けて置いてやる フレームワークに頼る奴は二流だ
- 642 名前:デフォルトの名無しさん mailto:sage [2017/04/23(日) 10:49:37.16 ID:EiQ7XooB.net]
- と、IDEやフレームワークの進化ついて行けないロートルが申しております
- 643 名前:デフォルトの名無しさん mailto:sage [2017/04/23(日) 11:43:35.11 ID:sn9lV80g.net]
- 近年必要なコード量が多過ぎだよな
にも関わらずそれに対処しようとする言語は無い それこそIDEやフレームワークに責任を丸投げしているが、 よく考えてみるとJSは当時で言うそれだったわけだ もう一回りして未来に流行る言語はそういうものであって欲しいね
- 644 名前:デフォルトの名無しさん [2017/06/04(日) 06:54:19.19 ID:N3Ss45Z5.net]
- そういうことだな
|
|