【JavaScript】スクリプト バトルロワイヤル55【php,py,pl,rb】 at TECH
[2ch|▼Menu]
[前50を表示]
500:デフォルトの名無しさん
17/04/16 10:22:58.46 XyqfpBE9.net
という完全に誤った理解が蔓延しているというお話し

501:デフォルトの名無しさん
17/04/16 10:23:01.86 AmA5ei6y.net
>>495のURL先は皆読んでくれたかわからんが
掛け違えたボタン感が本当にすごくて
最初の一歩を間違えるとこんなにも面倒なんことになるのかって感じ
北朝鮮はどこまで進化しても北朝鮮ってことなんだろうよ
うすら寒い理想の未来を語るところもよく似ている
過去に生きて、未来を語って、現在に生きてないって感じ
まさに掛け違えたボタンで、「現実」のボタンをスキップして飛ばしている
胡散臭い宗教とかもそんな感じだよね
たぶん「現実」に不満がある人を集めるのが目的だから
過去の技術を使って、未来を語ってみせて、騙くらかすって事なんだろうな
これがまさしく、走り続けないと終わる、の意味だろう
でももう流石に誰も騙されないよね
麻疹みたいなものだから、学生さんは一度はそういう目に合うかもだが

502:デフォルトの名無しさん
17/04/16 10:25:51.21 AmA5ei6y.net
もしくは、ボタンを掛け違えていることに本人だけが気付いていなくて
誰も追いついてこないな〜なんて思っていたら
実はみんなもっと遠いところで高度なことをやっていた、ってパターンか
誰も追いついてこないんじゃなくて、フォロワーが居ないってことなんだけどね

503:デフォルトの名無しさん
17/04/16 11:27:58.86 cCOM2/u0.net
ダックタイピングというのは、(人間が)ガーガーと
アヒルのモノマネをすれば、アヒルとみなして扱おう
という発想から生まれたもの

504:デフォルトの名無しさん
17/04/16 15:33:13.73 aIkdKg/w.net
>>501
ダックタイピングのことを何も分かってない人間がいくら言おうと説得力はゼロだよ

505:デフォルトの名無しさん
17/04/16 16:41:45.39 AmA5ei6y.net
残念ながら>>499が正解なんだな〜
俺も、もし何かの都合で自分で言語を作る必要性に駆られたら
そうするだろうね、実装が圧倒的に楽だから
つまり、自分で言語を作って、自分で使うんなら
現代においてもなお、動的型はありうるんだよ、これが
言語を作る手間と時間もコストとして換算して
トータルで労力を最小にしたいから
どこでバランスするかの問題
もしくは自分はもっぱら言語を作るのがメインで、使うのは他のやつって場合も
自分だけが楽できれば良いという身勝手な発想に行き着いたのなら、ありえる
自分は静的型言語でその恩恵を十分に得ながら言語開発して
他人は自分の作った言語で苦しむっていう
人として最悪な感じにはなるけど、まぁ最終的には良心の問題
金もうけのためだったり仕事って事なら仕方ないけど
人生の目標にしたら只の嫌がらせだな
それはそれとして、既存の言語を使うだけなら
わざわざ手抜きな言語をあえて選択する意味はないよ

506:デフォルトの名無しさん
17/04/16 16:43:12.44 aIkdKg/w.net
>>505
ダックタイピングをジェネリクスで代替できると思ってる人間の論理に説得力はない

507:デフォルトの名無しさん
17/04/16 16:45:25.04 cCOM2/u0.net
ダックタイピングはジェネリクスではなく
インターフェースで代替するもの

508:デフォルトの名無しさん
17/04/16 16:49:53.76 aIkdKg/w.net
>>507
その通りだね
そしてインタフェースをいちいち付けてまわるのは非常に面倒臭いこと
自分で作るクラスならまだ何とかなるが、使ってるライブラリのクラスだとそうもいかない

509:デフォルトの名無しさん
17/04/16 16:54:54.02 cCOM2/u0.net
> そしてインタフェースをいちいち付けてまわるのは非常に面倒臭いこと
めんどくさい? ダックタイピングではインターフェースがないから
代わりにコメントで同じ情報を書かないといけないじゃん。
インターフェースの情報(コメント含む)を書かないで
それが仕様かどうか分かってもらえると思ってんの?

510:デフォルトの名無しさん
17/04/16 17:00:32.58 aIkdKg/w.net
>>509
コメントなら書くか書かないかは開発者が選べる
それを「低レベルコード生産要素」と見るか「プログラマの自由を保証」と見るかは
ポジションによる
Matzなんかは後者の立場なんだろうし、日本のSIのような人月計算でレベルはおかまいなしのような
プロジェクトに関わってるような人から見れば前者になるんだろうね

511:デフォルトの名無しさん
17/04/16 17:01:19.16 AmA5ei6y.net
「静的な」ダックタイピングはジェネリックとオーバーロードで実現可能
という風に書いたのにこれが理解できないのではどうしようもない
きっと静的と動的の違いも理解できてないんだろう
静的なダックタイピングはタイプセーフだし
本当にうまい落としどころだなぁって思う
何もかもが静的型に都合がよいように回ってて、ちょっと怖いね
とはいっても俺も何でもかんでも型で解決しようってのはあまり好きじゃなくて
一つのアイデアが上手くいくと一気に乗っかっていく感じは何か過剰というか
ただ、そうはいってもダメなものがダメなことには変わりないんだけどね

512:デフォルトの名無しさん
17/04/16 17:01:47.01 cCOM2/u0.net
>>510
> コメントなら書くか書かないかは開発者が選べる
言い換えると、
コメント書きたくない、仕様書を書きたくない。
コード読まないとわからない。
というコードを書きたいってことか?
ひどいな。だから可読性が下がるんだよ。

513:デフォルトの名無しさん
17/04/16 17:03:04.51 aIkdKg/w.net
>>511
ぜんぜん違う
ほんとダックタイピング分かってないんだな
ID:cCOM2/u0 なんかはその辺分かってるから議論になるけど、お前にゃ無理だよ

514:デフォルトの名無しさん
17/04/16 17:07:46.06 aIkdKg/w.net
>>512
Matz の有名な言葉に「ソースがドキュメントだ.バグも完全に記述されている」ってのがあるからねぇ
冗談半分だとしても、思想としてそういう方向なんだろう
本気半分の言い分としては、ソース読んだだけでちんぷんかんぷんなコードはその時点で怪しいと思え
って感じだろうか

515:デフォルトの名無しさん
17/04/16 17:08:31.24 cCOM2/u0.net
インターフェースは契約プログラミングの一種でもあるんだよ。
インターフェースを定義することは事前条件を定義することにあたる。
事前条件を記述することで、予め(プログラムを実行しなくても)バグがあることがわかる。
実行パスは無限と言ってもいいほどあるから、実行しなければ
わからない問題を検出するのは時間がかかる。
だけど、条件を満たすかどうかを調べるために、
実行そのものが必要なければ、短時間で問題が検出できる。
コンピュータが理解できる方法で、しかも実行せずにわかることと
コメントという人間しか読めない方法で書くのとでは全然意味が違う

516:デフォルトの名無しさん
17/04/16 17:09:43.45 AmA5ei6y.net
静的型において動的な多態にインターフェースを使うのは当たり前
動的なことは危険な香りがするから、インターフェースで制約する
これも丁度よいぐらいの落としどころなんだよ
静的な多態はジェネリックとオーバーロードでダックタイピングも可
動的な多態はインターフェースを通して安全に
どちらの場合もタイプセーフ
よくできているよね〜

517:デフォルトの名無しさん
17/04/16 17:10:37.85 aIkdKg/w.net
>>515
そういう方向でバグを減らすというのもひとつの方向性としてはいいんじゃない?
単なる思想の違いというだけで、そういうのが嫌いな人が作った言語だって別に悪いわけじゃない

518:デフォルトの名無しさん
17/04/16 17:12:57.07 aIkdKg/w.net
>>516
だからお前はダックタイピング分かってないんだからもういいよ
staticおじさんのように、分かってない機能は全部けなす方向性の人間と議論になんかならんからな
まずお前にすすめるのはリーベルGの「高慢と偏見」を読めってことだ

519:デフォルトの名無しさん
17/04/16 17:13:47.39 cCOM2/u0.net
>>517
> そういう方向でバグを減らすというのも
そういう方向で"も" な
バグを減らすテクニックはいくつもある。
静的言語なら、そのテクニックが増えるわけだ
動的言語でできるバグを減らすテクニックは、静的言語でも使える。
さらにプラスして、静的言語ではコンパイル時に実行することなく
バグを減らすことが可能になる。
これは明らかにバグを減らすために追加された機能といえるだろう

520:デフォルトの名無しさん
17/04/16 17:15:16.10 aIkdKg/w.net
>>519
そのために生産性やプログラマの自由が減るというトレードオフがあるけどね
そのトレードオフのどっちを取るかはポジションで決めればいいだけの話

521:デフォルトの名無しさん
17/04/16 17:16:58.16 AmA5ei6y.net
ちなみにダックタイピングは、ダックのように振舞うものは、ダックとして扱える
って言ってるだけで
静的に解決するか、動的に解決するかは、別の問題であり
当然静的なダックタイピングは、ある
>ダック・タイピング
>URLリンク(ja.wikipedia.org)
>C++のtemplateはダック・タイピングの静的版である
残念だったなwww
それともWikiを書き直すか?

522:デフォルトの名無しさん
17/04/16 17:18:10.05 aIkdKg/w.net
>>521
俺はテンプレートに関しては何も言ってないが?
ジェネリクスはちゃうやろって言ってるんだが

523:デフォルトの名無しさん
17/04/16 17:20:02.41 cCOM2/u0.net
>>520
> そのために生産性やプログラマの自由が減るというトレードオフがあるけどね
減ってないよ。逆に高くなっている。
っていうか、あんた書くときのことしか考えてないでしょ?w
プログラミングっていうのは書くよりも読むことのほうが遥かに多い。
だから、可 "読" 性 が重視される。
読みやすいコードは生産性を大きく上げる

524:デフォルトの名無しさん
17/04/16 17:27:15.74 0ImhO/qF.net
>>521
× C++のtemplateはダック・タイピングの静的版である
○ C++における型消去はダック・タイピングの静的版である
明らかに間違ってるから直しとけよ

525:デフォルトの名無しさん
17/04/16 17:29:05.78 aIkdKg/w.net
>>523
それは違うな
コメントなら引数を「与えられる方」だけ書けばいいが、インタフェースは引数を「与える方」にもそれを強制する
そしてこれは結構面倒な作業だ
もちろん、引数として変なものを与えてしまう可能性も出てしまうが、それと上記の面倒さをどっちを取るかは
それぞれの人が決めればいい

526:デフォルトの名無しさん
17/04/16 18:04:26.80 AmA5ei6y.net
現代に生き残りし貴重なサンプルだとは思うが
「何が面倒か」までは書かないんだよな
結局、何でもかんでも渡すわけにはいかないのは同じこと
どのみち仕様を満たさなきゃならん
ダックならダックの仕様を満たさなきゃならん
ダックの仕様を満たすように書かなきゃならないのと
ダックのインターフェースを満たすように書かなきゃならないことは
実質問題大差ない
大差ないか、むしろインターフェスがあった方が何をすべきかよくわかるぐらいだ
仮にこのケースでほんの少しだけ動的型が便利だったと仮定しても
静的型の、型安全性、リファクタリングのしやすさ、タイポなどの些細なミスの検出
型が書いてあることによるドキュメンテーション、最適化のききやすさ
あと宣言があることによるスコープの細かさ
これらすべてを投げ捨てるほどの差はない
動的型のメリットといえばもはや動的なメタプログラミング的な何かぐらいしかないが
そんな黒魔術はどうでもよいし、はっきり言ってgoto文と変わらない

527:デフォルトの名無しさん
17/04/16 18:10:54.82 AmA5ei6y.net
こういうと彼はきっとこう思う
静的型は互いに別々の出どころのライブラリ間で
インターフェースに互換性がないから困る、と
しかし、そんなことは動的型でも同じこと

528:デフォルトの名無しさん
17/04/16 18:14:22.59 cCOM2/u0.net
>>525
クラスだけ与えられて、
さてこのクラスはどこで使えるでしょう?
みたいなクイズして楽しいか?
このクラスが持っているインターフェースは何かって
ちゃんと書いていれば、そのインターフェースを使える場所も
明確にわかるだろ

529:デフォルトの名無しさん
17/04/16 18:15:43.11 cCOM2/u0.net
>>526
> 「何が面倒か」までは書かないんだよな
それだよなw
ほんと何が面倒なのか。

530:デフォルトの名無しさん
17/04/16 18:20:36.92 aIkdKg/w.net
>>528
アプリケーションの全クラスが自分の管理下にあればそれも可能かもしれんな
でも実際は様々なライブラリを使うことは避けられないし、各ライブラリのクラスに後から自分が欲しい
インタフェースを追加することはできないことがほとんど
C#やScalaなんかはそういうこともできるみたいだが、今度は可読性が落ちるのでここぞというときの
秘密兵器扱いだな

531:デフォルトの名無しさん
17/04/16 18:26:41.26 cCOM2/u0.net
>>530
各ライブラリのクラスに後から自分が欲しいインターフェースを追加して、
正しく動く保証はあるのですか?
そもそもそんなことする必要ありませんよね?

532:デフォルトの名無しさん
17/04/16 18:29:04.31 cCOM2/u0.net
手段が目的になってしまってるんだよなw
何がしたいのかは言わない。
ライブラリのクラスに後からインターフェースを追加することが
目的なんだって臆面もなく言ってしまうw

533:デフォルトの名無しさん
17/04/16 18:34:11.12 aIkdKg/w.net
>>531
あるよ
たとえばあるライブラリがAというクラスのオブジェクトを返したとする
これを別のライブラリか自分で作ったクラスのの引数として使いたいけど、その引数はBという
インタフェースを要求する
Aというクラスは字面の上ではBというインタフェースを満たしているのだが、Bというインタフェースを
implement しているわけではない
さてどうしよう
Bというインタフェースを持つクラスを自分で定義してコピーする?こんな余計なことしなきゃいけない
のは生産性の低下以外の何物でもないわな
これは一例であって他にも同様の例はいくらでもある

534:デフォルトの名無しさん
17/04/16 18:43:08.06 cCOM2/u0.net
>>533
なんでAというクラスが、Aとは全く関係のなく作られたBというインターフェースを
たまたま運良く満たすなんて自体が起きるんだよw
ありえないだろ。
それよりか引数が違うのに、同じ名前のメソッドを定義してしまっていた
どうしようって思うほうが可能性高いわw

535:デフォルトの名無しさん
17/04/16 18:46:33.36 cCOM2/u0.net
Aというクラスは字面の上ではBというインタフェースを満たしているのだが、
Bのバージョンアップでインタフェースが変わってしまった。
だけど、Aというクラスがたまたま古いBのインターフェースと
一致していたという前提をどこにも書いていなかったので、
動かなくなる原因の判明に時間がかかった。
そのためにコメントをしっかり書くようにした。
A は B interface を implements しているよと

536:デフォルトの名無しさん
17/04/16 18:50:50.79 aIkdKg/w.net
>>534
ありえるんだよ、これが
しかもしょっちゅう
(俺は静的型言語でも開発してるからよく出くわすよ)
たとえば、Serializable なんか典型じゃないかな
そのまま Serialize したいのになんで Serializable インタフェース持ってねぇんだよ!
みたいなのはほんといくらでもあるよ

537:デフォルトの名無しさん
17/04/16 18:53:05.94 cCOM2/u0.net
このようにダックタイピングを使うとその場しのぎで直ぐに対応できるように思えるけど
長い目で見れば、可読性の低下を招き、メンテナンス性、生産性を下げることになってしまう。
書いたら終わり、メンテナンスが不要な書捨てのプログラムぐらいにしか
使わない方がいい。
そして、書捨てのプログラムをよく書くのはインフラ系が多い。
インフラ系で必要とされるのはオブジェクト指向も必要ない
数行程度のスクリプト。シェルスクリプトよりは書きやすいぐらいの
理由しか持ち合わせてない
アプリの開発には長期間メンテナンスされるので可読性が重要

538:デフォルトの名無しさん
17/04/16 18:56:36.72 cCOM2/u0.net
>>536
> そのまま Serialize したいのになんで Serializable インタフェース持ってねぇんだよ!
そのクラスがSerializeする機能を実装してないからだろ?

539:デフォルトの名無しさん
17/04/16 19:04:01.20 cCOM2/u0.net
URLリンク(rubytips86.hatenablog.com)
Rubyでこのシリアライズとデシリアライズを担うライブラリがMarshalモジュールだ。
注意点としてMarshal.dumpでは、無名のクラス・モジュールのオブジェクト、
システムがオブジェクトの状態を保持するIOなど、
Procなどいくつかのインスタンス、特異メソッドを定義したオブジェクトはシリアライズできない。

540:デフォルトの名無しさん
17/04/16 22:32:15.20 AmA5ei6y.net
第一だよ
全然関係ないライブラリ同士でたまたま字面の上で
メソッド名が一致しているクラスがあるっていう
偶然の一致があったとしても
その動作振る舞いまでもが完全に一致していて
動作的にコンパチブルかどうかは分からないよ
想定してないんだからさ
おおよそ慣例というか習慣というか、その言語ではふつうそうするって
何らかの決まり事みたいなものがあるのなら問題ないかもしれないが
そういう場合は言語側やファウンダメンタリーなライブラリが
インターフェースを定義してくれているから、それ使えばよいわけで
やっぱり関係ないんだよ
そういうメソッド名と振る舞いの両方が偶然にも一致
っていう奇跡偶然に頼るってのが
まさにおまえ自身が>>530で言ってる
>アプリケーションの全クラスが自分の管理下にあればそれも可能かもしれんな
そのものなんだよ、まったくのブーメラン

541:デフォルトの名無しさん
17/04/16 22:54:49.91 aIkdKg/w.net
>>540
ダックタイピングのことを知らないお前が言っても説得力はないよ

542:デフォルトの名無しさん
17/04/16 23:27:02.64 f4lMQoiy.net
言い争いの起点がどこにあるのかわからん

543:デフォルトの名無しさん
17/04/16 23:30:25.86 aIkdKg/w.net
>>542
>>496 >>498

544:デフォルトの名無しさん
17/04/17 00:16:09.41 W0pN1+cl.net
要するに、後付で色々したい場合はダックタイピングの方が楽なんだよ。
ただし、全てを見通せるのなら最初からインタフェースにしておいた方が美しいのも事実。
現実的にはJavaScriptはUI用で酷く書き換えを強いられる為、
ダックタイピングの方が向いている。(と俺は感じている)
逆に、仕様がかっちり決まっている場合は型ありでも特に苦労しないし、
数値計算等のバグ出ししにくい状況では型があった方が安心ではある。
(期待値が作りにくい、見た目でバグと分からない)
ただ、UIならバグは見て分かるし、ダックタイピングでも問題ない。
動的言語はパターンを当てないとバグ検出出来ないけど、
UIなら「変更が依頼された」=「パターン持ってる」ってことだし。

545:デフォルトの名無しさん
17/04/17 01:28:08.77 8mjeDRwA.net
真面目にダックタイピングをやろうとする行為は、型やインタフェースを定義するのと違いがない
だからrubyでダックタイピングを考えてプログラミングしてる人なんているわけない

546:デフォルトの名無しさん
17/04/17 03:12:15.72 LB/3uUQe.net
>>544
あの、精神論でごまかさないでください?
何一つ、ダックタイピングのほうが良いという理由を
言っていませんよ

547:デフォルトの名無しさん
17/04/17 07:17:22.30 W0pN1+cl.net
>>546
良い悪いを議論する事じゃないよ。
結局は、どう思うか、どう感じるか、でしかないから。
型には型の得失があるし、ダックタイピングにしてもそう。
選べる状況なら好きな方選べばいいし、無理ならグダグダ言っても意味無いだろ。
利点を感じないのなら、これまでそういう状況に遭遇したことがないか、
或いはそもそもそっち派ではないか。
いずれにしても使わないってことで問題はない。
利点説明おねだり君なんてウザイだけだから止めろ。
URLリンク(yohshiy.blog.fc2.com)
未確認飛行の人も同じようなことを言っていたと思ったけど見つからなかったから上記で。
結論出したいのならこの辺だと思うよ。
>>545
ガチでダックタイピングの利点を享受しようとすると、
型に留まらず世界が統一されていないといけないので、実は型よりも難しい。
そしてJavaScriptもそれに対応出来ていない。理由は標準化している奴らが馬鹿だから。
sizeとlengthが混在してるでしょ。
あれ、どっちでもいいけどどっちかに統一されてないといけない。
だから真面目にダックタイピングをやっている奴なんていない、というのは俺も思う。

548:デフォルトの名無しさん
17/04/17 09:32:26.96 LB/3uUQe.net
> そしてインタフェースをいちいち付けてまわるのは非常に面倒臭いこと
めんどくさい? ダックタイピングではインターフェースがないから
代わりにコメントで同じ情報を書かないといけないじゃん。
インターフェースの情報(コメント含む)を書かないで
それが仕様かどうか分かってもらえると思ってんの?

549:デフォルトの名無しさん
17/04/17 09:43:33.93 oCHN+Sd+.net
>>540
同じインターフェースを実装してても、それは引数と戻り値の型が一致するだけで
動作振る舞いがコンパチブルかどうかは保証してくれないけどな
JavaやC#みたいなショボい言語では

550:デフォルトの名無しさん
17/04/17 21:03:29.03 LB/3uUQe.net
>>549
interfaceは"インターフェースを"保証してくれるもので
インターフェース以外は別の話なのは当たり前だと思うが?
「お前型を保証してくれるんだろ?
バグがないことまで保証してくれよ」
っていうのと同じぐらい無茶なこと
普通保証の対象しか、保証しませんってw

551:デフォルトの名無しさん
17/04/17 22:17:56.90 BH39VCMj.net
>>549
ショボくない言語ではどういう感じになるのでしょうか?
純粋な興味として知りたいです

552:デフォルトの名無しさん
17/04/17 23:27:50.92 LB/3uUQe.net
しょぼくない言語なら、
動作振る舞いがコンパチブルかどうかを保証してくれるんだろう?

553:デフォルトの名無しさん
17/04/18 00:29:01.98 n/IUHgwq.net
>>544
> 要するに、後付で色々したい場合はダックタイピングの方が楽なんだよ。
メソッドや関数のオーバーロードが可能なら静的型でも変わらなくない?

554:デフォルトの名無しさん
17/04/18 01:27:12.80 xAHUlHha.net
>>553
いや、それだと全部用意しないといけなくなるでしょ。
ダックタイピングだと必要なところだけ用意すればいいし、つまみ食いも出来る。その分楽。
丁度C++のスレが同じ事を言っているけど、
スレリンク(tech板:137-番)
そりゃ全てのオブジェクトが isScrollable や isSerealizable を持っているのが美しいだろうさ。
しかしそれは通常は余計に手間が増えるだろ。
インタフェースが肥大化するか、基底クラスが肥大化するかで。
だったらJavaScriptみたいに、
var obj_serialized = (obj.serialize)? obj.serialize() : null;
とか、
SomeObj.prototype.serialize = function(){};
とか、出来たら融通は利くでしょ。少なくとも「今」やりたいことは出来るようになる。
それが後々逆に足を引っ張ることになるかどうかは腕次第でしょ。
ただし、どっちが楽かという話であって、
出来るか出来ないかで言えば、同じだよ。同じ事を逆からアプローチしてるだけだから。
JavaScriptについて言えば、
初期状態は全ての名前のメソッドを定義してあるが、実装してない状態だと言える。
だから未実装ならundefinedが返ってくるし、実装済みなら使える。
C++とかだと、初期状態は全く定義がなくて、自分で全て追加しないといけない。
でも全てのダックタイピングを可能にしようとしたら、
型消去するなりして全てのインタフェースに対応しないといけなくなる。
これってJavaScriptの初期状態と同じでしょ。
C++のテンプレートは空回り感が酷い。
UIなんて張り切って実装しても意外に糞だったりするので、
とりあえず実装してから確認したいってのはある。
そういう時はJavaScriptみたいな、とりあえずサクサク実装出来る言語の方が向いている。

555:デフォルトの名無しさん
17/04/18 02:34:37.34 ibb6Zkrz.net
>>554
シリアライズのことしか考えてなくて、しかもシリアライズメソッドさえあれば
何でもかんでも簡単にシリアライズできるんだって思ってるみたいだけど、
まず前提として、いかなる言語も汎用的なシリアライズはなという話をしようか?
これが大前提なので、あとからシリアライズメソッドつければ、
シリアライズできて便利ーにはならないんだよ。
通常シリアライズメソッドは後から追加できないものと考えるべき。
例外的に可能なものもあるけど、あとからシリアライズメソッドを追加できるならば、
obj.serialize() ではなく、Serializer.serialize(obj) とやることで目的は達成できる。
あんたがやろうとしているのは、単にシリアライズ処理を
インスタンスメソッドにしたいと言っているだけ。

556:デフォルトの名無しさん
17/04/18 07:09:23.56 16rBXoJR.net
>>551
OCamlあたりで構造的部分型を利用した型推論とかを知っとくといいと思うよ
URLリンク(itpro.nikkeibp.co.jp)

557:デフォルトの名無しさん
17/04/18 07:25:53.47 V4ah9bya.net
>>554 C++のテンプレートは空回り感が酷い。 とりあえず実装してから確認したいってのはある。
激しく同意する。
An one-liner で書けるようなものでは、型の恩恵などない。Local,global の峻別さえ無意味だ。そのようなときは duck typing で書かねば損だ。
逆に duck typing で一万行を超えてくると、強烈に型が欲しくなる。

558:デフォルトの名無しさん
17/04/18 07:30:18.04 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:デフォルトの名無しさん
17/04/18 09:47:58.51 1155c42j.net
>>550
そんなショボいものしか保証してくれないの?
まったく安心して使えないね
動的型付けと大差ないじゃん

560:デフォルトの名無しさん
17/04/18 09:54:21.27 1155c42j.net
動作を保証しないから問題だって言った(>>540)直後に
動作を保証しなくて何が悪いと返せる(>>550)って凄いねw
そのチンパンジー並みの記憶力は賞賛に値するよ

561:デフォルトの名無しさん
17/04/18 21:12:55.65 xAHUlHha.net
>>558
俺はPythonは知らないのでJavaScriptとの比較は出来ない。
ただPythonはクロージャに難ありなので今後も使う気はない。
改行が強制されるのも気に入らない。
JavaScriptは書いてて気持ちがいいんだよ。
理由は簡単で、全て具だから。
型等の動作には関係ない物がないから、動作に集中出来る。
なるほどMatzが目指したのはこれだったのか、というのは分かった。
だから俺が次にやるとしたらRubyだね。
今のところ、俺は型自体はは要らないという結論だ。
名前通りの型しか付けないので、見りゃ分かる。
ただ、現実として、実行前にタイプミスを見つけてくれないから困っている。
ダックタイプや動的に使う場所なんて限られているのだから、
そういう場所に対してワーニング出してくれるだけでいいんだが。
そのためのリントを探してはみたものの、
JavaScriptのリンターはそんな方向では全くなかった。
あと、C++が糞なのはクラスは全て独立で親クラスを掴めないことだ。
だから細かくクラスを階層化出来ない。というか、やると余計に手間が増える。
ここら辺はJavaでは改善されていて、明示的に掴めるし、
JavaScriptではデフォで掴んでる。(レキシカルスコープ)
粗結合を目指すのならJava方式がいいし、
お気楽を目指すのならJavaScriptの方がいい。
ところで初心者はそういう「短く書ける方がイイ」みたいなことをよく言うが、
君が本当に一万行のコードを書ける奴なら、それは意味無いと分かるだろ。
そしてそれをここで聞くのも意味無い。
だって俺の腕前なんて未知数だし、ここでは無駄に吠える初心者も多いし。
一般論としては、Pythonはキャズムを越えているっぽいから、
学んでも無駄にはならないと思うよ。

562:デフォルトの名無しさん
17/04/18 21:41:20.30 xAHUlHha.net
ああすまん、質問はPythonではなくて、JavaScriptを学ぶべきか?だったか。
俺が勘違いしてた。
これは俺は正確には答えられないね。
俺は他言語使えるわけではないし。
そもそも道具なんだから、今困ってなければ学ぶ必要はないだろ。
新しいプログラミングを学びたいというのなら、
結局どの言語も似たり寄ったりの方向に進化しつつあるし、
とりあえず「進化している言語」を一つ追跡しておけば問題はないだろ。
一番速いのは多分Rubyだろうし、この点ではPythonは遅いほうだよ。
同様に、この点でJavaScriptを選択する意味はない。
逆に、今使うというのなら、グダグダ言う意味もないだろ。
Web環境ではJavaScript以外の選択肢はないんだし。

563:デフォルトの名無しさん
17/04/18 22:41:32.37 ibb6Zkrz.net
>>560
> 動作を保証しないから問題だって言った(>>540)直後に
> 動作を保証しなくて何が悪いと返せる(>>550)って凄いねw
なんの動作?
ねぇねぇ、なんの動作?
わざとぼやかしてるでしょwww

564:デフォルトの名無しさん
17/04/18 22:42:21.03 ibb6Zkrz.net
あとそれから>>540は俺じゃないからねw
IDすら見えない?
チンパンジーになみの理解力だった?w

565:デフォルトの名無しさん
17/04/18 22:43:49.88 ibb6Zkrz.net
>>561
> JavaScriptのリンターはそんな方向では全くなかった。
TypeScriptがお前が望むものだよ
型を導入したJavaScriptだ。
いまあちこちで普及してる。

566:デフォルトの名無しさん
17/04/18 22:45:23.23 ibb6Zkrz.net
>>561
> ところで初心者はそういう「短く書ける方がイイ」みたいなことをよく言うが、
> 君が本当に一万行のコードを書ける奴なら、それは意味無いと分かるだろ。
え? なんで?
同じ一万行なら、短く書ける方がより多くの機能を実装できるから
やっぱり短いほうが良いじゃんw

567:デフォルトの名無しさん
17/04/18 23:07:56.67 wXuuRzeA.net
>>566
つまり型は余計だということだね
インタフェースとか余計なことを書かなきゃいけないから

568:デフォルトの名無しさん
17/04/18 23:13:36.64 ibb6Zkrz.net
>>567
それはインターフェースが余計なものであるという前提で成り立つものだ
インターフェースは余計なものではなくプログラマの意図を
コードというコンピュータにも理解できる言語で記述した価値がある情報だ

569:デフォルトの名無しさん
17/04/18 23:14:34.77 wXuuRzeA.net
>>568
短く書ける方がいいんでしょ?
ダブスタいくないよ

570:デフォルトの名無しさん
17/04/18 23:18:22.51 ibb6Zkrz.net
>>569
正確に言うと「少ないステップ数」というべきだな。
インターフェースは実行されないのでステップには含まれない。
他にも型宣言とかimportとかコメントとか空行とか
{ だけの行とか、そういうのもステップには含まれない。

571:デフォルトの名無しさん
17/04/18 23:19:45.52 wXuuRzeA.net
>>570
> インターフェースは実行されないのでステップには含まれない。
こんなオレオレ定義聞いたことありませんw

572:デフォルトの名無しさん
17/04/18 23:20:25.75 ibb6Zkrz.net
>>571
デバッガの「ステップ実行」って
使ったことないの?
インターフェースの前後でステップ実行することはない

573:デフォルトの名無しさん
17/04/18 23:26:21.27 wXuuRzeA.net
>>572
ググってみたけどステップ数からインタフェースを抜くなんて計算方法はまったく出てこない
オレオレじゃないなら、どこか有名なサイトに計算方法が載ってるはずだからさ、ポインタでいいから
示してください

574:デフォルトの名無しさん
17/04/18 23:39:00.32 ibb6Zkrz.net
>>573
ステップ数は単に英語の意味の通り、ステップ(一歩)という意味しかないよ。
ステップイン、ステップアウト、ステップ実行できる単位と考えればいい。
ステップできないのに、ステップ数に数えるとか意味不明だろう
ソースコードの行数はLOCという。

575:デフォルトの名無しさん
17/04/18 23:42:54.39 wXuuRzeA.net
>>574
たとえばさ、↓のページにあるように、ステップ数というと一般的にはプログラム規模を測るための
指標なんだよね
URLリンク(e-words.jp)
LOCからコメントや空行を抜いたり、中括弧だけの行を抜いたりと言語によって流儀はあるみたいだけど、
お前の言う流儀がどこにも載ってないんだよ
どこに載ってるか教えてくれないか?

576:デフォルトの名無しさん
17/04/18 23:49:43.26 ibb6Zkrz.net
>>575
だからステップ数は誰も正確な定義をしてないのだから
どんなものでも間違いではない。

577:デフォルトの名無しさん
17/04/18 23:54:29.25 wXuuRzeA.net
>>576
とはいえ、「インタフェースはステップ数に含まない」と断言するからには、それなりに普及してる
流儀なんでしょ?
その流儀がどこに書いてるか知りたいんだが

578:デフォルトの名無しさん
17/04/19 00:50:35.21 4qCNxF1h.net
動的型付言語の苦手な奴が多過ぎ
ダックタイピングでいいじゃん
スタティックおじさん馬鹿にしていながら、自分もスタティックおじさんみたいになってる

579:デフォルトの名無しさん
17/04/19 01:04:19.78 PWf0mJDu.net
ダックタイプおじさんに言われても…

580:デフォルトの名無しさん
17/04/19 02:34:11.69 kxK9Wtdr.net
ここでダックタイプ嫌ってる奴って、ダックタイプを静的言語でやるとしたらジェネリクスとか言い出す奴だもんな
「自分の分からない技術は使えない技術だ」なんて完全にスタティックおじさんだよな

581:デフォルトの名無しさん
17/04/19 02:40:43.54 0X+KA4Ry.net
静的型の言語の補完の快適さは動的型言語には得られないものなんだよなぁ
インターフェイスとかをいちいち記述する手間を含めてもその最適さのほうが上回る感はある

582:デフォルトの名無しさん
17/04/19 02:43:32.85 kxK9Wtdr.net
>>581
という感想を持つ人は静的言語を使えばいいし、インタフェースとかをいちいち記述するのが面倒くさい人は
動的言語を使えばいいよね
ただそれだけの話

583:デフォルトの名無しさん
17/04/19 06:39:45.49 SqPK9IfP.net
自分だけで完結してる話ならそれでいいんだけど仕事だとそれじゃ駄目なんだよね
以前rubyのプロジェクトで酷い目にあったのでもう動的型付け言語は嫌だわ

584:デフォルトの名無しさん
17/04/19 07:15:17.15 5nJ22bL2.net
インターフェースがある言語を使ってる人のほうが、よっぽどダックタイピング的思考をしてるだろう
rubyなんて脳内で型付けしてて、ダックタイピングのことなんて考えてない
教祖だけが狂ってる

585:デフォルトの名無しさん
17/04/19 07:48:20.66 +KnDkITW.net
>>562 意見ありがとう。552です。
>Web環境ではJavaScript以外の選択肢はないんだし。
同意します。Google が TypeScript を標準言語にしているのも、その意味なんでしょう。
俺としては型推論の働く、濃密なコード記述可能で、良質のライブラリが揃っている言語が欲しい。
Haskell が型推論で一番強力だと思うが、キャズムを超えられないと思う。Python のよ
うな、全世界の知性による良質なライブラリの膨大な蓄積は期待できない。

586:デフォルトの名無しさん
17/04/19 07:53:38.11 +KnDkITW.net
>> 562 ところで初心者はそういう「短く書ける方がイイ」みたいなことをよく言うが、
君が本当に一万行のコードを書ける奴なら、それは意味無いと分かるだろ。
この主張への反例として、下の URL にある RSA 暗号の実験コードを示す
URLリンク(www.math.kobe-u.ac.jp)
二つの素数 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:デフォルトの名無しさん
17/04/19 07:54:07.55 +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:デフォルトの名無しさん
17/04/19 07:54:36.26 +KnDkITW.net
以上の計算ができれば、RSA 暗号を実装できる程度に理解したと言えます。
ここでの one-liners は、プログラムというより、コンピュータ計算可能な数式です。
これ以上に単純化できない程に濃密です。しかも独立しています。それ以前の文脈に影
響されません。試行錯誤のごみの山から御宝式だけを copy and paste で取り出せま
す。
これらの one-liners は短いけれど、可読性も備えています。
Python は、これだけの濃密なコード記述を可能にする良質なライブラリ群を備えています。
これらのコードを書くのに、一々 big num class を持ち出したりしてられません。RSA
暗号数学だけで、手一杯なのですから。
これらの one-liners で、int 型宣言する意味もないでしょう。

589:デフォルトの名無しさん
17/04/19 07:55:01.02 +KnDkITW.net
>>562 一番速いのは多分Rubyだろうし、この点ではPythonは遅いほうだよ。
老婆心ながら言っておきます。こんな理由で Ruby に学習コストを書けるのは止めるへき。
スピードが欲しいならば C 言語で実装して繋げばよい。SciPy は、実装にそうして実装
され、data science 分野で使われ、ライブラリが蓄積され続けている。
Ruby が書き安い言語なことには同意する。しかし勝手な互換性の放棄により、良質なラ
イブラリの作者たちを離反させすぎた。Python community とは差が付きすぎた。
Python は Ruby と比較して読みやすい。俺にとって読んで楽しめるコードは Python だ
けだ。C 言語はマクロの解析が必要になるなど、コードを読むことは苦痛のほうが勝
る。Ruby は C言語よりは読みやすいが、楽しめるほどではない。
今更 Ruby に向かうのは無謀すぎる。

590:デフォルトの名無しさん
17/04/19 08:42:44.89 NBkpFfOk.net
どうせエンジンのお粗末なRubyのことだから
型が付いてもそのまま実行するよりWASM経由でした方が早いとなるだろうな。

591:デフォルトの名無しさん
17/04/19 09:30:10.92 kxK9Wtdr.net
>>589
思いっきり文章の読み方を間違ってるよ
>>562 でいうスピードは変化のスピードだよ
君がPython好きなのは分かるが、他の言語をけなそうとする余り文章を読み違えるのは
いただけないな

592:デフォルトの名無しさん
17/04/19 09:59:52.76 96WIxtun.net
Julia!

593:デフォルトの名無しさん
17/04/19 11:52:47.70 oz+MR2rn.net
>>591
「このプログラミング言語は速い」って文脈で「進化の速度」のことを言っている奴は初めて見たな
普通は実行速度だよな? プログラミング基礎でO記法とか学ぶもの

594:デフォルトの名無しさん
17/04/19 12:15:11.91 kxK9Wtdr.net
>>593
>>562 で直前で
> とりあえず「進化している言語」を一つ追跡しておけば問題はないだろ。
と書かれているので、ここでの速いは進化の速度だよ
そうでないとJavaScriptを除外している部分と整合性が取れない
(JavaScriptは実行速度はかなり速いしね)

595:デフォルトの名無しさん
17/04/19 12:54:41.04 D6qUbZcQ.net
>>560
亀レスで申し訳ないが、それはお前の認識が誤っているからだ
あるライブラリAの、とあるクラスが、別のライブラリBて定義されている
インターフェースを実装していた場合
ライブラリAはライブラリBでも使われることを前提としている
というかライブラリBの上にライブラリAを築いている
あたりまえだろ?だから当然想定されている
で、ダックタイピングの場合は
メソッド名が一致しているからひょっとして使えるんじゃね?
ってレベルだろ
そんなの偶然の一致かもしれないし、使えるかどうかわからん
元の開発者はそんなこと想定してないかもしれない
微妙に動作が違うかもしれない

596:デフォルトの名無しさん
17/04/19 13:04:46.14 D6qUbZcQ.net
>元の開発者はそんなこと想定してないかもしれない
と書いたが、逆に使われることを想定しているんなら
インターフェース方式でも問題ないんだよ
ライブラリBのインターフェースを実装すればよいだけだからな
使われることを想定しているんなら、これは当然できる状態にある
そして明確になる

597:デフォルトの名無しさん
17/04/19 13:17:55.77 cvkGewar.net
>>596
どういう主張だっけ?
作者が意図しない使い方はすべきでない、つまりダックタイピングは悪
ってこと?

598:デフォルトの名無しさん
17/04/19 13:29:02.70 D6qUbZcQ.net
言いえて妙な話で、あるクラスがあちこちで使われることを想定しているなら
クラスの開発者は、想定する全ての使われ方について、全てのンターフェースを
実装すればよい
逆に、実装されてないインターフェースに関しては
「想定してませんよ、考慮してませんよ、ノーサポート」って事なんだよ
その場合は、当たり前だが自分でラッパークラスを書けばよい
ちょっとしたデータ変換や仕様のすり合わせもそこですればよい
元のクラスが想定してないんだから、これは当然なんだよ
ダックタイピングは全てのクラスが自分の管理下にあって
仕様を完ぺきに把握しているのなら可能かもしれんが、という話

599:デフォルトの名無しさん
17/04/19 13:31:56.22 D6qUbZcQ.net
ラッパークラスと書いたが、アダプタクラスと言ったほうが正しいかもしれん

600:デフォルトの名無しさん
17/04/19 20:03:28.85 NUjiGrCs.net
そこそこ有名なライブラリAがあって、多数のライブラリC,D,E,...の中でそれを使っていたとする

それよりパフォーマンスが良くてメソッドに互換性があるライブラリBを作って
CDEを変更することなくAからBに置き換えてもらいたくなったとき

インターフェースのある言語だとライブラリAのインターフェースをBでも使わないと不可能じゃないの?

もしAがGPLならBもGPLにしなきゃダメってこと?

601:デフォルトの名無しさん
17/04/19 20:58:25.69 kxK9Wtdr.net
インタフェースをきっちり設計するのは面倒だからな
これをそうじゃないという人間はある程度の規模のアプリケーションを組んだことがないんじゃないか
と言いたくなるぐらいにね

602:デフォルトの名無しさん
17/04/19 21:03:25.43 BnOg8tXa.net
>インターフェースのある言語だとライブラリAのインターフェースをBでも使わないと不可能じゃないの?
>
>もしAがGPLならBもGPLにしなきゃダメってこと?
それはインターフェース有り無し関係ない。FSFの主張だと、GPLなライブラリと組み合わせて使う前提のプログラムは、
全てGPLでなくてはならないことになってる。

実際、ダックタイピングな Python でも、 pyqt が GPL か商用ライセンスしかなくて敬遠されてたので、
pyside という LGPL なライブラリが作られた。

603:デフォルトの名無しさん
17/04/19 21:09:00.28 Fw9wzeAw.net
>>600
それは条件が公平ではない
動的言語がその差し替えを比較的容易に行えるのはソースコードを直に実行しており
依存関係がシンボリックだからにすぎない
CDEのソースが手元にあるなら、静的言語でもCDEをソースからリコンパイルすればいいだけの話
静的言語のリンクの仕方には色々あるが、同様にシンボリックなリンク方式を使っているなら
ソースが無くてもBにもAと全く同じインターフェースを定義すれば当然動く

604:デフォルトの名無しさん
17/04/19 21:14:45.53 kxK9Wtdr.net
>>603
> CDEのソースが手元にあるなら、静的言語でもCDEをソースからリコンパイルすればいいだけの話
さすがにライブラリ使用者にそこまで求めることはできないよね…

605:デフォルトの名無しさん
17/04/19 21:17:54.76 Fw9wzeAw.net
>>604
だからそれはインターフェースの有無ではなくコンパイルの有無の問題だよね
言ってる意味わかる?

606:デフォルトの名無しさん
17/04/19 21:19:20.91 kxK9Wtdr.net
>>605
ライブラリは基本的にコンパイル済の状態で提供されるよね?

607:デフォルトの名無しさん
17/04/19 21:23:40.52 Fw9wzeAw.net
>>606
だからインターフェースは関係ないと言ってるだけなんだけど
頭大丈夫?

608:デフォルトの名無しさん
17/04/19 21:33:07.54 kxK9Wtdr.net
>>607
ライブラリCDEをソースからコンパイルという時点でおかしよね?

609:デフォルトの名無しさん
17/04/19 21:44:06.41 Fw9wzeAw.net
>>608
そうだね
で、それがインターフェースとどう関係していると思うの?
一般論としては動的言語の方が比較的容易であることは>>603の冒頭で認めたうえで
それはインターフェースではなくコンパイル(の習慣)の有無の問題であるので
>>600の「インターフェースがあるから差し替えが難しい」は誤りだというのが俺の意見なんだけど
ここまで説明しないと理解できない?

610:デフォルトの名無しさん
17/04/19 21:46:39.68 kxK9Wtdr.net
>>609
ライブラリはコンパイル済が配布されるのだから差し替えは難しいよね?

611:デフォルトの名無しさん
17/04/20 00:06:00.75 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:デフォルトの名無しさん
17/04/20 00:14:11.81 goLojMqI.net
>>593,594
俺が言っていたのは「進化の速度」だよ。
というか、そんなに分かりにくい言い方だとも思わないけど。
ただ、本当に>>558が出来る言語が素晴らしいと思っているのなら、
まずは言語は何でも良いからガンガン書いてみて、
それをきっちり保守してみることだね。
そうすれば、そんな点は全く意味がないと分かるだろう。

613:デフォルトの名無しさん
17/04/20 00:19:35.76 Xe6G3IeW.net
>>611
気持ち良く長文書いてるとこ悪いけど、cythonって知ってる?


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

535日前に更新/278 KB
担当:undef