Eigenschaften vs. Pakete in Scala

8

Nach dem Anschauen von Martins Keynote zu Reflection und Compilers I scheint mir diese verrückte Frage nicht aus dem Kopf zu kriegen. Martin spricht unter anderem über das "(Wedding) Cake Pattern", bei dem Eigenschaften die zentrale Rolle spielen. Ich frage mich, warum in der Welt brauchen wir Pakete, wenn wir bereits Eigenschaften haben? Gibt es etwas, das package kann, was ein trait (zumindest theoretisch) nicht kann?

Ich spreche nicht über die aktuelle Implementierung, ich versuche mir nur vorzustellen, wie Programmierung aussehen würde, wenn wir Pakete durch Eigenschaften ersetzen würden. In meinem Kopf wäre es so:

  • ein Keyword weniger ( package ist nicht erforderlich)
  • keine Notwendigkeit für package object s

Um alle meine Fragen zusammenzufassen:

  1. Ist es theoretisch möglich, Pakete aus der Sprache zu entfernen und stattdessen Eigenschaften zu verwenden?
  2. Welche anderen Vorteile würden wir aus dieser Änderung ziehen? (Ich habe über erstklassige Pakete und erstklassige Importe nachgedacht, aber Mix-Komposition ist eine Kompilierungszeit, obwohl die Super-Aufrufe dynamisch gebunden sind)
  3. Ist Java / JVM-Kompatibilität das einzige, was dem im Weg stehen würde?

Aktualisieren

Daniel Spiewak spricht in dieser Keynote über die Dependency-Injektion, die nur die Spitze des Eisbergs von all dem Zeug darstellt Sie können mit dem Kuchenmuster tun.

    
agilesteel 28.07.2012, 10:39
quelle

2 Antworten

7

Martin Odersky hat gesagt, dass Scala nur mit Eigenschaften, Objekten, Methoden und Wegen auskommt (ich hoffe, ich habe etwas nicht vergessen).

Beide Klassen und Pakete sind nur da, weil Scala eine gehostete Sprache sein soll, dh eine Sprache, die läuft (das ist eigentlich nicht das interessante Bit) und arbeitet mit zusammen (das ist wichtig Punkt) eine Host-Plattform. Einige der Host-Plattformen, mit denen Scala zusammenarbeiten soll, sind die Java-Plattform und die CLI, die beide ein Konzept von Klassen und Paketen (Namespaces im Fall der CLI) haben, das deutlich genug ist, dass es nicht so einfach ausgedrückt werden kann Eigenschaften oder Objekte. Dies ist im Gegensatz zu Schnittstellen, die trivial zu und von rein abstrakten Merkmalen abgebildet werden können.

Die obige Aussage wurde in einer Diskussion über das potentielle Entfernen von Generika aus Scala gemacht, weil alles, was Generika machen können, auch durch abstrakte Typen erreicht werden kann.

    
Jörg W Mittag 28.07.2012, 23:41
quelle
6

In scala dienen Objekt und Paket fast demselben Zweck und Objekte werden auch Module genannt. Objekte müssen als Module betrachtet werden, da sie beliebige Definitionen enthalten können, einschließlich anderer Objekte natürlich und, im wesentlichen, Typen.

Ein Merkmal kann man sich als abstraktes Modul vorstellen. Es kann eine beliebige Definition enthalten und jedes Mitglied kann abstrakt sein, einschließlich wiederum signifikant type members. Ich rezitiere all das nur, um die Symmetrie hervorzuheben. Vielleicht scheinen OT, aber für mich, Eigenschaften eine so große Neuerung in der Scala zu sein wie die Verschmelzung von Objekt und funktionalen Ideen.

Um endlich eine Antwort zu geben:

  1. Ich denke, Pakete könnten zugunsten von Objekten (nicht Merkmalen) entfernt werden.
  2. Der Vorteil wäre eine Vereinfachung - Paketobjekte müssten nicht explizit definiert werden.
  3. Ich denke Pakete unterscheiden sich von Objekten für Java / JVM-Kompatibilität.

Noch ein Kommentar: Martin spricht in seinem Video von Eigenschaften (abstrakten Modulen) mehr als von konkreten Modulen, weil letztere erst im letzten Moment erscheinen, um eine Kombination von abstrakten Modulen zu sammeln und zu vereinheitlichen.

Es ist gut, abstrakte Module zu verwenden, auch wenn Sie nicht "einen Kuchen mischen". z.B. Beim Skizzieren von Code können Sie ein Modul definieren, das Definitionen enthält. Aber sobald Sie zu einem Typ oder Wert kommen, den Sie nicht ausfüllen möchten, geben Sie keinen Dummy wie Null an. Wechseln Sie stattdessen das Objekt zu einem Merkmal und lassen Sie das Element abstrakt.

    
Arnold deVos 28.07.2012 11:48
quelle

Tags und Links