Scala暗黙の歴史的起源


14

Scalaは私の同僚や一部さえ非難すべての人々の多くは、その豊富な機能セットを持つ複雑な呼ばれている新しいそれの機能。ほとんどのプログラマーはオブジェクト指向の機能を知っており、少なくともまともなものは関数型プログラミングについても知っていますが、Scalaには特にその歴史的起源を知らない1つの機能があります。

私たちの職業の主要なマントラは車輪を再発明しないことであることを考えると、Scalaには前例のない実際の機能はないことを確信していますが、必要に応じて修正することをお勧めします。

実際の質問にたどり着くために、私はScalaの機能のほとんどの起源を知っていますが、そのimplicit宣言のようなものを見たことはありません。この機能を提供する他の(古い!)言語はありますか?

暗黙の異なるケース(異なるソースに由来する可能性がある)、つまり暗黙の変換と暗黙のパラメーターを区別するのは理にかなっていますか?


重複する可能性がありますか?:stackoverflow.com/questions/3069432/…–
gerferra

@gerferra完全な複製ではなく、クロスサイトの複製という概念はありません。必要に応じて、SO質問を参照する回答を作成できます。回答とその参照は完全に受け入れられます。
ヤニス

回答:


9

他の質問に対するブライアンの答えには同意しません。

私の知る限り、他の言語には暗黙の概念はありません。Scalaの変更履歴は、暗黙的はビュー境界の一般化であり、ビュー境界自体は自動型変換の一般化であり、実際に非常に一般的であることを意味します。

その後、暗黙的に型クラスが有効になりましたが、それが元の意図だった場合、私は非常に驚くでしょう。

編集

Scala 2.0(2006)のリリースノートには次のように書かれています。

Scala 1.0のビューは、暗黙パラメーターのより一般的な概念に置き換えられました。

もちろん、ビューを置き換えることを目的として暗黙的なパラメーターが導入されたことを意味するものではありません。

しかし、Oderskyは、一度コンセプトが複数のコンセプトに取って代わることができることを明らかに気に入っています。その意味で、Oderskyは型クラスを望んでいたが、それを排他的に処理するメカニズムを導入したくなかったため、1つの概念(ビュー)を削除して置き換えることができる何かを思いついた可能性がありますビューと型クラスの両方を処理するより一般的な概念を使用します。

誰かが興味を持っている場合、スタックオーバーフローでブライアンが言及した貧乏人のタイプクラスも2006年に日付が付けられています。明らかに、Oderskyは、暗黙クラスと型クラスを紹介するときに、それらのリンクを知っていました。

それでも、私は自分の主張を支持します。:-)


ノーマン・ラムジーの反応はどうですか?stackoverflow.com/a/3071461/63489。Haskellでの暗黙の変換の以前の実装を参照しています
gerferra

@gerferraは妥当と思われます-Oderskyはその論文で言及されていることに注意してください。メカニズムは異なりますが、ボールが転がる可能性があります。Oderskyの参考論文では型クラスについて議論されており、暗黙のうちにブライアンが引用した「Poor Man's Type Classes」プレゼンテーションの日付である2006年に導入されました-明らかに、リンクがあります。それでも、Scala 2.0(2006)のリリースノートには、「Scala 1.0のビューは暗黙的なパラメーターのより一般的な概念に置き換えられました」と書かれています。Oderskyについて私が知っていることから、複数の問題を解決する1つのメカニズムが彼に大きな魅力を持っているでしょう。
ダニエルC.ソブラル

十分に公平:-)
ガーフェラ

4

Implicit scalaでは、2つの異なることを意味します

  1. 暗黙的なパラメーター。これらはHaskellに登場し、おそらく他の言語が最初に登場しました。裏付けとなる証拠:2000年のこのペーパーGHC 5.04.1のドキュメント(Scala が登場する前の2002年9月)
  2. 暗黙的な変換。これらを持っている最初の言語は知りませんが、C#1.0(implictキーワードを使用)であり、Scalaの最初のバージョンよりも約1年前です。

+ 1、C#で暗黙的な変換が利用できることを知りませんでした。ポインターをありがとう。
フランク

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.