1

ディスカッションとは、ブログエントリ、本(できれば)などを意味します。

バックグラウンド

Martin Odersky、Lex Spoon、BillVennersによるScalaプログラミングを2回目に読んでいますが、驚いたことに、共変性と反変性についての記事を読んだことがあります。

私がこの質問を投稿する理由はこれです-著者はクラスQueueの構築から始めて、共分散がどのように、どこで、できるか、できないかについて議論します。すべてのステップは前のステップの論理的な結果ですが、最後のステップの1つは、キュー(先頭)に要素を追加することです。

(elem : Apple) :: (queue[Orange])

ただし、Scalaではこのように機能し、結果はFruitタイプのキューになります。

そして、これは私の意見では間違っています-誰かがフルーツのキューを希望する場合、それはそもそもそのようなキューでなければなりません。タイプをオンザフライで変更することは、私の好みにはあまりにも動的です(つまり、objectタイプを取得するためだけに、intと文字列を追加するようなものです)。

言及された本はScalaに関するものであり、タイプの多様性はその一部にすぎないので、私はもっと充実したものを探しています。

質問

したがって、質問-型の違いに焦点を当てた言語設計について何を読むべきですか?万が一、ベンジャミンC.ピアスの「タイプとプログラミング言語」(私の購入リストに載っています)でしょうか。

4

1 に答える 1

1

共変性と反変性に関するウィキペディアは多少役に立ちます。一般に、共変性と反変性はかなりクールな事実であり、プログラミング言語を理解する上でいくつかの深い結果をもたらしますが、プログラマーとしての彼らの内部の働きについて知ることがどれほど役立つかはわかりません。この分野の先駆的な仕事は、リスコフ(リスコフの置換原則で有名)によって行われました。あなたが読むことができるジョン・クックによる素晴らしい記事もあります!あなたが読むかもしれないいくつかのクールな学術論文があります、すなわち「多重継承のセマンティクス」(私が完全には読んでいない非常に良い本「オブジェクトの理論」を書いたルカ・カーデリも同様のことをカバーしていますセマンティクスオブジェクト指向言語。)プログラミング言語の共/逆分散について最初に言及した論文は、Liskov自身の「サブタイピングの行動概念」であると私は信じています。私はしばらくこれを読んでいませんが、この論文は関数型だけでなく型述語に関する理論の説明をしています(そしてこれは型システムがこれらの一般原則でどのように機能するかについてのはるかに一般的な説明を与えます) 。最後に、スライドがあなたのものである場合、ジェフ・フォスター(そしてTAとしての私)は今学期にUMDでコンパイラーコースを教えています、

簡単に言うと、プログラミング言語の設計は、この差異よりもはるかに大きな領域です。ベン・ピアスのTAPLを読み始めると、本の他のほとんどのトピックに簡単に気を取られてしまいます。これも良いことです。共変性と反変性はクールですが、プログラミング言語理論には他にも同じようにクールなものがたくさんあると思います。これは、最も驚くべきこととはほど遠いものです:-)

于 2012-03-07T00:49:47.620 に答える