対して、静的型付けな C++ と MFC ライブラリを採用した Windows は開発に行き詰まる Windows ではコンポーネント間の結合に CORBA を基礎とした COM を開発して対応したが、 COM は高度で優れた技術ではあるものの、あまりに一般のプログラマには難解すぎて普及しなかった (一般のプログラマが普通に使えるのは OLE Automation と呼ばれるクライアント側APIのみ) このため Microsoft は C++ や MFC を放棄して C# と .Net へ全面移行せざるをえなかった 結果として開発チームは大混乱に陥って Windows Vista の大失敗に始まる開発の大幅な停滞をまねき、 Apple の台頭を許した 0672デフォルトの名無しさん2014/12/02(火) 23:43:16.07ID:DpCZ+4Qy Smalltalkをちょっとかじってみたい人のための、チュートリアルまとめ http://qiita.com/sumim/items/6bed17961bd57daf88a3
> This paper presents a lightweight approach to type classes in object-oriented (OO) languages > with generics using CONCEPT pattern and implicits (a type-directed implicit parameter passing mechanism). > This paper also shows how Scala's type system conspires with implicits to enable, and even surpass, > many common extensions of the Haskell type class system, making Scala ideally suited for generic programming in the large. 0714デフォルトの名無しさん2014/12/04(木) 22:11:18.04ID:tYdcY83W このペーパー、プレゼントします
Traits in SCALA[23] are abstract classes without state or parameterized constructors; another way to characterize them would be as JAVA-like interfaces that may also contain inner classes and concrete implementations for some methods. Unlike the original trait proposal[29], traits in Scala are not different from classes. In the example above and all examples that follow one could have also used abstract class instead of trait. 0716デフォルトの名無しさん2014/12/04(木) 22:20:18.91ID:8pz5p6Zv>>715 どこにって、implicitを使うために中で何度でも出てくるよ? 0717デフォルトの名無しさん2014/12/04(木) 22:24:26.97ID:8pz5p6Zv こういう研究の流れを受けてか、後発のRustのtraitは 最初からHaskellのType Classそっくりになっているんですってよ 0718デフォルトの名無しさん2014/12/04(木) 22:29:19.94ID:RpORv8ek>>716 >>712
In this definition, the role of ord T is to provide the comparison function for elements of type T. The Ord[T] interface, expressed as a trait in Scala, 0719デフォルトの名無しさん2014/12/04(木) 22:30:05.46ID:tYdcY83W 始めに実装したというのは凄いかもしれないけど、 その凄いっていうのは、始めに実装したことであって その機能がすごいってことじゃないんだよな。 後発のほうがもっとその機能を強化している。
▼CLUのイテレータ start_up = proc () po : stream := stream$primary_output() xs : array[int] := array[int]$[1,2,3] for x : int in xs!elements do po!putl(x!unparse) end end start_up
▼初期のRubyのイテレータ do [1,2,3].each using x; print(x, "\n") end
▼現行のRubyのblock付きメソッド呼び出し(旧呼称はイテレータ) [1,2,3].each{ |x| puts x }
▼Smalltalkのブロックを引数にとるメソッド呼び出し #(1 2 3) do: [:x | x logCr ]
▼LISPのループ(lambdaの出番はない^^;) (loop for x in '(1 2 3) do (print x))
>>671 で > Windows ではコンポーネント間の結合に CORBA を基礎とした COM を開発して対応したが、 と書いたように、静的型付けの C++ だけでは COM を使わなければ コンポーネントの動的結合ができない それに対して Objective-C は一般的な動的リンクライブラリにメタデータを加えて ファイルを構成するだけで動的結合できるフレームワークを実現できる 動的型付けな Objective-C では同じ事を実現するのに、COM は不要
>だいたい発展し続けると言っても、再起動してるじゃん。
カーネルやデバイスドライバを更新した場合には OS の再起動は必要だ ただし、ここで議論の対象としているのはライブラリやフレームワークとして提供される コンポーネントの部分だよ OSX/iOS では単に規定のフォルダへフレームワークをコピーするだけ Windows の COM のようにレジストリへ GUID を登録するといった面倒な仕掛けは不要
> なぜ動的型付け言語ならではの理由が > あんたの言っていることには一つのないんだよね。
静的型付け言語だけではコンポーネントの動的結合ができない(COM が必須) モジュールの静的リンクだけでいい小規模の開発であれば静的型付け言語でもかまわないが、 コンポーネントを組み合わせる大規模なシステム開発では動的型付けの柔軟性が利点になる この言語の差が OS という大規模開発における Windows の失敗と OSX/iOS の成功に影響した(>>671) 0749デフォルトの名無しさん2014/12/05(金) 21:30:47.47ID:+TXyzC2W > と書いたように、静的型付けの C++ だけでは COM を使わなければ > コンポーネントの動的結合ができない