動的言語で大規模開発
■ このスレッドは過去ログ倉庫に格納されています
1uy
2012/07/24(火) 09:10:42.04 たててみた
509デフォルトの名無しさん
2014/11/29(土) 15:24:39.97ID:HSRgXQQV >>506
無理だよ。
例えばMyClassにhogeというメソッドがあって、YourClassには無いとする。
これをfoo(MyClass()) と foo(YourClass())に渡した所でエラーにならない。
fooの中でhogeを呼び出しているから、YourClassを渡している所が間違いだ!と
思いきや、
動的にYourClassにhogeメソッドを追加するかもしれないから
エラーとは言い切れない。
つまりエラーと出る箇所はすべて、エラーではないかもしれない。
無理だよ。
例えばMyClassにhogeというメソッドがあって、YourClassには無いとする。
これをfoo(MyClass()) と foo(YourClass())に渡した所でエラーにならない。
fooの中でhogeを呼び出しているから、YourClassを渡している所が間違いだ!と
思いきや、
動的にYourClassにhogeメソッドを追加するかもしれないから
エラーとは言い切れない。
つまりエラーと出る箇所はすべて、エラーではないかもしれない。
510デフォルトの名無しさん
2014/11/29(土) 15:26:57.07ID:HSRgXQQV511デフォルトの名無しさん
2014/11/29(土) 15:37:19.95ID:TZOpdCpR512デフォルトの名無しさん
2014/11/29(土) 15:44:49.77ID:TZOpdCpR 動的にメソッドを追加するケースは少ない => 補完や型検査は動的言語でも有効
動的にメソッドを追加するケースが多い => 動的言語って凄く便利だね
動的にメソッドを追加するケースが多い => 動的言語って凄く便利だね
513デフォルトの名無しさん
2014/11/29(土) 15:49:50.99ID:HSRgXQQV >>511
> 動的言語の話なら、動的にメソッド追加されるケースは多くないからワーニングを出してもOKでしょ
俺がいいたいのはそれだよ。動的にメソッド追加されるケースは多くないのに
そのために多くのメリットを捨てるだけの意味が動的型付け言語にあるのかってこと。
> 動的言語の話なら、動的にメソッド追加されるケースは多くないからワーニングを出してもOKでしょ
俺がいいたいのはそれだよ。動的にメソッド追加されるケースは多くないのに
そのために多くのメリットを捨てるだけの意味が動的型付け言語にあるのかってこと。
514デフォルトの名無しさん
2014/11/29(土) 15:58:27.80ID:SO1yCwH9 >>497
>・タイプ数の省略
つまりタイプ数を省略するために
オブジェクトが持つメソッド数が僅かしかないような
ゴミみたいなライブラリを使わされるのはいやだなあ
>・うろ覚え(引数の順番程度)でヘルプを引くことの省略
補完以外にもいろいろな手段があるが?
>・ヘルプを開く場合でもその手間の省略
補完以外にもいろいろな手段があるが?
>・コードのミスを実行せずに知ることが出来る
実行すればわかることを、いちいち型として書いた上に
コードに余計な制約をつけるなんて愚の骨頂だろw
>・リファクタリング時に自動で安全にできることが多くなる。
くだらない。リファクタリングが始まったのは動的言語からだし、
リファクタリングをIDEの機能に統合したのも動的言語から。
で、補完を使うことで、可能なリファクタリングが増えるなんて初耳なんだが?
やはり静的脳で動的言語を見て「あれが欠けてる」「これが欠けてる」と言っているだけだねw
まずは自分の視野の狭さをなんとかしたら?
>・タイプ数の省略
つまりタイプ数を省略するために
オブジェクトが持つメソッド数が僅かしかないような
ゴミみたいなライブラリを使わされるのはいやだなあ
>・うろ覚え(引数の順番程度)でヘルプを引くことの省略
補完以外にもいろいろな手段があるが?
>・ヘルプを開く場合でもその手間の省略
補完以外にもいろいろな手段があるが?
>・コードのミスを実行せずに知ることが出来る
実行すればわかることを、いちいち型として書いた上に
コードに余計な制約をつけるなんて愚の骨頂だろw
>・リファクタリング時に自動で安全にできることが多くなる。
くだらない。リファクタリングが始まったのは動的言語からだし、
リファクタリングをIDEの機能に統合したのも動的言語から。
で、補完を使うことで、可能なリファクタリングが増えるなんて初耳なんだが?
やはり静的脳で動的言語を見て「あれが欠けてる」「これが欠けてる」と言っているだけだねw
まずは自分の視野の狭さをなんとかしたら?
515デフォルトの名無しさん
2014/11/29(土) 16:02:07.42ID:SO1yCwH9 補完君の要約
「ぼくがジャバでプログラムを書くのと同じやり方ができない動的言語なんて使えない」
「ぼくがジャバでプログラムを書くのと同じやり方ができない動的言語なんて使えない」
516デフォルトの名無しさん
2014/11/29(土) 16:55:08.72ID:SO1yCwH9 補完君の最大の勘違いは、
動的言語はa.と入力して出てくるメソッド名を絞り込めない
と思い込んでいること。
実際には、動的言語ではa.と入力して出てくる膨大なメソッド名の
どれでも正当なプログラムを構成し得る。
だからその膨大な候補リストは既に十分絞り込まれたもの。
ただ、静的脳の小さな容量では言語のポテンシャルが高すぎて
マトモに使いこなせない。かわいそうに。
動的言語はa.と入力して出てくるメソッド名を絞り込めない
と思い込んでいること。
実際には、動的言語ではa.と入力して出てくる膨大なメソッド名の
どれでも正当なプログラムを構成し得る。
だからその膨大な候補リストは既に十分絞り込まれたもの。
ただ、静的脳の小さな容量では言語のポテンシャルが高すぎて
マトモに使いこなせない。かわいそうに。
517デフォルトの名無しさん
2014/11/29(土) 20:03:41.93ID:o/hS6qzS 補完必須派に訊きたいんだけど
コンパイル時ダックタイピングともいわれる構造部分型
http://igeta.cocolog-nifty.com/blog/2008/05/subtyping.html
をサポートする静的型言語のときは、どういう候補を出すのが正解?
これがわかると、動的型言語の補完がどうあるべきかの指標になるんでは。
コンパイル時ダックタイピングともいわれる構造部分型
http://igeta.cocolog-nifty.com/blog/2008/05/subtyping.html
をサポートする静的型言語のときは、どういう候補を出すのが正解?
これがわかると、動的型言語の補完がどうあるべきかの指標になるんでは。
518デフォルトの名無しさん
2014/11/29(土) 21:05:19.38ID:7EP7sx63 >>484
オレオレOOなヤツに多いね。
自分の足りないオツムと一次ソースだけでプログラミングするやつw
個人ブログとかStackOverflowから良いコードがあればパクるのが良いねえ。
もちろん後から一次ソースで確認はする。
オレ様のゆるいオツムでは思いつかないようなクールなコードが世の中には沢山あるぞw
オレオレOOなヤツに多いね。
自分の足りないオツムと一次ソースだけでプログラミングするやつw
個人ブログとかStackOverflowから良いコードがあればパクるのが良いねえ。
もちろん後から一次ソースで確認はする。
オレ様のゆるいオツムでは思いつかないようなクールなコードが世の中には沢山あるぞw
519デフォルトの名無しさん
2014/11/29(土) 22:22:32.23ID:fN3BW3ns >>514
リファクタリングでできることは
静的型付け言語の方がとっくに多くなってるんだよ。
始まったのは動的型付けからって
単に懐古厨なだけだろ。昔はなってw
最新のリファクタリング技術がどうなっているかを知ると驚くぞ。
http://nanananande.helpfulness.jp/wp-content/uploads/sites/2/2014/06/3164/1b000175b814e923b2ddeebcadbf4154-159x300.png
それに対して動的型付けの話って
昔の話しか出てないだろ。
リファクタリングでできることは
静的型付け言語の方がとっくに多くなってるんだよ。
始まったのは動的型付けからって
単に懐古厨なだけだろ。昔はなってw
最新のリファクタリング技術がどうなっているかを知ると驚くぞ。
http://nanananande.helpfulness.jp/wp-content/uploads/sites/2/2014/06/3164/1b000175b814e923b2ddeebcadbf4154-159x300.png
それに対して動的型付けの話って
昔の話しか出てないだろ。
520デフォルトの名無しさん
2014/11/29(土) 22:25:49.85ID:fN3BW3ns >>516
> 補完君の最大の勘違いは、
> 動的言語はa.と入力して出てくるメソッド名を絞り込めない
> と思い込んでいること。
なにマッチ・ポンプしてるんだよw
静的型付け言語では最初から絞り込めるよな?
で、動的型つけ言語は500もメソッドが出る。(ドヤっ)
そんなにたくさん候補が出たら大変だろ!(ドヤっ)
って言っておいて、今度は、
動的型つけ言語でも絞り込める時もある(ドヤっ)
ですかw
うん、大変だね。静的型付け言語では最初から絞り込めるよ?
> 補完君の最大の勘違いは、
> 動的言語はa.と入力して出てくるメソッド名を絞り込めない
> と思い込んでいること。
なにマッチ・ポンプしてるんだよw
静的型付け言語では最初から絞り込めるよな?
で、動的型つけ言語は500もメソッドが出る。(ドヤっ)
そんなにたくさん候補が出たら大変だろ!(ドヤっ)
って言っておいて、今度は、
動的型つけ言語でも絞り込める時もある(ドヤっ)
ですかw
うん、大変だね。静的型付け言語では最初から絞り込めるよ?
521デフォルトの名無しさん
2014/11/29(土) 22:48:51.18ID:SuGYzpy/522デフォルトの名無しさん
2014/11/30(日) 00:47:09.72ID:mFsly3WX >>517
>これがわかると、動的型言語の補完がどうあるべきかの指標になるんでは。
なぜ構造的部分型が補完の指標になりえるのか、
その理由というか関連性が説明してごらん
単なる思いつきじゃねえの?
少なくとも >>517 のリンク先blog記事では
「構造的部分型付けは公称的部分型付けとダックタイピングの間に位置する」あるいは
「構造的部分型付けは公称的部分型付けとダックタイピングとのハイブリッドである」
と主張しているけど、こんな奇妙な話は聞いたことが無い
しかも記事のネタになったソース(学術的文献)が書かれていないし、
英語版 Wikipedia の Subtyping のページでも
duck tying との関連性に対する文章に対して "citation needed" と指摘されている
おまけに記者は構造的部分型付けをサポートする言語(OCaml)を使った事が
一度も無いと正直に告白している
このblog記事はあくまで記者が型システムを勉強する過程で書き残したノートであって、
この記事を引用して >>517 が何を言いたいのか、自分には意味不明だね
なお、動的型付け言語に(形式的な型推論を基礎とした)静的型付けを導入した概念は
Soft Typing と呼ばれている
動的型付け言語の補完を検討する指標となる可能性があるのは、
どちらかといえば Soft Typing ではないかと思うね
>これがわかると、動的型言語の補完がどうあるべきかの指標になるんでは。
なぜ構造的部分型が補完の指標になりえるのか、
その理由というか関連性が説明してごらん
単なる思いつきじゃねえの?
少なくとも >>517 のリンク先blog記事では
「構造的部分型付けは公称的部分型付けとダックタイピングの間に位置する」あるいは
「構造的部分型付けは公称的部分型付けとダックタイピングとのハイブリッドである」
と主張しているけど、こんな奇妙な話は聞いたことが無い
しかも記事のネタになったソース(学術的文献)が書かれていないし、
英語版 Wikipedia の Subtyping のページでも
duck tying との関連性に対する文章に対して "citation needed" と指摘されている
おまけに記者は構造的部分型付けをサポートする言語(OCaml)を使った事が
一度も無いと正直に告白している
このblog記事はあくまで記者が型システムを勉強する過程で書き残したノートであって、
この記事を引用して >>517 が何を言いたいのか、自分には意味不明だね
なお、動的型付け言語に(形式的な型推論を基礎とした)静的型付けを導入した概念は
Soft Typing と呼ばれている
動的型付け言語の補完を検討する指標となる可能性があるのは、
どちらかといえば Soft Typing ではないかと思うね
523522
2014/11/30(日) 00:49:19.68ID:mFsly3WX 細かいけど訂正
X: その理由というか関連性が説明してごらん
O: その理由というか関連性を説明してごらん
X: その理由というか関連性が説明してごらん
O: その理由というか関連性を説明してごらん
524デフォルトの名無しさん
2014/11/30(日) 00:51:32.07ID:uxHSis3U ガアガアとなく人間は
アヒルである。
ダックタイピング
アヒルである。
ダックタイピング
525デフォルトの名無しさん
2014/11/30(日) 01:04:21.57ID:360iudbJ >>519
昔の時点ですでに相当できてたって話もあるぞ。
http://web.archive.org/web/20090130061934/http://www.refactory.com/RefactoringBrowser/Refactorings.html
昔の時点ですでに相当できてたって話もあるぞ。
http://web.archive.org/web/20090130061934/http://www.refactory.com/RefactoringBrowser/Refactorings.html
526デフォルトの名無しさん
2014/11/30(日) 01:17:26.21ID:uxHSis3U >>525
同じぐらい"昔"である2009年の記事出していい?Eclipse+Javaの世界の話
http://www.ibm.com/developerworks/jp/opensource/library/os-eclipse-refactoring/
同じぐらい"昔"である2009年の記事出していい?Eclipse+Javaの世界の話
http://www.ibm.com/developerworks/jp/opensource/library/os-eclipse-refactoring/
527デフォルトの名無しさん
2014/11/30(日) 09:02:17.22ID:360iudbJ >>526
すまん2001年の登場当初のを貼るつもりだった。
http://web.archive.org/web/20010514165503/http://www.refactory.com/RefactoringBrowser/Refactorings.html
すまん2001年の登場当初のを貼るつもりだった。
http://web.archive.org/web/20010514165503/http://www.refactory.com/RefactoringBrowser/Refactorings.html
528デフォルトの名無しさん
2014/11/30(日) 09:53:30.32ID:uRzHHhxu 520を読むと516が言う通り補完君は動的型がまるでわかってないことが明白だ
529デフォルトの名無しさん
2014/11/30(日) 10:04:13.86ID:uRzHHhxu 補完君はキーを2,3文字入力するのをケチるために
引数がMyClassのインスタンスでなければ動かないゴミメソッドにして
どうだ静的型すごいとか言い出す初心者でしょ
引数がMyClassのインスタンスでなければ動かないゴミメソッドにして
どうだ静的型すごいとか言い出す初心者でしょ
530デフォルトの名無しさん
2014/11/30(日) 10:27:25.19ID:uRzHHhxu 静的型は自転車の補助輪
初心者を卒業したら外そうね
初心者を卒業したら外そうね
531デフォルトの名無しさん
2014/11/30(日) 10:46:49.86ID:/BRxH/wW532デフォルトの名無しさん
2014/11/30(日) 10:59:52.11ID:c9Q+Jt/4 大規模開発で人に作らせる立場だと、プログラマに静的言語という拘束具をつけた方が楽なんだよ。チームメンバの能力によって品質が変わってはいけないし。
人を指導する立場に立ってみると分かる。
人を指導する立場に立ってみると分かる。
533デフォルトの名無しさん
2014/11/30(日) 11:21:16.72ID:rR9TrKjV でも静的型を嫌がってたらGoogleとかでは働けないわけじゃん?
お前らどんな底辺企業で働いてるの?
それともニート?
お前らどんな底辺企業で働いてるの?
それともニート?
534デフォルトの名無しさん
2014/11/30(日) 12:03:38.55ID:360iudbJ >>522
structural subtyping と duck typing の対比なんていくらでも目にするだろう。
structural subtyping と duck typing の対比なんていくらでも目にするだろう。
535デフォルトの名無しさん
2014/11/30(日) 13:49:35.58ID:kUIpsKvT >>527
じゃあ同じように2001年という "大昔" の話をするね。
http://www.ibm.com/developerworks/library/eclipse/l-eclipse.html
Refactoring with Eclipse
Erich Gamma is the team lead for Java tools for Eclipse.
Gamma was one of the Gang of Four known for creating
the book Design Patterns: Elements of Reusable Object Oriented Software.
He also created JUnit with Kent Beck (see Resources).
Refactoring is recognized as another valuable practice in object oriented programming but,
until recently, only few tools had support for it. At OOPSLA 200,
Eclipse developers demonstrated the Refactoring support in Eclipse.
They stressed that refactoring should not alter a program's behavior.
じゃあ同じように2001年という "大昔" の話をするね。
http://www.ibm.com/developerworks/library/eclipse/l-eclipse.html
Refactoring with Eclipse
Erich Gamma is the team lead for Java tools for Eclipse.
Gamma was one of the Gang of Four known for creating
the book Design Patterns: Elements of Reusable Object Oriented Software.
He also created JUnit with Kent Beck (see Resources).
Refactoring is recognized as another valuable practice in object oriented programming but,
until recently, only few tools had support for it. At OOPSLA 200,
Eclipse developers demonstrated the Refactoring support in Eclipse.
They stressed that refactoring should not alter a program's behavior.
536デフォルトの名無しさん
2014/11/30(日) 13:52:53.51ID:kUIpsKvT537デフォルトの名無しさん
2014/11/30(日) 14:03:15.99ID:+4cKqP8L538デフォルトの名無しさん
2014/11/30(日) 14:13:11.05ID:kUIpsKvT 別に何も拘束されてないけどなw
単にコードが読みやすくなるだけ。
人とコンパイラにとって可読性が高いコードになる。
可読性が高いから理解しやすく、理解した情報を使って
バグが少なく開発のサポートができるようになるわけ
単にコードが読みやすくなるだけ。
人とコンパイラにとって可読性が高いコードになる。
可読性が高いから理解しやすく、理解した情報を使って
バグが少なく開発のサポートができるようになるわけ
539デフォルトの名無しさん
2014/11/30(日) 15:35:01.93ID:/BRxH/wW REPLとかで「このオブジェクトって何ができるんだっけ?」って調べるのは
動的言語では典型的な開発手法で、恩恵に預かってる開発者は多いと思うけど
静的型の補完も一緒だよ
単純にタイプ数をちょっと減らすとか、そういう話じゃない
動的言語では典型的な開発手法で、恩恵に預かってる開発者は多いと思うけど
静的型の補完も一緒だよ
単純にタイプ数をちょっと減らすとか、そういう話じゃない
540デフォルトの名無しさん
2014/11/30(日) 15:37:46.89ID:qocW+y5a 何のメソッド使うか分かってるんならヘボい補完でも十分じゃね?
541デフォルトの名無しさん
2014/11/30(日) 15:58:11.94ID:rR9TrKjV 全部把握できる程度のチープなライブラリを使って
一人で小さなプログラムを開発するなら
ヘボい補完でも十分じゃね?
一人で小さなプログラムを開発するなら
ヘボい補完でも十分じゃね?
542デフォルトの名無しさん
2014/11/30(日) 16:11:04.82ID:UnYKruMf543デフォルトの名無しさん
2014/11/30(日) 16:19:35.18ID:360iudbJ >>535
わかった。では1999年ではどうだ?
Remove Class
Rename Class
Remove Instance Variable
Rename Instance Variable
Abstract Instance Variable
Create Accessors for Instance Variable
Remove Class Variable
Rename Class Variable
Abstract Class Variable
Create Accessors for Class Variable
Remove Method
Rename Method
Add Parameter to Method
Remove Parameter from Method
Rename Temporary
Inline Temporary
Convert Temporary to Instance Variable
Extract Code as Temporary
Extract Code as Method
Convert Superclass to Sibling
Inline Call
Push Up/Down Method
Push Up/Down Instance Variable
Push Up/Down Class Variable
Move Method to Component
Convert Instance Variable to ValueHolder
Protect Instance Variable
Move Temporary to Inner Scope
http://twiki.cin.ufpe.br/twiki/pub/SPG/WeeklySeminar/PracticalAnalysisForRefactoringDonRoberts1999.pdf
わかった。では1999年ではどうだ?
Remove Class
Rename Class
Remove Instance Variable
Rename Instance Variable
Abstract Instance Variable
Create Accessors for Instance Variable
Remove Class Variable
Rename Class Variable
Abstract Class Variable
Create Accessors for Class Variable
Remove Method
Rename Method
Add Parameter to Method
Remove Parameter from Method
Rename Temporary
Inline Temporary
Convert Temporary to Instance Variable
Extract Code as Temporary
Extract Code as Method
Convert Superclass to Sibling
Inline Call
Push Up/Down Method
Push Up/Down Instance Variable
Push Up/Down Class Variable
Move Method to Component
Convert Instance Variable to ValueHolder
Protect Instance Variable
Move Temporary to Inner Scope
http://twiki.cin.ufpe.br/twiki/pub/SPG/WeeklySeminar/PracticalAnalysisForRefactoringDonRoberts1999.pdf
544デフォルトの名無しさん
2014/11/30(日) 16:33:33.88ID:/BRxH/wW >>543
静的型と動的型で同じ「Rename method」というリファクタリング機能をサポートしていると言っても、
動的型のそれは http.connect のメソッド名を変更したら
無関係な db.connect のメソッド名も変わってしまうような代物だろう
静的型と動的型で同じ「Rename method」というリファクタリング機能をサポートしていると言っても、
動的型のそれは http.connect のメソッド名を変更したら
無関係な db.connect のメソッド名も変わってしまうような代物だろう
545デフォルトの名無しさん
2014/11/30(日) 16:45:52.62ID:ZfpKb0dS546デフォルトの名無しさん
2014/11/30(日) 16:52:19.04ID:+4cKqP8L 動的言語における効率とは「問題の棚上げ・先送り」と表裏一体であり
問題の発見・防止が重視される大規模開発とは真逆の志向である
問題の発見・防止が重視される大規模開発とは真逆の志向である
547デフォルトの名無しさん
2014/11/30(日) 16:54:52.49ID:360iudbJ >>544
そんなことをする馬鹿にはリファクタリングツールの使用はお勧めできない。
そんなことをする馬鹿にはリファクタリングツールの使用はお勧めできない。
548デフォルトの名無しさん
2014/11/30(日) 16:58:31.17ID:rR9TrKjV >>547
一番のバカは使い物ならないツールを作ってる動的言語の連中だな
一番のバカは使い物ならないツールを作ってる動的言語の連中だな
549デフォルトの名無しさん
2014/11/30(日) 17:02:44.20ID:UnYKruMf550デフォルトの名無しさん
2014/11/30(日) 17:04:54.56ID:qFjB73Ro コンピュータにやらせるなんてアホ
脳が腐る。
人間がシコシコ変換するることで
ボケが防止される
脳が腐る。
人間がシコシコ変換するることで
ボケが防止される
551デフォルトの名無しさん
2014/11/30(日) 17:10:09.29ID:7WEYW95R >>546
そうなんだよね。結局問題を先送りしてるだけ。
だいたいさ、コードの中でこの変数(httpとか)は
connectを呼び出しているって書いているから
この変数はconnectを持っている型だって決まってるわけだよね。
動的型付けであっても、型は決まってる。
だからそのことをコードに書いておけばいいわけよ。
それが変数の型宣言というもの。
型宣言しておけば、コードとその型に矛盾が起きるような修正が
発生した時、それをすぐにコンピュータが検出できる。
検出した問題を人間がみた時にも、すぐにその原因がわかりやすい。
どうせコードでは型は特定の型じゃないと動かないんだから
その型であるって明示しておけばもっと便利になる。
動的型付けでは不可能なレベルの完璧な補完っていうのも
その高度なコード解析能力の一端にすぎないんだよ。
そうなんだよね。結局問題を先送りしてるだけ。
だいたいさ、コードの中でこの変数(httpとか)は
connectを呼び出しているって書いているから
この変数はconnectを持っている型だって決まってるわけだよね。
動的型付けであっても、型は決まってる。
だからそのことをコードに書いておけばいいわけよ。
それが変数の型宣言というもの。
型宣言しておけば、コードとその型に矛盾が起きるような修正が
発生した時、それをすぐにコンピュータが検出できる。
検出した問題を人間がみた時にも、すぐにその原因がわかりやすい。
どうせコードでは型は特定の型じゃないと動かないんだから
その型であるって明示しておけばもっと便利になる。
動的型付けでは不可能なレベルの完璧な補完っていうのも
その高度なコード解析能力の一端にすぎないんだよ。
552デフォルトの名無しさん
2014/11/30(日) 17:23:36.91ID:360iudbJ >>548
くやしいのうwwwくやしいのうwww
>>551
否定はしないけれど、視点の違いとか「ものは言いよう」という側面もあるな。
「真のソフトウェア工学が開発されるまでの次善の策は、
あらゆる要素について極端に遅延結合な動的システムを使って開発する事だ。」
http://metatoys.org/oxymoron/oxymoron.html
くやしいのうwwwくやしいのうwww
>>551
否定はしないけれど、視点の違いとか「ものは言いよう」という側面もあるな。
「真のソフトウェア工学が開発されるまでの次善の策は、
あらゆる要素について極端に遅延結合な動的システムを使って開発する事だ。」
http://metatoys.org/oxymoron/oxymoron.html
553デフォルトの名無しさん
2014/11/30(日) 17:25:33.97ID:tVFfE2xZ まあ中規模くらいなら動的言語の気楽さ>静的言語の堅牢性だけど
大規模になって全体のコードを把握できなくなると気楽さ<堅牢性になるよね
大規模になって全体のコードを把握できなくなると気楽さ<堅牢性になるよね
554デフォルトの名無しさん
2014/11/30(日) 17:37:33.47ID:7WEYW95R555デフォルトの名無しさん
2014/11/30(日) 17:40:58.65ID:7WEYW95R >>552
その頃言われていた「遅延結合」っていうのは、
遅延ではない結合、つまり特定の型以外には結合しないという意味で
それを解決したのが、継承やインターフェースでしょう。
継承やインターフェースは、指定した型+その型を継承したもの
(もしくはインターフェースを持っているもの)に
動的に結合しているわけで、遅延結合になっている。
その頃言われていた「遅延結合」っていうのは、
遅延ではない結合、つまり特定の型以外には結合しないという意味で
それを解決したのが、継承やインターフェースでしょう。
継承やインターフェースは、指定した型+その型を継承したもの
(もしくはインターフェースを持っているもの)に
動的に結合しているわけで、遅延結合になっている。
556デフォルトの名無しさん
2014/11/30(日) 17:41:53.12ID:guVElZZq 静的言語だとテスト工数が減るとか、動的言語だとテスト工数が増えるとかあるの?
557デフォルトの名無しさん
2014/11/30(日) 17:47:36.29ID:7WEYW95R >>556
コンパイルエラーをミスと考えるかバグと考えるかで話が違う。
テストはバグを見つけるもの。
だから普通はコンパイルエラーによるミスは
テストで見つけるものではない。
だから本当の意味でのテストの量は同じだが、問題はミス。
静的型付け言語ならミスは、ミスとしてテストの前段階で弾くことができるが、
動的型付け言語だと、テストの段階で弾くことになる。
(しかも静的型付け言語ならミスは修正箇所をコンピュータが示すから素早く解決できるが、
動的型付け言語だとバグを探すのと同じ作業をしないといけなくなる)
そういう点で、動的型付け言語ではテストでやるべきことが
増えるのでテスト工数が増えることになる。
コンパイルエラーをミスと考えるかバグと考えるかで話が違う。
テストはバグを見つけるもの。
だから普通はコンパイルエラーによるミスは
テストで見つけるものではない。
だから本当の意味でのテストの量は同じだが、問題はミス。
静的型付け言語ならミスは、ミスとしてテストの前段階で弾くことができるが、
動的型付け言語だと、テストの段階で弾くことになる。
(しかも静的型付け言語ならミスは修正箇所をコンピュータが示すから素早く解決できるが、
動的型付け言語だとバグを探すのと同じ作業をしないといけなくなる)
そういう点で、動的型付け言語ではテストでやるべきことが
増えるのでテスト工数が増えることになる。
558デフォルトの名無しさん
2014/11/30(日) 18:12:40.43ID:c9Q+Jt/4 >>536
制約だな。
制約だな。
559デフォルトの名無しさん
2014/11/30(日) 18:24:06.55ID:7WEYW95R >>558
それを言うなら、契約って言ったほうがかっこいいな。
契約プログラミングといえば、EiffelとD言語ぐらいだけど、
型っていうのもある意味契約だからね。
この引数は、○型であるという事前条件
この関数は、○型を返すという事後条件
それを言うなら、契約って言ったほうがかっこいいな。
契約プログラミングといえば、EiffelとD言語ぐらいだけど、
型っていうのもある意味契約だからね。
この引数は、○型であるという事前条件
この関数は、○型を返すという事後条件
560デフォルトの名無しさん
2014/11/30(日) 18:24:17.69ID:uRzHHhxu なんだ
このスレの静的厨は静的型が制約だということも理解せずに喚いてたのか
初心者としても筋が悪いな
このスレの静的厨は静的型が制約だということも理解せずに喚いてたのか
初心者としても筋が悪いな
561デフォルトの名無しさん
2014/11/30(日) 18:25:23.77ID:tHR3Cg3X ここの人たちにとってC++のテンプレートを引数に取る関数ってどういうふうに捉えられてるの?
template<typename T> void f(T func)
みたいないわゆるダックタイピング
template<typename T> void f(T func)
みたいないわゆるダックタイピング
562デフォルトの名無しさん
2014/11/30(日) 18:26:57.46ID:mFsly3WX >>534
Static Typing vs. Dynamic Typing という対比はよく見かける
しかし structural subtyping vs. duck typing という対比は知らないね
もし「いくらでも目にする」のなら、ソース(学術的文献)を示せばいい
簡単な事だろ?
ましてや
> 「構造的部分型付けは公称的部分型付けとダックタイピングの間に位置する」あるいは
>「構造的部分型付けは公称的部分型付けとダックタイピングとのハイブリッドである」
なんて奇妙な主張は聞いたことが無い
blog記事を批判するつもりはないが、そんな個人メモを元にして
「動的型言語の補完がどうあるべきかの指標になる(>>533)」と主張するのは
馬鹿だってこと
Static Typing vs. Dynamic Typing という対比はよく見かける
しかし structural subtyping vs. duck typing という対比は知らないね
もし「いくらでも目にする」のなら、ソース(学術的文献)を示せばいい
簡単な事だろ?
ましてや
> 「構造的部分型付けは公称的部分型付けとダックタイピングの間に位置する」あるいは
>「構造的部分型付けは公称的部分型付けとダックタイピングとのハイブリッドである」
なんて奇妙な主張は聞いたことが無い
blog記事を批判するつもりはないが、そんな個人メモを元にして
「動的型言語の補完がどうあるべきかの指標になる(>>533)」と主張するのは
馬鹿だってこと
563デフォルトの名無しさん
2014/11/30(日) 18:31:27.03ID:7WEYW95R >>561
> ここの人たちにとってC++のテンプレートを引数に取る関数ってどういうふうに捉えられてるの?
┃ template<typename T>┃ void f(T func)
↑ ここからここまでが、型 ↑
HOGE_T void f(T func)
置き換えるならこんなふうに捉えてる。
> みたいないわゆるダックタイピング
それをダックタイピングとは言わない。
> ここの人たちにとってC++のテンプレートを引数に取る関数ってどういうふうに捉えられてるの?
┃ template<typename T>┃ void f(T func)
↑ ここからここまでが、型 ↑
HOGE_T void f(T func)
置き換えるならこんなふうに捉えてる。
> みたいないわゆるダックタイピング
それをダックタイピングとは言わない。
564デフォルトの名無しさん
2014/11/30(日) 18:36:30.75ID:uRzHHhxu そもそもduck typing自体まともな定義はない
565デフォルトの名無しさん
2014/11/30(日) 18:44:16.77ID:/BRxH/wW function foo(a) {
a.bar()
}
bar() を呼び出せるなら何でも foo の引数に入れられるのが
ダックタイピングというのはどうだろうか
このスレだけでも
a.bar()
}
bar() を呼び出せるなら何でも foo の引数に入れられるのが
ダックタイピングというのはどうだろうか
このスレだけでも
566デフォルトの名無しさん
2014/11/30(日) 19:22:49.09ID:7WEYW95R > bar() を呼び出せるなら何でも foo の引数に入れられるのが
それってさfoo関数の引数 aはbarメソッドを
持った型ではなければならないってことだよね?
コードに書くならば
function foo(/* fooメソッドを持った型 */ a) {
a.bar()
}
それってさfoo関数の引数 aはbarメソッドを
持った型ではなければならないってことだよね?
コードに書くならば
function foo(/* fooメソッドを持った型 */ a) {
a.bar()
}
567デフォルトの名無しさん
2014/11/30(日) 19:26:23.25ID:7WEYW95R 間違えたw
function foo(/* barメソッドを持った型 */ a) {
a.bar()
}
そして、大概は一つのメソッドだけ使うことはないから、
function foo(/* barとbazメソッドを持った型 */ a) {
a.bar()
a.baz()
}
あぁ!もう面倒くさい。
// Hogeインターフェース = barとbazメソッドを持っていること
function foo(Hoge a) {
a.bar()
a.baz()
}
わかりやすい。Hogeってみるだけで barとbazを持っていることがわかるし
もし持っていないものをaに入れるコードを書いたらコンパイルエラーが出る
function foo(/* barメソッドを持った型 */ a) {
a.bar()
}
そして、大概は一つのメソッドだけ使うことはないから、
function foo(/* barとbazメソッドを持った型 */ a) {
a.bar()
a.baz()
}
あぁ!もう面倒くさい。
// Hogeインターフェース = barとbazメソッドを持っていること
function foo(Hoge a) {
a.bar()
a.baz()
}
わかりやすい。Hogeってみるだけで barとbazを持っていることがわかるし
もし持っていないものをaに入れるコードを書いたらコンパイルエラーが出る
568デフォルトの名無しさん
2014/11/30(日) 19:32:01.35ID:/BRxH/wW569デフォルトの名無しさん
2014/11/30(日) 19:47:43.07ID:7WEYW95R http.connectを呼び出す関数に、
db.connectというメソッドを持ったオブジェクトを
入れても期待通りに動くことはまず無い。
二つの無関係なオブジェクトが同名のメソッドを持っていて
呼び出せるからといって、それはバグにしかならない。
メソッドに名前空間がないような形で使う動的型付け言語では
このような問題が起きる。
静的型付け言語ではインターフェースという型を定義することで、
同名であっても本質的に違うものは、違うものとして扱うことが出来る
db.connectというメソッドを持ったオブジェクトを
入れても期待通りに動くことはまず無い。
二つの無関係なオブジェクトが同名のメソッドを持っていて
呼び出せるからといって、それはバグにしかならない。
メソッドに名前空間がないような形で使う動的型付け言語では
このような問題が起きる。
静的型付け言語ではインターフェースという型を定義することで、
同名であっても本質的に違うものは、違うものとして扱うことが出来る
570デフォルトの名無しさん
2014/11/30(日) 19:53:09.38ID:VpMFGcKd どんな御託を並べても
インターフェースがduck typingは無いわw
インターフェースがduck typingは無いわw
571デフォルトの名無しさん
2014/11/30(日) 19:56:23.78ID:7WEYW95R インターフェースがduck typingなどとは
ひとことも言ってない。
duck typingは不要。ガアガアと鳴いたからたから
といって人間はアヒルでしか無い。
アヒルだ、空を飛べ。人間は飛べません。はいバグです。
実際には鳴くメソッドがあればアヒルである
ということになって更に意味がわからない。
もちろん、アヒルである条件をインターフェースとして定義しているならば
そのインターフェースを備えているものは、アヒルでいいですがね。
メソッド一つが有るか無いかきめんなよ。
ひとことも言ってない。
duck typingは不要。ガアガアと鳴いたからたから
といって人間はアヒルでしか無い。
アヒルだ、空を飛べ。人間は飛べません。はいバグです。
実際には鳴くメソッドがあればアヒルである
ということになって更に意味がわからない。
もちろん、アヒルである条件をインターフェースとして定義しているならば
そのインターフェースを備えているものは、アヒルでいいですがね。
メソッド一つが有るか無いかきめんなよ。
572デフォルトの名無しさん
2014/11/30(日) 19:57:27.20ID:7WEYW95R 訂正
duck typingは不要。ガアガアと鳴いたからたから
といって人間はアヒルにはならない
duck typingは不要。ガアガアと鳴いたからたから
といって人間はアヒルにはならない
573デフォルトの名無しさん
2014/11/30(日) 19:59:03.44ID:360iudbJ >>562
ググるとかしたことないのかね。
ググるとかしたことないのかね。
574デフォルトの名無しさん
2014/11/30(日) 20:01:50.38ID:7WEYW95R したことある人が、リンクを見つけてきて
ここに書けばいいと思いますが、
それを要求することは酷なことですね。
だってググっても見つからないのだから。
ここに書けばいいと思いますが、
それを要求することは酷なことですね。
だってググっても見つからないのだから。
575デフォルトの名無しさん
2014/11/30(日) 20:04:43.51ID:7WEYW95R ダックタイピングの説明として
「アヒルのように歩き、アヒルのように鳴くのなら、それはアヒルである」
という言葉があるが、
それを、
アヒルのように歩くとアヒルのように鳴くという
アヒルインターフェースを実装しているものはアヒルである。
というふうに読み替えると
これは実は静的型付け言語の説明だなとわかるはずである。
「アヒルのように歩き、アヒルのように鳴くのなら、それはアヒルである」
という言葉があるが、
それを、
アヒルのように歩くとアヒルのように鳴くという
アヒルインターフェースを実装しているものはアヒルである。
というふうに読み替えると
これは実は静的型付け言語の説明だなとわかるはずである。
576デフォルトの名無しさん
2014/11/30(日) 20:09:27.69ID:VpMFGcKd >>569
mysql.connect と postgresql.connect は置き換え可能だけど?
mysql.connect と postgresql.connect は置き換え可能だけど?
577デフォルトの名無しさん
2014/11/30(日) 20:11:34.14ID:VpMFGcKd578デフォルトの名無しさん
2014/11/30(日) 20:15:01.73ID:7WEYW95R >>576
両方が同じデータベースインターフェースを
サポートしているならばそうだろうね。
現実的な話をするならば、mysql.connect を
使うコードは、実際にはmysql.connect だけを
使うことはなく、複数のメソッドを使う。
だから、その複数のメソッドというものを
定義しないといけない。
そしてその定義したものがインターフェースであり
そのインターフェースを使いますよと宣言するのが
型宣言なのである。
そうすればある型がデータベースインターフェースを
定義していることを保証する型宣言だけあれば、
全てのメソッドを安心して使うことが出来る。
このオブジェクトはconnectメソッドは持ってるけど、
disconnectメソッドを持っていないかもしれない
なんてことはなくなるのである。
両方が同じデータベースインターフェースを
サポートしているならばそうだろうね。
現実的な話をするならば、mysql.connect を
使うコードは、実際にはmysql.connect だけを
使うことはなく、複数のメソッドを使う。
だから、その複数のメソッドというものを
定義しないといけない。
そしてその定義したものがインターフェースであり
そのインターフェースを使いますよと宣言するのが
型宣言なのである。
そうすればある型がデータベースインターフェースを
定義していることを保証する型宣言だけあれば、
全てのメソッドを安心して使うことが出来る。
このオブジェクトはconnectメソッドは持ってるけど、
disconnectメソッドを持っていないかもしれない
なんてことはなくなるのである。
579デフォルトの名無しさん
2014/11/30(日) 20:16:45.31ID:nRiDRl39 足し算と掛け算のある型なら複素数でも行列でも良いとかいうパターンは有るな
580デフォルトの名無しさん
2014/11/30(日) 20:21:32.59ID:7WEYW95R 足し算をaddメソッドだとして、
addメソッドさえあればなんでも使えるかというと
(addメソッドでググって一番目にでてきた)
> Addメソッドとはエクセルのシートに表とグラフを同時に表示するメソッドです。
に対してもうまく動くことはおそらくないだろう。
つまり名前が一緒でも、正しく動くとは限らんのさ。
だから名前と意味が一緒であることを保証するために
名前をつけたものが型なのである。
addメソッドさえあればなんでも使えるかというと
(addメソッドでググって一番目にでてきた)
> Addメソッドとはエクセルのシートに表とグラフを同時に表示するメソッドです。
に対してもうまく動くことはおそらくないだろう。
つまり名前が一緒でも、正しく動くとは限らんのさ。
だから名前と意味が一緒であることを保証するために
名前をつけたものが型なのである。
581デフォルトの名無しさん
2014/11/30(日) 20:24:10.20ID:T2KLr1TM >>575
アヒルのインスタンスを実行時にその振る舞いから分類するところがポイントなのであって
アヒルというクラスに対してコンパイル時に分類するのはダックタイピングじゃないよ
というわけでダックタイピングはインターフェースや構造的部分型とは全く別
アヒルのインスタンスを実行時にその振る舞いから分類するところがポイントなのであって
アヒルというクラスに対してコンパイル時に分類するのはダックタイピングじゃないよ
というわけでダックタイピングはインターフェースや構造的部分型とは全く別
582デフォルトの名無しさん
2014/11/30(日) 20:25:36.35ID:VpMFGcKd >>580
Excelのaddメソッドは戻り値の型が違うだろ
Excelのaddメソッドは戻り値の型が違うだろ
583デフォルトの名無しさん
2014/11/30(日) 20:25:53.73ID:T2KLr1TM >>580
だから同じ「意味」に対して名前を揃えるのが動的言語でのメソッド名のつけ方だ
だから同じ「意味」に対して名前を揃えるのが動的言語でのメソッド名のつけ方だ
584デフォルトの名無しさん
2014/11/30(日) 20:26:04.76ID:7WEYW95R アヒルのインスタンスを実行時にその振る舞いから分類というけれど、
コード自体は、実行時に分類してないんだよ。
コードは、アヒルであること、を前提として書いてる。
実行前にコードで分類しているのに、
なぜ実行時に分類しないといけないのか。
型は動的に変わるが、コードは静的なのである。
コード自体は、実行時に分類してないんだよ。
コードは、アヒルであること、を前提として書いてる。
実行前にコードで分類しているのに、
なぜ実行時に分類しないといけないのか。
型は動的に変わるが、コードは静的なのである。
585デフォルトの名無しさん
2014/11/30(日) 20:28:54.03ID:7WEYW95R >>583
> だから同じ「意味」に対して名前を揃えるのが動的言語でのメソッド名のつけ方だ
だから大規模では無理なんだよ。
大規模=大多数の人間が係る。場合によっては全く知らない人が作った
ライブラリを使うこともあるしな。
そんなんで、すべて意味を揃えるなんてことは不可能
いくつもの意味を持つ英単語なんてざらにある
単語の意味を揃えるのは不可能。というのが大前提
> だから同じ「意味」に対して名前を揃えるのが動的言語でのメソッド名のつけ方だ
だから大規模では無理なんだよ。
大規模=大多数の人間が係る。場合によっては全く知らない人が作った
ライブラリを使うこともあるしな。
そんなんで、すべて意味を揃えるなんてことは不可能
いくつもの意味を持つ英単語なんてざらにある
単語の意味を揃えるのは不可能。というのが大前提
586デフォルトの名無しさん
2014/11/30(日) 20:29:37.63ID:T2KLr1TM587デフォルトの名無しさん
2014/11/30(日) 20:30:01.03ID:/BRxH/wW588デフォルトの名無しさん
2014/11/30(日) 20:31:08.34ID:T2KLr1TM589デフォルトの名無しさん
2014/11/30(日) 20:33:46.05ID:SVLUkCya >>588
SmalltalkでObjectに500もメソッドなんてねーよw
あったとしたら、アンチパターン ゴッドクラス
(設計の一部分(クラス)に、過剰に機能を集中させること)に
適合してしまうわw
SmalltalkでObjectに500もメソッドなんてねーよw
あったとしたら、アンチパターン ゴッドクラス
(設計の一部分(クラス)に、過剰に機能を集中させること)に
適合してしまうわw
590デフォルトの名無しさん
2014/11/30(日) 20:34:01.13ID:T2KLr1TM >>587
分岐(メソッド探索)の話などしていない
どの式がどのインターフェースを実装しているのかを実行時に検査してるのか?
どの式がどの型の部分型かを実行時に検査しているのか?
へー、それ、なんていう言語だい?
分岐(メソッド探索)の話などしていない
どの式がどのインターフェースを実装しているのかを実行時に検査してるのか?
どの式がどの型の部分型かを実行時に検査しているのか?
へー、それ、なんていう言語だい?
591デフォルトの名無しさん
2014/11/30(日) 20:36:14.22ID:TE77vkUw592デフォルトの名無しさん
2014/11/30(日) 20:36:20.46ID:VpMFGcKd >>585
大規模なシステムは作者が異なる様々なライブラリを使うが、違うライブラリ間で
同じ意味の機能に同じインターフェースを持たせるのは不可能
インターフェース方式は、ある数値計算ライブラリと別の行列演算ライブラリを混ぜて使う場合などで問題になる
大規模なシステムは作者が異なる様々なライブラリを使うが、違うライブラリ間で
同じ意味の機能に同じインターフェースを持たせるのは不可能
インターフェース方式は、ある数値計算ライブラリと別の行列演算ライブラリを混ぜて使う場合などで問題になる
593デフォルトの名無しさん
2014/11/30(日) 20:40:02.67ID:/BRxH/wW >>590
実行時にvalidationするのがダックタイピングというなら
構造的部分型は確かに違うな
"If it walks like a duck and quacks like a duck, it must be a duck"
という文章からそのような意味を読み取るのは無理だが
実行時にvalidationするのがダックタイピングというなら
構造的部分型は確かに違うな
"If it walks like a duck and quacks like a duck, it must be a duck"
という文章からそのような意味を読み取るのは無理だが
594デフォルトの名無しさん
2014/11/30(日) 20:40:22.76ID:SVLUkCya >>591
> Smalltalkでは色々なパッケージがObjectクラスにメソッドを追加していくんだよw
最悪だな。JavaScriptでprototypejsっていうのがあったけど、
名前が標準のメソッドとobjectに追加したメソッド名が
被って大変な目にあっていた。
それ移行Objectにメソッドを追加するのは
ダメなやり方だって広く知られるようになったね。
> Smalltalkでは色々なパッケージがObjectクラスにメソッドを追加していくんだよw
最悪だな。JavaScriptでprototypejsっていうのがあったけど、
名前が標準のメソッドとobjectに追加したメソッド名が
被って大変な目にあっていた。
それ移行Objectにメソッドを追加するのは
ダメなやり方だって広く知られるようになったね。
595デフォルトの名無しさん
2014/11/30(日) 20:40:39.28ID:360iudbJ >>570
いや。duck typing とは言わないけれど、Smalltalk の動的型と
同様の柔軟性を持たせつつ型安全を目指したのがインターフェイス。
(Eiffel流のクラスの継承をサブタイプに使うと型安全でないという流れで)
http://www.cs.utexas.edu/~wcook/papers/InheritanceSubtyping90/CookPOPL90.pdf
いや。duck typing とは言わないけれど、Smalltalk の動的型と
同様の柔軟性を持たせつつ型安全を目指したのがインターフェイス。
(Eiffel流のクラスの継承をサブタイプに使うと型安全でないという流れで)
http://www.cs.utexas.edu/~wcook/papers/InheritanceSubtyping90/CookPOPL90.pdf
596デフォルトの名無しさん
2014/11/30(日) 20:43:21.18ID:/BRxH/wW597デフォルトの名無しさん
2014/11/30(日) 20:45:52.98ID:TE77vkUw >>593
If it walks like a duckというのは、実際のitの振る舞いのことを指しているのだから実行時のことだと考えるのが自然だと思うが?
If it will walk like a duckならばコンパイルだろうけどな。
If it walks like a duckというのは、実際のitの振る舞いのことを指しているのだから実行時のことだと考えるのが自然だと思うが?
If it will walk like a duckならばコンパイルだろうけどな。
598デフォルトの名無しさん
2014/11/30(日) 20:47:16.39ID:TE77vkUw599デフォルトの名無しさん
2014/11/30(日) 20:48:14.19ID:360iudbJ600デフォルトの名無しさん
2014/11/30(日) 20:51:13.03ID:TE77vkUw >>592
>大規模なシステムは作者が異なる様々なライブラリを使うが、違うライブラリ間で
>同じ意味の機能に同じインターフェースを持たせるのは不可能
そういう初心者は補助輪(静的型)を使えばいいよw
ちなみに動的言語の環境では
様々なライブラリでどういうメソッド名がつけられているか検索する仕組みと
指定したメソッド名のメソッドを検索する仕組みが
遥か80年代から用意されていたりするけどなw
>大規模なシステムは作者が異なる様々なライブラリを使うが、違うライブラリ間で
>同じ意味の機能に同じインターフェースを持たせるのは不可能
そういう初心者は補助輪(静的型)を使えばいいよw
ちなみに動的言語の環境では
様々なライブラリでどういうメソッド名がつけられているか検索する仕組みと
指定したメソッド名のメソッドを検索する仕組みが
遥か80年代から用意されていたりするけどなw
601デフォルトの名無しさん
2014/11/30(日) 20:53:54.80ID:TE77vkUw >>599
動的言語では全オブジェクト共通の語彙が重要だから当然そうなる
動的言語では全オブジェクト共通の語彙が重要だから当然そうなる
602デフォルトの名無しさん
2014/11/30(日) 20:56:59.55ID:360iudbJ603デフォルトの名無しさん
2014/11/30(日) 21:05:38.46ID:/BRxH/wW604デフォルトの名無しさん
2014/11/30(日) 21:09:31.70ID:360iudbJ >>601
とはいえ、Squeak のカオス化に嫌気してフォークされた Pharo は
だいぶ減らして 374 だし(3.0調べ)、VisualWorks はもとより 303(7.10調べ)だけどね。
とはいえ、Squeak のカオス化に嫌気してフォークされた Pharo は
だいぶ減らして 374 だし(3.0調べ)、VisualWorks はもとより 303(7.10調べ)だけどね。
605デフォルトの名無しさん
2014/11/30(日) 21:10:47.94ID:VpMFGcKd606デフォルトの名無しさん
2014/11/30(日) 21:13:30.42ID:VpMFGcKd607デフォルトの名無しさん
2014/11/30(日) 21:15:20.91ID:guVElZZq >>599
Pharo 3.0 は、374
Pharo 3.0 は、374
608デフォルトの名無しさん
2014/11/30(日) 21:17:02.28ID:guVElZZq >604 で既出だった orz
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 最新版Z級クソ映画ランキングが決定! [牛丼★]
- 「1800万円の売り上げゼロに…」中国インバウンドに特化の宿の今 ★2 [蚤の市★]
- 公用車カーナビのNHK受信料「全額免除を」 千葉市議会、国に制度創設求める意見書可決 [少考さん★]
- 【食】「シャウエッセンは焼くべからず」暗黙のルールを破り売上高過去最高…日本ハム社員たちが「夜味」にかけた情熱 [ぐれ★]
- 神田沙也加さん元恋人で元俳優の前山剛久 六本木のメンズラウンジ勤務を報告「真叶(まなと)です。よろしく」 [muffin★]
- 地震 [Hitzeschleier★]
- 変な人「俺は正しい!お前らは間違っている!」←大体こいつのほうが迷惑で間違ってる件について
- 好きなAA貼ってけ!!!!!!!!!!!!!!!!!!!!!!!!!!!!(´・ω・`)
- ココアさん好き好き大好き
- そろそろ地球も旅立たないの?
- 【朗報】南鳥島のレアアース、中国産の「20倍の純度」青山繁晴氏「日本は資源大国」日本復活のファンファーレが鳴り響く! [673057929]
- 「妨」という字が女へんという事実…
