前スレ
【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】
http://echo.2ch.net/test/read.cgi/tech/1458955459/
探検
【JavaScript】スクリプト バトルロワイヤル55【php,py,pl,rb】 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2016/10/01(土) 23:40:48.89ID:FvOeAcfn
529デフォルトの名無しさん
2017/04/16(日) 18:15:43.11ID:cCOM2/u0530デフォルトの名無しさん
2017/04/16(日) 18:20:36.92ID:aIkdKg/w >>528
アプリケーションの全クラスが自分の管理下にあればそれも可能かもしれんな
でも実際は様々なライブラリを使うことは避けられないし、各ライブラリのクラスに後から自分が欲しい
インタフェースを追加することはできないことがほとんど
C#やScalaなんかはそういうこともできるみたいだが、今度は可読性が落ちるのでここぞというときの
秘密兵器扱いだな
アプリケーションの全クラスが自分の管理下にあればそれも可能かもしれんな
でも実際は様々なライブラリを使うことは避けられないし、各ライブラリのクラスに後から自分が欲しい
インタフェースを追加することはできないことがほとんど
C#やScalaなんかはそういうこともできるみたいだが、今度は可読性が落ちるのでここぞというときの
秘密兵器扱いだな
531デフォルトの名無しさん
2017/04/16(日) 18:26:41.26ID:cCOM2/u0532デフォルトの名無しさん
2017/04/16(日) 18:29:04.31ID:cCOM2/u0 手段が目的になってしまってるんだよなw
何がしたいのかは言わない。
ライブラリのクラスに後からインターフェースを追加することが
目的なんだって臆面もなく言ってしまうw
何がしたいのかは言わない。
ライブラリのクラスに後からインターフェースを追加することが
目的なんだって臆面もなく言ってしまうw
533デフォルトの名無しさん
2017/04/16(日) 18:34:11.12ID:aIkdKg/w >>531
あるよ
たとえばあるライブラリがAというクラスのオブジェクトを返したとする
これを別のライブラリか自分で作ったクラスのの引数として使いたいけど、その引数はBという
インタフェースを要求する
Aというクラスは字面の上ではBというインタフェースを満たしているのだが、Bというインタフェースを
implement しているわけではない
さてどうしよう
Bというインタフェースを持つクラスを自分で定義してコピーする?こんな余計なことしなきゃいけない
のは生産性の低下以外の何物でもないわな
これは一例であって他にも同様の例はいくらでもある
あるよ
たとえばあるライブラリがAというクラスのオブジェクトを返したとする
これを別のライブラリか自分で作ったクラスのの引数として使いたいけど、その引数はBという
インタフェースを要求する
Aというクラスは字面の上ではBというインタフェースを満たしているのだが、Bというインタフェースを
implement しているわけではない
さてどうしよう
Bというインタフェースを持つクラスを自分で定義してコピーする?こんな余計なことしなきゃいけない
のは生産性の低下以外の何物でもないわな
これは一例であって他にも同様の例はいくらでもある
534デフォルトの名無しさん
2017/04/16(日) 18:43:08.06ID:cCOM2/u0 >>533
なんでAというクラスが、Aとは全く関係のなく作られたBというインターフェースを
たまたま運良く満たすなんて自体が起きるんだよw
ありえないだろ。
それよりか引数が違うのに、同じ名前のメソッドを定義してしまっていた
どうしようって思うほうが可能性高いわw
なんでAというクラスが、Aとは全く関係のなく作られたBというインターフェースを
たまたま運良く満たすなんて自体が起きるんだよw
ありえないだろ。
それよりか引数が違うのに、同じ名前のメソッドを定義してしまっていた
どうしようって思うほうが可能性高いわw
535デフォルトの名無しさん
2017/04/16(日) 18:46:33.36ID:cCOM2/u0 Aというクラスは字面の上ではBというインタフェースを満たしているのだが、
Bのバージョンアップでインタフェースが変わってしまった。
だけど、Aというクラスがたまたま古いBのインターフェースと
一致していたという前提をどこにも書いていなかったので、
動かなくなる原因の判明に時間がかかった。
そのためにコメントをしっかり書くようにした。
A は B interface を implements しているよと
Bのバージョンアップでインタフェースが変わってしまった。
だけど、Aというクラスがたまたま古いBのインターフェースと
一致していたという前提をどこにも書いていなかったので、
動かなくなる原因の判明に時間がかかった。
そのためにコメントをしっかり書くようにした。
A は B interface を implements しているよと
536デフォルトの名無しさん
2017/04/16(日) 18:50:50.79ID:aIkdKg/w >>534
ありえるんだよ、これが
しかもしょっちゅう
(俺は静的型言語でも開発してるからよく出くわすよ)
たとえば、Serializable なんか典型じゃないかな
そのまま Serialize したいのになんで Serializable インタフェース持ってねぇんだよ!
みたいなのはほんといくらでもあるよ
ありえるんだよ、これが
しかもしょっちゅう
(俺は静的型言語でも開発してるからよく出くわすよ)
たとえば、Serializable なんか典型じゃないかな
そのまま Serialize したいのになんで Serializable インタフェース持ってねぇんだよ!
みたいなのはほんといくらでもあるよ
537デフォルトの名無しさん
2017/04/16(日) 18:53:05.94ID:cCOM2/u0 このようにダックタイピングを使うとその場しのぎで直ぐに対応できるように思えるけど
長い目で見れば、可読性の低下を招き、メンテナンス性、生産性を下げることになってしまう。
書いたら終わり、メンテナンスが不要な書捨てのプログラムぐらいにしか
使わない方がいい。
そして、書捨てのプログラムをよく書くのはインフラ系が多い。
インフラ系で必要とされるのはオブジェクト指向も必要ない
数行程度のスクリプト。シェルスクリプトよりは書きやすいぐらいの
理由しか持ち合わせてない
アプリの開発には長期間メンテナンスされるので可読性が重要
長い目で見れば、可読性の低下を招き、メンテナンス性、生産性を下げることになってしまう。
書いたら終わり、メンテナンスが不要な書捨てのプログラムぐらいにしか
使わない方がいい。
そして、書捨てのプログラムをよく書くのはインフラ系が多い。
インフラ系で必要とされるのはオブジェクト指向も必要ない
数行程度のスクリプト。シェルスクリプトよりは書きやすいぐらいの
理由しか持ち合わせてない
アプリの開発には長期間メンテナンスされるので可読性が重要
538デフォルトの名無しさん
2017/04/16(日) 18:56:36.72ID:cCOM2/u0539デフォルトの名無しさん
2017/04/16(日) 19:04:01.20ID:cCOM2/u0 http://rubytips86.hatenablog.com/entry/2014/03/19/184940
Rubyでこのシリアライズとデシリアライズを担うライブラリがMarshalモジュールだ。
注意点としてMarshal.dumpでは、無名のクラス・モジュールのオブジェクト、
システムがオブジェクトの状態を保持するIOなど、
Procなどいくつかのインスタンス、特異メソッドを定義したオブジェクトはシリアライズできない。
Rubyでこのシリアライズとデシリアライズを担うライブラリがMarshalモジュールだ。
注意点としてMarshal.dumpでは、無名のクラス・モジュールのオブジェクト、
システムがオブジェクトの状態を保持するIOなど、
Procなどいくつかのインスタンス、特異メソッドを定義したオブジェクトはシリアライズできない。
540デフォルトの名無しさん
2017/04/16(日) 22:32:15.20ID:AmA5ei6y 第一だよ
全然関係ないライブラリ同士でたまたま字面の上で
メソッド名が一致しているクラスがあるっていう
偶然の一致があったとしても
その動作振る舞いまでもが完全に一致していて
動作的にコンパチブルかどうかは分からないよ
想定してないんだからさ
おおよそ慣例というか習慣というか、その言語ではふつうそうするって
何らかの決まり事みたいなものがあるのなら問題ないかもしれないが
そういう場合は言語側やファウンダメンタリーなライブラリが
インターフェースを定義してくれているから、それ使えばよいわけで
やっぱり関係ないんだよ
そういうメソッド名と振る舞いの両方が偶然にも一致
っていう奇跡偶然に頼るってのが
まさにおまえ自身が>>530で言ってる
>アプリケーションの全クラスが自分の管理下にあればそれも可能かもしれんな
そのものなんだよ、まったくのブーメラン
全然関係ないライブラリ同士でたまたま字面の上で
メソッド名が一致しているクラスがあるっていう
偶然の一致があったとしても
その動作振る舞いまでもが完全に一致していて
動作的にコンパチブルかどうかは分からないよ
想定してないんだからさ
おおよそ慣例というか習慣というか、その言語ではふつうそうするって
何らかの決まり事みたいなものがあるのなら問題ないかもしれないが
そういう場合は言語側やファウンダメンタリーなライブラリが
インターフェースを定義してくれているから、それ使えばよいわけで
やっぱり関係ないんだよ
そういうメソッド名と振る舞いの両方が偶然にも一致
っていう奇跡偶然に頼るってのが
まさにおまえ自身が>>530で言ってる
>アプリケーションの全クラスが自分の管理下にあればそれも可能かもしれんな
そのものなんだよ、まったくのブーメラン
541デフォルトの名無しさん
2017/04/16(日) 22:54:49.91ID:aIkdKg/w >>540
ダックタイピングのことを知らないお前が言っても説得力はないよ
ダックタイピングのことを知らないお前が言っても説得力はないよ
542デフォルトの名無しさん
2017/04/16(日) 23:27:02.64ID:f4lMQoiy 言い争いの起点がどこにあるのかわからん
543デフォルトの名無しさん
2017/04/16(日) 23:30:25.86ID:aIkdKg/w544デフォルトの名無しさん
2017/04/17(月) 00:16:09.41ID:W0pN1+cl 要するに、後付で色々したい場合はダックタイピングの方が楽なんだよ。
ただし、全てを見通せるのなら最初からインタフェースにしておいた方が美しいのも事実。
現実的にはJavaScriptはUI用で酷く書き換えを強いられる為、
ダックタイピングの方が向いている。(と俺は感じている)
逆に、仕様がかっちり決まっている場合は型ありでも特に苦労しないし、
数値計算等のバグ出ししにくい状況では型があった方が安心ではある。
(期待値が作りにくい、見た目でバグと分からない)
ただ、UIならバグは見て分かるし、ダックタイピングでも問題ない。
動的言語はパターンを当てないとバグ検出出来ないけど、
UIなら「変更が依頼された」=「パターン持ってる」ってことだし。
ただし、全てを見通せるのなら最初からインタフェースにしておいた方が美しいのも事実。
現実的にはJavaScriptはUI用で酷く書き換えを強いられる為、
ダックタイピングの方が向いている。(と俺は感じている)
逆に、仕様がかっちり決まっている場合は型ありでも特に苦労しないし、
数値計算等のバグ出ししにくい状況では型があった方が安心ではある。
(期待値が作りにくい、見た目でバグと分からない)
ただ、UIならバグは見て分かるし、ダックタイピングでも問題ない。
動的言語はパターンを当てないとバグ検出出来ないけど、
UIなら「変更が依頼された」=「パターン持ってる」ってことだし。
545デフォルトの名無しさん
2017/04/17(月) 01:28:08.77ID:8mjeDRwA 真面目にダックタイピングをやろうとする行為は、型やインタフェースを定義するのと違いがない
だからrubyでダックタイピングを考えてプログラミングしてる人なんているわけない
だからrubyでダックタイピングを考えてプログラミングしてる人なんているわけない
546デフォルトの名無しさん
2017/04/17(月) 03:12:15.72ID:LB/3uUQe547デフォルトの名無しさん
2017/04/17(月) 07:17:22.30ID:W0pN1+cl >>546
良い悪いを議論する事じゃないよ。
結局は、どう思うか、どう感じるか、でしかないから。
型には型の得失があるし、ダックタイピングにしてもそう。
選べる状況なら好きな方選べばいいし、無理ならグダグダ言っても意味無いだろ。
利点を感じないのなら、これまでそういう状況に遭遇したことがないか、
或いはそもそもそっち派ではないか。
いずれにしても使わないってことで問題はない。
利点説明おねだり君なんてウザイだけだから止めろ。
http://yohshiy.blog.fc2.com/blog-entry-244.html
未確認飛行の人も同じようなことを言っていたと思ったけど見つからなかったから上記で。
結論出したいのならこの辺だと思うよ。
>>545
ガチでダックタイピングの利点を享受しようとすると、
型に留まらず世界が統一されていないといけないので、実は型よりも難しい。
そしてJavaScriptもそれに対応出来ていない。理由は標準化している奴らが馬鹿だから。
sizeとlengthが混在してるでしょ。
あれ、どっちでもいいけどどっちかに統一されてないといけない。
だから真面目にダックタイピングをやっている奴なんていない、というのは俺も思う。
良い悪いを議論する事じゃないよ。
結局は、どう思うか、どう感じるか、でしかないから。
型には型の得失があるし、ダックタイピングにしてもそう。
選べる状況なら好きな方選べばいいし、無理ならグダグダ言っても意味無いだろ。
利点を感じないのなら、これまでそういう状況に遭遇したことがないか、
或いはそもそもそっち派ではないか。
いずれにしても使わないってことで問題はない。
利点説明おねだり君なんてウザイだけだから止めろ。
http://yohshiy.blog.fc2.com/blog-entry-244.html
未確認飛行の人も同じようなことを言っていたと思ったけど見つからなかったから上記で。
結論出したいのならこの辺だと思うよ。
>>545
ガチでダックタイピングの利点を享受しようとすると、
型に留まらず世界が統一されていないといけないので、実は型よりも難しい。
そしてJavaScriptもそれに対応出来ていない。理由は標準化している奴らが馬鹿だから。
sizeとlengthが混在してるでしょ。
あれ、どっちでもいいけどどっちかに統一されてないといけない。
だから真面目にダックタイピングをやっている奴なんていない、というのは俺も思う。
548デフォルトの名無しさん
2017/04/17(月) 09:32:26.96ID:LB/3uUQe > そしてインタフェースをいちいち付けてまわるのは非常に面倒臭いこと
めんどくさい? ダックタイピングではインターフェースがないから
代わりにコメントで同じ情報を書かないといけないじゃん。
インターフェースの情報(コメント含む)を書かないで
それが仕様かどうか分かってもらえると思ってんの?
めんどくさい? ダックタイピングではインターフェースがないから
代わりにコメントで同じ情報を書かないといけないじゃん。
インターフェースの情報(コメント含む)を書かないで
それが仕様かどうか分かってもらえると思ってんの?
549デフォルトの名無しさん
2017/04/17(月) 09:43:33.93ID:oCHN+Sd+550デフォルトの名無しさん
2017/04/17(月) 21:03:29.03ID:LB/3uUQe >>549
interfaceは"インターフェースを"保証してくれるもので
インターフェース以外は別の話なのは当たり前だと思うが?
「お前型を保証してくれるんだろ?
バグがないことまで保証してくれよ」
っていうのと同じぐらい無茶なこと
普通保証の対象しか、保証しませんってw
interfaceは"インターフェースを"保証してくれるもので
インターフェース以外は別の話なのは当たり前だと思うが?
「お前型を保証してくれるんだろ?
バグがないことまで保証してくれよ」
っていうのと同じぐらい無茶なこと
普通保証の対象しか、保証しませんってw
551デフォルトの名無しさん
2017/04/17(月) 22:17:56.90ID:BH39VCMj552デフォルトの名無しさん
2017/04/17(月) 23:27:50.92ID:LB/3uUQe しょぼくない言語なら、
動作振る舞いがコンパチブルかどうかを保証してくれるんだろう?
動作振る舞いがコンパチブルかどうかを保証してくれるんだろう?
553デフォルトの名無しさん
2017/04/18(火) 00:29:01.98ID:n/IUHgwq554デフォルトの名無しさん
2017/04/18(火) 01:27:12.80ID:xAHUlHha >>553
いや、それだと全部用意しないといけなくなるでしょ。
ダックタイピングだと必要なところだけ用意すればいいし、つまみ食いも出来る。その分楽。
丁度C++のスレが同じ事を言っているけど、
http://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みたいな、とりあえずサクサク実装出来る言語の方が向いている。
いや、それだと全部用意しないといけなくなるでしょ。
ダックタイピングだと必要なところだけ用意すればいいし、つまみ食いも出来る。その分楽。
丁度C++のスレが同じ事を言っているけど、
http://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デフォルトの名無しさん
2017/04/18(火) 02:34:37.34ID:ibb6Zkrz >>554
シリアライズのことしか考えてなくて、しかもシリアライズメソッドさえあれば
何でもかんでも簡単にシリアライズできるんだって思ってるみたいだけど、
まず前提として、いかなる言語も汎用的なシリアライズはなという話をしようか?
これが大前提なので、あとからシリアライズメソッドつければ、
シリアライズできて便利ーにはならないんだよ。
通常シリアライズメソッドは後から追加できないものと考えるべき。
例外的に可能なものもあるけど、あとからシリアライズメソッドを追加できるならば、
obj.serialize() ではなく、Serializer.serialize(obj) とやることで目的は達成できる。
あんたがやろうとしているのは、単にシリアライズ処理を
インスタンスメソッドにしたいと言っているだけ。
シリアライズのことしか考えてなくて、しかもシリアライズメソッドさえあれば
何でもかんでも簡単にシリアライズできるんだって思ってるみたいだけど、
まず前提として、いかなる言語も汎用的なシリアライズはなという話をしようか?
これが大前提なので、あとからシリアライズメソッドつければ、
シリアライズできて便利ーにはならないんだよ。
通常シリアライズメソッドは後から追加できないものと考えるべき。
例外的に可能なものもあるけど、あとからシリアライズメソッドを追加できるならば、
obj.serialize() ではなく、Serializer.serialize(obj) とやることで目的は達成できる。
あんたがやろうとしているのは、単にシリアライズ処理を
インスタンスメソッドにしたいと言っているだけ。
556デフォルトの名無しさん
2017/04/18(火) 07:09:23.56ID:16rBXoJR >>551
OCamlあたりで構造的部分型を利用した型推論とかを知っとくといいと思うよ
http://itpro.nikkeibp.co.jp/article/COLUMN/20061107/252787/
OCamlあたりで構造的部分型を利用した型推論とかを知っとくといいと思うよ
http://itpro.nikkeibp.co.jp/article/COLUMN/20061107/252787/
557デフォルトの名無しさん
2017/04/18(火) 07:25:53.47ID:V4ah9bya >>554 C++のテンプレートは空回り感が酷い。 とりあえず実装してから確認したいってのはある。
激しく同意する。
An one-liner で書けるようなものでは、型の恩恵などない。Local,global の峻別さえ無意味だ。そのようなときは duck typing で書かねば損だ。
逆に duck typing で一万行を超えてくると、強烈に型が欲しくなる。
激しく同意する。
An one-liner で書けるようなものでは、型の恩恵などない。Local,global の峻別さえ無意味だ。そのようなときは duck typing で書かねば損だ。
逆に duck typing で一万行を超えてくると、強烈に型が欲しくなる。
558デフォルトの名無しさん
2017/04/18(火) 07:30:18.04ID:V4ah9bya >>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)]
俺は 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デフォルトの名無しさん
2017/04/18(火) 09:47:58.51ID:1155c42j560デフォルトの名無しさん
2017/04/18(火) 09:54:21.27ID:1155c42j561デフォルトの名無しさん
2017/04/18(火) 21:12:55.65ID:xAHUlHha >>558
俺はPythonは知らないのでJavaScriptとの比較は出来ない。
ただPythonはクロージャに難ありなので今後も使う気はない。
改行が強制されるのも気に入らない。
JavaScriptは書いてて気持ちがいいんだよ。
理由は簡単で、全て具だから。
型等の動作には関係ない物がないから、動作に集中出来る。
なるほどMatzが目指したのはこれだったのか、というのは分かった。
だから俺が次にやるとしたらRubyだね。
今のところ、俺は型自体はは要らないという結論だ。
名前通りの型しか付けないので、見りゃ分かる。
ただ、現実として、実行前にタイプミスを見つけてくれないから困っている。
ダックタイプや動的に使う場所なんて限られているのだから、
そういう場所に対してワーニング出してくれるだけでいいんだが。
そのためのリントを探してはみたものの、
JavaScriptのリンターはそんな方向では全くなかった。
あと、C++が糞なのはクラスは全て独立で親クラスを掴めないことだ。
だから細かくクラスを階層化出来ない。というか、やると余計に手間が増える。
ここら辺はJavaでは改善されていて、明示的に掴めるし、
JavaScriptではデフォで掴んでる。(レキシカルスコープ)
粗結合を目指すのならJava方式がいいし、
お気楽を目指すのならJavaScriptの方がいい。
ところで初心者はそういう「短く書ける方がイイ」みたいなことをよく言うが、
君が本当に一万行のコードを書ける奴なら、それは意味無いと分かるだろ。
そしてそれをここで聞くのも意味無い。
だって俺の腕前なんて未知数だし、ここでは無駄に吠える初心者も多いし。
一般論としては、Pythonはキャズムを越えているっぽいから、
学んでも無駄にはならないと思うよ。
俺はPythonは知らないのでJavaScriptとの比較は出来ない。
ただPythonはクロージャに難ありなので今後も使う気はない。
改行が強制されるのも気に入らない。
JavaScriptは書いてて気持ちがいいんだよ。
理由は簡単で、全て具だから。
型等の動作には関係ない物がないから、動作に集中出来る。
なるほどMatzが目指したのはこれだったのか、というのは分かった。
だから俺が次にやるとしたらRubyだね。
今のところ、俺は型自体はは要らないという結論だ。
名前通りの型しか付けないので、見りゃ分かる。
ただ、現実として、実行前にタイプミスを見つけてくれないから困っている。
ダックタイプや動的に使う場所なんて限られているのだから、
そういう場所に対してワーニング出してくれるだけでいいんだが。
そのためのリントを探してはみたものの、
JavaScriptのリンターはそんな方向では全くなかった。
あと、C++が糞なのはクラスは全て独立で親クラスを掴めないことだ。
だから細かくクラスを階層化出来ない。というか、やると余計に手間が増える。
ここら辺はJavaでは改善されていて、明示的に掴めるし、
JavaScriptではデフォで掴んでる。(レキシカルスコープ)
粗結合を目指すのならJava方式がいいし、
お気楽を目指すのならJavaScriptの方がいい。
ところで初心者はそういう「短く書ける方がイイ」みたいなことをよく言うが、
君が本当に一万行のコードを書ける奴なら、それは意味無いと分かるだろ。
そしてそれをここで聞くのも意味無い。
だって俺の腕前なんて未知数だし、ここでは無駄に吠える初心者も多いし。
一般論としては、Pythonはキャズムを越えているっぽいから、
学んでも無駄にはならないと思うよ。
562デフォルトの名無しさん
2017/04/18(火) 21:41:20.30ID:xAHUlHha ああすまん、質問はPythonではなくて、JavaScriptを学ぶべきか?だったか。
俺が勘違いしてた。
これは俺は正確には答えられないね。
俺は他言語使えるわけではないし。
そもそも道具なんだから、今困ってなければ学ぶ必要はないだろ。
新しいプログラミングを学びたいというのなら、
結局どの言語も似たり寄ったりの方向に進化しつつあるし、
とりあえず「進化している言語」を一つ追跡しておけば問題はないだろ。
一番速いのは多分Rubyだろうし、この点ではPythonは遅いほうだよ。
同様に、この点でJavaScriptを選択する意味はない。
逆に、今使うというのなら、グダグダ言う意味もないだろ。
Web環境ではJavaScript以外の選択肢はないんだし。
俺が勘違いしてた。
これは俺は正確には答えられないね。
俺は他言語使えるわけではないし。
そもそも道具なんだから、今困ってなければ学ぶ必要はないだろ。
新しいプログラミングを学びたいというのなら、
結局どの言語も似たり寄ったりの方向に進化しつつあるし、
とりあえず「進化している言語」を一つ追跡しておけば問題はないだろ。
一番速いのは多分Rubyだろうし、この点ではPythonは遅いほうだよ。
同様に、この点でJavaScriptを選択する意味はない。
逆に、今使うというのなら、グダグダ言う意味もないだろ。
Web環境ではJavaScript以外の選択肢はないんだし。
563デフォルトの名無しさん
2017/04/18(火) 22:41:32.37ID:ibb6Zkrz564デフォルトの名無しさん
2017/04/18(火) 22:42:21.03ID:ibb6Zkrz565デフォルトの名無しさん
2017/04/18(火) 22:43:49.88ID:ibb6Zkrz566デフォルトの名無しさん
2017/04/18(火) 22:45:23.23ID:ibb6Zkrz >>561
> ところで初心者はそういう「短く書ける方がイイ」みたいなことをよく言うが、
> 君が本当に一万行のコードを書ける奴なら、それは意味無いと分かるだろ。
え? なんで?
同じ一万行なら、短く書ける方がより多くの機能を実装できるから
やっぱり短いほうが良いじゃんw
> ところで初心者はそういう「短く書ける方がイイ」みたいなことをよく言うが、
> 君が本当に一万行のコードを書ける奴なら、それは意味無いと分かるだろ。
え? なんで?
同じ一万行なら、短く書ける方がより多くの機能を実装できるから
やっぱり短いほうが良いじゃんw
567デフォルトの名無しさん
2017/04/18(火) 23:07:56.67ID:wXuuRzeA568デフォルトの名無しさん
2017/04/18(火) 23:13:36.64ID:ibb6Zkrz >>567
それはインターフェースが余計なものであるという前提で成り立つものだ
インターフェースは余計なものではなくプログラマの意図を
コードというコンピュータにも理解できる言語で記述した価値がある情報だ
それはインターフェースが余計なものであるという前提で成り立つものだ
インターフェースは余計なものではなくプログラマの意図を
コードというコンピュータにも理解できる言語で記述した価値がある情報だ
569デフォルトの名無しさん
2017/04/18(火) 23:14:34.77ID:wXuuRzeA570デフォルトの名無しさん
2017/04/18(火) 23:18:22.51ID:ibb6Zkrz >>569
正確に言うと「少ないステップ数」というべきだな。
インターフェースは実行されないのでステップには含まれない。
他にも型宣言とかimportとかコメントとか空行とか
{ だけの行とか、そういうのもステップには含まれない。
正確に言うと「少ないステップ数」というべきだな。
インターフェースは実行されないのでステップには含まれない。
他にも型宣言とかimportとかコメントとか空行とか
{ だけの行とか、そういうのもステップには含まれない。
571デフォルトの名無しさん
2017/04/18(火) 23:19:45.52ID:wXuuRzeA572デフォルトの名無しさん
2017/04/18(火) 23:20:25.75ID:ibb6Zkrz573デフォルトの名無しさん
2017/04/18(火) 23:26:21.27ID:wXuuRzeA >>572
ググってみたけどステップ数からインタフェースを抜くなんて計算方法はまったく出てこない
オレオレじゃないなら、どこか有名なサイトに計算方法が載ってるはずだからさ、ポインタでいいから
示してください
ググってみたけどステップ数からインタフェースを抜くなんて計算方法はまったく出てこない
オレオレじゃないなら、どこか有名なサイトに計算方法が載ってるはずだからさ、ポインタでいいから
示してください
574デフォルトの名無しさん
2017/04/18(火) 23:39:00.32ID:ibb6Zkrz >>573
ステップ数は単に英語の意味の通り、ステップ(一歩)という意味しかないよ。
ステップイン、ステップアウト、ステップ実行できる単位と考えればいい。
ステップできないのに、ステップ数に数えるとか意味不明だろう
ソースコードの行数はLOCという。
ステップ数は単に英語の意味の通り、ステップ(一歩)という意味しかないよ。
ステップイン、ステップアウト、ステップ実行できる単位と考えればいい。
ステップできないのに、ステップ数に数えるとか意味不明だろう
ソースコードの行数はLOCという。
575デフォルトの名無しさん
2017/04/18(火) 23:42:54.39ID:wXuuRzeA >>574
たとえばさ、↓のページにあるように、ステップ数というと一般的にはプログラム規模を測るための
指標なんだよね
http://e-words.jp/w/%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E6%95%B0.html
LOCからコメントや空行を抜いたり、中括弧だけの行を抜いたりと言語によって流儀はあるみたいだけど、
お前の言う流儀がどこにも載ってないんだよ
どこに載ってるか教えてくれないか?
たとえばさ、↓のページにあるように、ステップ数というと一般的にはプログラム規模を測るための
指標なんだよね
http://e-words.jp/w/%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E6%95%B0.html
LOCからコメントや空行を抜いたり、中括弧だけの行を抜いたりと言語によって流儀はあるみたいだけど、
お前の言う流儀がどこにも載ってないんだよ
どこに載ってるか教えてくれないか?
576デフォルトの名無しさん
2017/04/18(火) 23:49:43.26ID:ibb6Zkrz577デフォルトの名無しさん
2017/04/18(火) 23:54:29.25ID:wXuuRzeA578デフォルトの名無しさん
2017/04/19(水) 00:50:35.21ID:4qCNxF1h 動的型付言語の苦手な奴が多過ぎ
ダックタイピングでいいじゃん
スタティックおじさん馬鹿にしていながら、自分もスタティックおじさんみたいになってる
ダックタイピングでいいじゃん
スタティックおじさん馬鹿にしていながら、自分もスタティックおじさんみたいになってる
579デフォルトの名無しさん
2017/04/19(水) 01:04:19.78ID:PWf0mJDu ダックタイプおじさんに言われても…
580デフォルトの名無しさん
2017/04/19(水) 02:34:11.69ID:kxK9Wtdr ここでダックタイプ嫌ってる奴って、ダックタイプを静的言語でやるとしたらジェネリクスとか言い出す奴だもんな
「自分の分からない技術は使えない技術だ」なんて完全にスタティックおじさんだよな
「自分の分からない技術は使えない技術だ」なんて完全にスタティックおじさんだよな
581デフォルトの名無しさん
2017/04/19(水) 02:40:43.54ID:0X+KA4Ry 静的型の言語の補完の快適さは動的型言語には得られないものなんだよなぁ
インターフェイスとかをいちいち記述する手間を含めてもその最適さのほうが上回る感はある
インターフェイスとかをいちいち記述する手間を含めてもその最適さのほうが上回る感はある
582デフォルトの名無しさん
2017/04/19(水) 02:43:32.85ID:kxK9Wtdr583デフォルトの名無しさん
2017/04/19(水) 06:39:45.49ID:SqPK9IfP 自分だけで完結してる話ならそれでいいんだけど仕事だとそれじゃ駄目なんだよね
以前rubyのプロジェクトで酷い目にあったのでもう動的型付け言語は嫌だわ
以前rubyのプロジェクトで酷い目にあったのでもう動的型付け言語は嫌だわ
584デフォルトの名無しさん
2017/04/19(水) 07:15:17.15ID:5nJ22bL2 インターフェースがある言語を使ってる人のほうが、よっぽどダックタイピング的思考をしてるだろう
rubyなんて脳内で型付けしてて、ダックタイピングのことなんて考えてない
教祖だけが狂ってる
rubyなんて脳内で型付けしてて、ダックタイピングのことなんて考えてない
教祖だけが狂ってる
585デフォルトの名無しさん
2017/04/19(水) 07:48:20.66ID:+KnDkITW >>562 意見ありがとう。552です。
>Web環境ではJavaScript以外の選択肢はないんだし。
同意します。Google が TypeScript を標準言語にしているのも、その意味なんでしょう。
俺としては型推論の働く、濃密なコード記述可能で、良質のライブラリが揃っている言語が欲しい。
Haskell が型推論で一番強力だと思うが、キャズムを超えられないと思う。Python のよ
うな、全世界の知性による良質なライブラリの膨大な蓄積は期待できない。
>Web環境ではJavaScript以外の選択肢はないんだし。
同意します。Google が TypeScript を標準言語にしているのも、その意味なんでしょう。
俺としては型推論の働く、濃密なコード記述可能で、良質のライブラリが揃っている言語が欲しい。
Haskell が型推論で一番強力だと思うが、キャズムを超えられないと思う。Python のよ
うな、全世界の知性による良質なライブラリの膨大な蓄積は期待できない。
586デフォルトの名無しさん
2017/04/19(水) 07:53:38.11ID:+KnDkITW >> 562 ところで初心者はそういう「短く書ける方がイイ」みたいなことをよく言うが、
君が本当に一万行のコードを書ける奴なら、それは意味無いと分かるだろ。
この主張への反例として、下の URL にある RSA 暗号の実験コードを示す
http://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
君が本当に一万行のコードを書ける奴なら、それは意味無いと分かるだろ。
この主張への反例として、下の URL にある RSA 暗号の実験コードを示す
http://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.55ID:+KnDkITW ## 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
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.26ID:+KnDkITW 以上の計算ができれば、RSA 暗号を実装できる程度に理解したと言えます。
ここでの one-liners は、プログラムというより、コンピュータ計算可能な数式です。
これ以上に単純化できない程に濃密です。しかも独立しています。それ以前の文脈に影
響されません。試行錯誤のごみの山から御宝式だけを copy and paste で取り出せま
す。
これらの one-liners は短いけれど、可読性も備えています。
Python は、これだけの濃密なコード記述を可能にする良質なライブラリ群を備えています。
これらのコードを書くのに、一々 big num class を持ち出したりしてられません。RSA
暗号数学だけで、手一杯なのですから。
これらの one-liners で、int 型宣言する意味もないでしょう。
ここでの one-liners は、プログラムというより、コンピュータ計算可能な数式です。
これ以上に単純化できない程に濃密です。しかも独立しています。それ以前の文脈に影
響されません。試行錯誤のごみの山から御宝式だけを copy and paste で取り出せま
す。
これらの one-liners は短いけれど、可読性も備えています。
Python は、これだけの濃密なコード記述を可能にする良質なライブラリ群を備えています。
これらのコードを書くのに、一々 big num class を持ち出したりしてられません。RSA
暗号数学だけで、手一杯なのですから。
これらの one-liners で、int 型宣言する意味もないでしょう。
589デフォルトの名無しさん
2017/04/19(水) 07:55:01.02ID:+KnDkITW >>562 一番速いのは多分Rubyだろうし、この点ではPythonは遅いほうだよ。
老婆心ながら言っておきます。こんな理由で Ruby に学習コストを書けるのは止めるへき。
スピードが欲しいならば C 言語で実装して繋げばよい。SciPy は、実装にそうして実装
され、data science 分野で使われ、ライブラリが蓄積され続けている。
Ruby が書き安い言語なことには同意する。しかし勝手な互換性の放棄により、良質なラ
イブラリの作者たちを離反させすぎた。Python community とは差が付きすぎた。
Python は Ruby と比較して読みやすい。俺にとって読んで楽しめるコードは Python だ
けだ。C 言語はマクロの解析が必要になるなど、コードを読むことは苦痛のほうが勝
る。Ruby は C言語よりは読みやすいが、楽しめるほどではない。
今更 Ruby に向かうのは無謀すぎる。
老婆心ながら言っておきます。こんな理由で Ruby に学習コストを書けるのは止めるへき。
スピードが欲しいならば C 言語で実装して繋げばよい。SciPy は、実装にそうして実装
され、data science 分野で使われ、ライブラリが蓄積され続けている。
Ruby が書き安い言語なことには同意する。しかし勝手な互換性の放棄により、良質なラ
イブラリの作者たちを離反させすぎた。Python community とは差が付きすぎた。
Python は Ruby と比較して読みやすい。俺にとって読んで楽しめるコードは Python だ
けだ。C 言語はマクロの解析が必要になるなど、コードを読むことは苦痛のほうが勝
る。Ruby は C言語よりは読みやすいが、楽しめるほどではない。
今更 Ruby に向かうのは無謀すぎる。
590デフォルトの名無しさん
2017/04/19(水) 08:42:44.89ID:NBkpFfOk どうせエンジンのお粗末なRubyのことだから
型が付いてもそのまま実行するよりWASM経由でした方が早いとなるだろうな。
型が付いてもそのまま実行するよりWASM経由でした方が早いとなるだろうな。
591デフォルトの名無しさん
2017/04/19(水) 09:30:10.92ID:kxK9Wtdr592デフォルトの名無しさん
2017/04/19(水) 09:59:52.76ID:96WIxtun Julia!
593デフォルトの名無しさん
2017/04/19(水) 11:52:47.70ID:oz+MR2rn594デフォルトの名無しさん
2017/04/19(水) 12:15:11.91ID:kxK9Wtdr595デフォルトの名無しさん
2017/04/19(水) 12:54:41.04ID:D6qUbZcQ >>560
亀レスで申し訳ないが、それはお前の認識が誤っているからだ
あるライブラリAの、とあるクラスが、別のライブラリBて定義されている
インターフェースを実装していた場合
ライブラリAはライブラリBでも使われることを前提としている
というかライブラリBの上にライブラリAを築いている
あたりまえだろ?だから当然想定されている
で、ダックタイピングの場合は
メソッド名が一致しているからひょっとして使えるんじゃね?
ってレベルだろ
そんなの偶然の一致かもしれないし、使えるかどうかわからん
元の開発者はそんなこと想定してないかもしれない
微妙に動作が違うかもしれない
亀レスで申し訳ないが、それはお前の認識が誤っているからだ
あるライブラリAの、とあるクラスが、別のライブラリBて定義されている
インターフェースを実装していた場合
ライブラリAはライブラリBでも使われることを前提としている
というかライブラリBの上にライブラリAを築いている
あたりまえだろ?だから当然想定されている
で、ダックタイピングの場合は
メソッド名が一致しているからひょっとして使えるんじゃね?
ってレベルだろ
そんなの偶然の一致かもしれないし、使えるかどうかわからん
元の開発者はそんなこと想定してないかもしれない
微妙に動作が違うかもしれない
596デフォルトの名無しさん
2017/04/19(水) 13:04:46.14ID:D6qUbZcQ >元の開発者はそんなこと想定してないかもしれない
と書いたが、逆に使われることを想定しているんなら
インターフェース方式でも問題ないんだよ
ライブラリBのインターフェースを実装すればよいだけだからな
使われることを想定しているんなら、これは当然できる状態にある
そして明確になる
と書いたが、逆に使われることを想定しているんなら
インターフェース方式でも問題ないんだよ
ライブラリBのインターフェースを実装すればよいだけだからな
使われることを想定しているんなら、これは当然できる状態にある
そして明確になる
597デフォルトの名無しさん
2017/04/19(水) 13:17:55.77ID:cvkGewar598デフォルトの名無しさん
2017/04/19(水) 13:29:02.70ID:D6qUbZcQ 言いえて妙な話で、あるクラスがあちこちで使われることを想定しているなら
クラスの開発者は、想定する全ての使われ方について、全てのンターフェースを
実装すればよい
逆に、実装されてないインターフェースに関しては
「想定してませんよ、考慮してませんよ、ノーサポート」って事なんだよ
その場合は、当たり前だが自分でラッパークラスを書けばよい
ちょっとしたデータ変換や仕様のすり合わせもそこですればよい
元のクラスが想定してないんだから、これは当然なんだよ
ダックタイピングは全てのクラスが自分の管理下にあって
仕様を完ぺきに把握しているのなら可能かもしれんが、という話
クラスの開発者は、想定する全ての使われ方について、全てのンターフェースを
実装すればよい
逆に、実装されてないインターフェースに関しては
「想定してませんよ、考慮してませんよ、ノーサポート」って事なんだよ
その場合は、当たり前だが自分でラッパークラスを書けばよい
ちょっとしたデータ変換や仕様のすり合わせもそこですればよい
元のクラスが想定してないんだから、これは当然なんだよ
ダックタイピングは全てのクラスが自分の管理下にあって
仕様を完ぺきに把握しているのなら可能かもしれんが、という話
599デフォルトの名無しさん
2017/04/19(水) 13:31:56.22ID:D6qUbZcQ ラッパークラスと書いたが、アダプタクラスと言ったほうが正しいかもしれん
600デフォルトの名無しさん
2017/04/19(水) 20:03:28.85ID:NUjiGrCs そこそこ有名なライブラリAがあって、多数のライブラリC,D,E,...の中でそれを使っていたとする
それよりパフォーマンスが良くてメソッドに互換性があるライブラリBを作って
CDEを変更することなくAからBに置き換えてもらいたくなったとき
インターフェースのある言語だとライブラリAのインターフェースをBでも使わないと不可能じゃないの?
もしAがGPLならBもGPLにしなきゃダメってこと?
それよりパフォーマンスが良くてメソッドに互換性があるライブラリBを作って
CDEを変更することなくAからBに置き換えてもらいたくなったとき
インターフェースのある言語だとライブラリAのインターフェースをBでも使わないと不可能じゃないの?
もしAがGPLならBもGPLにしなきゃダメってこと?
601デフォルトの名無しさん
2017/04/19(水) 20:58:25.69ID:kxK9Wtdr インタフェースをきっちり設計するのは面倒だからな
これをそうじゃないという人間はある程度の規模のアプリケーションを組んだことがないんじゃないか
と言いたくなるぐらいにね
これをそうじゃないという人間はある程度の規模のアプリケーションを組んだことがないんじゃないか
と言いたくなるぐらいにね
602デフォルトの名無しさん
2017/04/19(水) 21:03:25.43ID:BnOg8tXa >インターフェースのある言語だとライブラリAのインターフェースをBでも使わないと不可能じゃないの?
>
>もしAがGPLならBもGPLにしなきゃダメってこと?
それはインターフェース有り無し関係ない。FSFの主張だと、GPLなライブラリと組み合わせて使う前提のプログラムは、
全てGPLでなくてはならないことになってる。
実際、ダックタイピングな Python でも、 pyqt が GPL か商用ライセンスしかなくて敬遠されてたので、
pyside という LGPL なライブラリが作られた。
>
>もしAがGPLならBもGPLにしなきゃダメってこと?
それはインターフェース有り無し関係ない。FSFの主張だと、GPLなライブラリと組み合わせて使う前提のプログラムは、
全てGPLでなくてはならないことになってる。
実際、ダックタイピングな Python でも、 pyqt が GPL か商用ライセンスしかなくて敬遠されてたので、
pyside という LGPL なライブラリが作られた。
603デフォルトの名無しさん
2017/04/19(水) 21:09:00.28ID:Fw9wzeAw >>600
それは条件が公平ではない
動的言語がその差し替えを比較的容易に行えるのはソースコードを直に実行しており
依存関係がシンボリックだからにすぎない
CDEのソースが手元にあるなら、静的言語でもCDEをソースからリコンパイルすればいいだけの話
静的言語のリンクの仕方には色々あるが、同様にシンボリックなリンク方式を使っているなら
ソースが無くてもBにもAと全く同じインターフェースを定義すれば当然動く
それは条件が公平ではない
動的言語がその差し替えを比較的容易に行えるのはソースコードを直に実行しており
依存関係がシンボリックだからにすぎない
CDEのソースが手元にあるなら、静的言語でもCDEをソースからリコンパイルすればいいだけの話
静的言語のリンクの仕方には色々あるが、同様にシンボリックなリンク方式を使っているなら
ソースが無くてもBにもAと全く同じインターフェースを定義すれば当然動く
604デフォルトの名無しさん
2017/04/19(水) 21:14:45.53ID:kxK9Wtdr605デフォルトの名無しさん
2017/04/19(水) 21:17:54.76ID:Fw9wzeAw606デフォルトの名無しさん
2017/04/19(水) 21:19:20.91ID:kxK9Wtdr >>605
ライブラリは基本的にコンパイル済の状態で提供されるよね?
ライブラリは基本的にコンパイル済の状態で提供されるよね?
607デフォルトの名無しさん
2017/04/19(水) 21:23:40.52ID:Fw9wzeAw608デフォルトの名無しさん
2017/04/19(水) 21:33:07.54ID:kxK9Wtdr >>607
ライブラリCDEをソースからコンパイルという時点でおかしよね?
ライブラリCDEをソースからコンパイルという時点でおかしよね?
609デフォルトの名無しさん
2017/04/19(水) 21:44:06.41ID:Fw9wzeAw610デフォルトの名無しさん
2017/04/19(水) 21:46:39.68ID:kxK9Wtdr >>609
ライブラリはコンパイル済が配布されるのだから差し替えは難しいよね?
ライブラリはコンパイル済が配布されるのだから差し替えは難しいよね?
611デフォルトの名無しさん
2017/04/20(木) 00:06:00.75ID:goLojMqI >>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を今使うのならいいけど、将来性は無いと思うよ。
俺に言わせると、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デフォルトの名無しさん
2017/04/20(木) 00:14:11.81ID:goLojMqI613デフォルトの名無しさん
2017/04/20(木) 00:19:35.76ID:Xe6G3IeW >>611
気持ち良く長文書いてるとこ悪いけど、cythonって知ってる?
気持ち良く長文書いてるとこ悪いけど、cythonって知ってる?
614デフォルトの名無しさん
2017/04/20(木) 01:36:16.89ID:1ly+xIep >>606
> ライブラリは基本的にコンパイル済の状態で提供されるよね?
ソースコードが提供されているならば
ソースコードを修正してコンパイルすれば良い。
そのライブラリがコンパイル済みの状態で提供されているかどうかは関係ない
> ライブラリは基本的にコンパイル済の状態で提供されるよね?
ソースコードが提供されているならば
ソースコードを修正してコンパイルすれば良い。
そのライブラリがコンパイル済みの状態で提供されているかどうかは関係ない
615デフォルトの名無しさん
2017/04/20(木) 01:37:22.80ID:1ly+xIep616デフォルトの名無しさん
2017/04/20(木) 01:59:48.10ID:JQpZsY1s >>610
多くのコンパイル型言語では故意に差し替え可能に設計しておかない限りインターフェイスの有無に関わらずライブラリのコンパイルが必要
たとえばC#でインターフェイスをつかわず、全部dynamicで呼び出してる場合でもDLL差し替えではだめ
多くのコンパイル型言語では故意に差し替え可能に設計しておかない限りインターフェイスの有無に関わらずライブラリのコンパイルが必要
たとえばC#でインターフェイスをつかわず、全部dynamicで呼び出してる場合でもDLL差し替えではだめ
617デフォルトの名無しさん
2017/04/20(木) 02:37:35.64ID:jSNxj+lA >>611
>>>589
>俺に言わせると、Pythonは学ぶ価値がないよ。
>
>新しいプログラミングパラダイムを試したいなら、Rubyだろ。
>「新しい事が至高」なコミュニティだから、今後もトップを走り続けるだろう。
>逆に言えば、互換性なんて気にしている言語では、どうやってもRubyには追いつけない。
釣り? 少なくともRubyは無いわ。昔はともかく、この2-3年は停滞しているように見える。
すまんが、最近Rubyに入った、新しいプログラミングパラダイムを教えてくれ。
# ちなみに貴方が腐している Python は、async/await とか、外部チェッカを利用した Gradual Typing とか Null safety とか入りました。
>>>589
>俺に言わせると、Pythonは学ぶ価値がないよ。
>
>新しいプログラミングパラダイムを試したいなら、Rubyだろ。
>「新しい事が至高」なコミュニティだから、今後もトップを走り続けるだろう。
>逆に言えば、互換性なんて気にしている言語では、どうやってもRubyには追いつけない。
釣り? 少なくともRubyは無いわ。昔はともかく、この2-3年は停滞しているように見える。
すまんが、最近Rubyに入った、新しいプログラミングパラダイムを教えてくれ。
# ちなみに貴方が腐している Python は、async/await とか、外部チェッカを利用した Gradual Typing とか Null safety とか入りました。
618デフォルトの名無しさん
2017/04/20(木) 03:11:22.47ID:1ly+xIep >>617
それのどこが新しいプログラミングパラダイスなの?
それのどこが新しいプログラミングパラダイスなの?
619デフォルトの名無しさん
2017/04/20(木) 03:33:31.73ID:59/j45Wf620デフォルトの名無しさん
2017/04/20(木) 04:55:25.22ID:DtO/sAcV >>611
ラムダ式に式しか書けないのは関数型言語好きがコミュニティに増えたからって気がする。
Pythonそのものも関数プログラミングをサポートしつつあって、同じ機能にオブジェクト指向版と関数プログラミング版と二つあるのがチラホラ。。。
そういう意味じゃすっごく気持ち悪い。
でも、使う側から見れば使えるライブラリ多いPython。
面白いかどうかじゃなくて、使えるかどうかね。
Rubyで使える数値計算やディープラーニングのライブラリ紹介してくれ。
宣伝してやるから。
ラムダ式に式しか書けないのは関数型言語好きがコミュニティに増えたからって気がする。
Pythonそのものも関数プログラミングをサポートしつつあって、同じ機能にオブジェクト指向版と関数プログラミング版と二つあるのがチラホラ。。。
そういう意味じゃすっごく気持ち悪い。
でも、使う側から見れば使えるライブラリ多いPython。
面白いかどうかじゃなくて、使えるかどうかね。
Rubyで使える数値計算やディープラーニングのライブラリ紹介してくれ。
宣伝してやるから。
621デフォルトの名無しさん
2017/04/20(木) 06:12:51.42ID:wBOWWhZ0 >>611
少なくともNumPyが使われ続ける限りPythonを学ぶ価値はあるだろ
Pythonから学ぶことは反面教師的なこと以外はほとんどないけどさ
しかしRubyには使いどころはおろか、学びも皆無
自称言語オタク(失笑)が聞きかじった話題の他言語の顰みに倣ったり
その失敗を含む二番煎じを、ろくすっぽ論文も読まない取り巻きとひたすら繰り返しているだけ
Rubyを見て新しいとかいってる奴は元ネタを知らないだけのただの哀れな信者
少なくともNumPyが使われ続ける限りPythonを学ぶ価値はあるだろ
Pythonから学ぶことは反面教師的なこと以外はほとんどないけどさ
しかしRubyには使いどころはおろか、学びも皆無
自称言語オタク(失笑)が聞きかじった話題の他言語の顰みに倣ったり
その失敗を含む二番煎じを、ろくすっぽ論文も読まない取り巻きとひたすら繰り返しているだけ
Rubyを見て新しいとかいってる奴は元ネタを知らないだけのただの哀れな信者
622デフォルトの名無しさん
2017/04/20(木) 06:28:09.48ID:q9J6ThwX アニメで小林さんがpython使ってたから本読んだ。仕事でciscoのopenpk使う事になった。小林さん、ありがとう。
623デフォルトの名無しさん
2017/04/20(木) 07:19:41.16ID:GRmYdHAz624デフォルトの名無しさん
2017/04/20(木) 07:34:57.19ID:Oql1W8zX625デフォルトの名無しさん
2017/04/20(木) 07:37:46.72ID:GRmYdHAz >>624
ソースを入手してビルド、なんて依存性解決は面倒だしバージョンアップに追随するのも
面倒だしやってられないと思うんだが…
みんなやってられないと思ったからmavenやsbtみたいなのが作られたわけだし
ソースを入手してビルド、なんて依存性解決は面倒だしバージョンアップに追随するのも
面倒だしやってられないと思うんだが…
みんなやってられないと思ったからmavenやsbtみたいなのが作られたわけだし
626デフォルトの名無しさん
2017/04/20(木) 07:59:30.03ID:Oql1W8zX >>625
Java系なら同じパッケージ名で同じ名称のクラスやインターフェースを定義しておけば
バイナリをmavenやsbtを用いて差し替えることは可能だよ
そんな”迷惑行為”は大抵のエコシステムでは認められないし、
パッケージ名の勝手な使用によって法的な問題が発生する可能性すらある
Java系なら同じパッケージ名で同じ名称のクラスやインターフェースを定義しておけば
バイナリをmavenやsbtを用いて差し替えることは可能だよ
そんな”迷惑行為”は大抵のエコシステムでは認められないし、
パッケージ名の勝手な使用によって法的な問題が発生する可能性すらある
627デフォルトの名無しさん
2017/04/20(木) 08:09:16.54ID:jSNxj+lA >>>617
>それのどこが新しいプログラミングパラダイスなの?
コルーチンが普通の関数っぽく書けるようになったり、動的型言語に部分的に静的型を導入したりNullチェックを強制できるのは新しくないと。
ま、Pythonが史上初めてではないが、他言語で評判が良い部分を取り込んだ感じだな。
じゃ、貴方が思う、最近Rubyに入った新しいプログラミングパラダイムを教えてよ。
Rubyは「トップを走り続ける」のだから、1つ2つは簡単に紹介できるでしょ。
>それのどこが新しいプログラミングパラダイスなの?
コルーチンが普通の関数っぽく書けるようになったり、動的型言語に部分的に静的型を導入したりNullチェックを強制できるのは新しくないと。
ま、Pythonが史上初めてではないが、他言語で評判が良い部分を取り込んだ感じだな。
じゃ、貴方が思う、最近Rubyに入った新しいプログラミングパラダイムを教えてよ。
Rubyは「トップを走り続ける」のだから、1つ2つは簡単に紹介できるでしょ。
628デフォルトの名無しさん
2017/04/20(木) 08:42:44.18ID:KuJQA9vc ここ最近このスレは全く書き込みが無くて閑古鳥が鳴いていて
人いるの?って感じだったのに
俺の書き込みを発端として昔のように熱いバトルが始まって本当にうれしい
書き込んでよかったよ
もう絶滅したかと思ってたが、まだ一定数、動的型信者がいるようで
あぶり出し大成功ってところか
危険人物なので隔離スレにいつまでも隔離されててください
今の猫も杓子も静的型の時代に、まだ回心できてないってことは
これから先もずっと無理だろうし
人いるの?って感じだったのに
俺の書き込みを発端として昔のように熱いバトルが始まって本当にうれしい
書き込んでよかったよ
もう絶滅したかと思ってたが、まだ一定数、動的型信者がいるようで
あぶり出し大成功ってところか
危険人物なので隔離スレにいつまでも隔離されててください
今の猫も杓子も静的型の時代に、まだ回心できてないってことは
これから先もずっと無理だろうし
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★2 [BFU★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★2 [BFU★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 [ぐれ★]
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 [Hitzeschleier★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 【維新】吉村知事「中国人観光客だけに頼るビジネスモデル変えていかないといけない」「高市総理の発言は撤回する必要はない」 [Hitzeschleier★]
- 中国高官と話す外務省局長の表情、やばい ★2 [175344491]
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
- 【悲報】日本人「日本が中国と戦争になったら世界中の国が応援してくれるぞ!」 [616817505]
- 小野田経済安保相「すぐに経済的威圧するところへの依存はリスク」😲 [861717324]
- 日本政府「高市総理の発言は問題ないと伝え、中国総領事のSNS投稿は問題があると中国に伝えました😊」 [931948549]
- 【ほんこん悲報】吉本新喜劇の中国公演が中止に! [523957489]
