Historische Ursprünge der Scala impliziert

14

Scala wurde von vielen meiner Kollegen als komplex bezeichnet, und einige gaben all diesen die Schuld neuen Funktionen dafür verantwortlich. Während die meisten Programmierer die OO-Funktionen kennen und zumindest die anständigen auch über funktionale Programmierung Bescheid wissen, gibt es eine Funktion in Scala, für die ich die historischen Ursprünge nicht kenne.

Angesichts der Tatsache, dass es ein wichtiges Mantra unseres Berufs ist, das Rad nicht neu zu erfinden, bin ich ziemlich zuversichtlich, dass es Scala nicht gibt keine tatsächliche unerhört-vor - Funktionen, aber ich stehe auf diesen einen zu korrigierenden , wenn nötig.

Um auf die eigentliche Frage zu kommen: Obwohl ich mir der Ursprünge der meisten Funktionen von Scala bewusst bin, habe ich so etwas noch nie gesehen implicit . Gibt es andere (ältere!) Sprachen, die diese Funktion ebenfalls bieten?

Ist es sinnvoll, die verschiedenen Fälle von Impliziten zu unterscheiden (da sie aus verschiedenen Quellen stammen können), nämlich implizite Konvertierungen und implizite Parameter?

Frank
quelle
Vielleicht ein Duplikat ?: stackoverflow.com/questions/3069432/…
gerferra
@gerferra Kein genaues Duplikat, und es gibt keine Vorstellung von einem Cross-Site-Duplikat. Wenn Sie möchten, können Sie eine Antwort verfassen, die auf die SO-Frage und deren Antworten und deren Referenzen verweist. Dies ist vollkommen akzeptabel.
Yannis

Antworten:

9

Ich bin mit Brians Antwort auf diese andere Frage nicht einverstanden.

Soweit ich weiß, gibt es keine impliziten für keine andere Sprache ein Konzept. Das Änderungsprotokoll für Scala impliziert, dass es sich um eine Verallgemeinerung von Ansichtsgrenzen handelt, und dass eine Ansichtsgrenze selbst eine Verallgemeinerung der automatischen Typkonvertierung ist, was in der Tat sehr häufig ist.

Impliziert dann aktivierte Typklassen, aber ich wäre sehr überrascht, wenn das die ursprüngliche Absicht war.

Bearbeiten

In den Versionshinweisen für Scala 2.0 (2006) heißt es:

Ansichten in Scala 1.0 wurden durch das allgemeinere Konzept impliziter Parameter ersetzt

Das bedeutet natürlich nicht, dass implizite Parameter mit dem Ziel eingeführt wurden, Ansichten zu ersetzen.

Odersky gefällt es jedoch sehr gut, wenn ein einziges Konzept mehrere ersetzen kann. In diesem Sinne mag es durchaus der Fall sein, dass Odersky Typklassen wollte, aber keinen Mechanismus einführen wollte, der diese ausschließlich handhabt, und deshalb etwas anderes einbrachte, mit dem er ein Konzept (Views) entfernen und ersetzen konnte mit einem allgemeineren Konzept, das sowohl Ansichten als auch Typklassen behandelt.

Falls sich jemand dafür interessiert, sind auch die Poor Man's Type Classes, auf die Brian bei Stack Overflow zurückgegriffen hat, auf 2006 datiert. Odersky war sich der Verbindung zwischen Impliziten und Typklassen klar bewusst, als er sie einführte.

Dennoch stehe ich zu meinem Anspruch. :-)

Daniel C. Sobral
quelle
Was ist mit der Antwort von Norman Ramsey? stackoverflow.com/a/3071461/63489 . Es bezieht sich auf eine frühere Implementierung von impliziten Konvertierungen in Haskell
gerferra
@ gerferra Klingt vernünftig - beachten Sie, dass in diesem Artikel auf Odersky Bezug genommen wird. Der Mechanismus ist anders, aber es könnte gut sein, dass der Ball rollt. In Oderskys referiertem Artikel werden Typenklassen erörtert, und Implikate wurden 2006 eingeführt, dem Datum der von Brian zitierten Präsentation "Typenklassen für Arme" - klar, es gibt einen Zusammenhang. In den Versionshinweisen für Scala 2.0 (2006) heißt es jedoch "Ansichten in Scala 1.0 wurden durch das allgemeinere Konzept impliziter Parameter ersetzt" . Soweit ich Odersky kenne, hätte ein Mechanismus, der mehrere Probleme löst, eine große Anziehungskraft auf ihn.
Daniel C. Sobral
fair genug :-)
Gerferra
4

Implicit in scala bedeutet zwei verschiedene dinge

  1. Implizite Parameter. Diese erschienen in Haskell und vielleicht zuerst in anderen Sprachen. Nachweise: Dieses Papier aus dem Jahr 2000 und GHC 5.04.1 Dokumentation (September 2002, bevor es war eine Scala)
  2. Implizite Konvertierungen. Ich kenne die erste Sprache nicht, aber sie war in C # 1.0 (unter Verwendung des implictSchlüsselworts), das die erste Version von Scala um etwa ein Jahr vorläuft.
Philip JF
quelle
+1, ich wusste nicht, dass implizite Konvertierungen in C # verfügbar sind. Danke für den Hinweis.
Frank