Files
JuliaKurs23/nb/types.ipynb
T
2023-05-12 20:12:56 +02:00

4.4 KiB

Cell:
[Cell type raw - unsupported, skipped]

Das Typsystem von Julia

Man kann umfangreiche Programme in Julia schreiben, ohne auch nur eine einzige Typdeklaration verwenden zu müssen. Das ist natürlich Absicht und soll die Arbeit der Anwender vereinfachen.

Wir blicken jetzt trotzdem mal unter die Motorhaube.

Die Typhierarchie

Das Typsystem hat die Struktur eines Baums, dessen Wurzel der Typ Any ist. Mit den Funktionen subtypes() und supertype() kann man den Baum erforschen. Sie zeigen alle Kinder bzw. die Mutter eines Knotens an.

In [ ]:
subtypes(Int64)

Das Ergebnis ist eine leere Liste von Typen. Int64 ist ein sogenannter konkreter Typ und hat keine Untertypen.

Wir klettern jetzt mal die Typhierarchie auf diesem Ast nach oben bis zur Wurzel (Informatiker-Bäume stehen bekanntlich immer auf dem Kopf).

In [ ]:
supertype(Int64)
In [ ]:
supertype(Signed)
In [ ]:
supertype(Integer)
In [ ]:
supertype(Real)
In [ ]:
supertype(Number)

Das wäre übrigens auch schneller gegangen: Die Funktion supertypes() (mit Plural-s) zeigt alle Vorfahren an.

In [ ]:
supertypes(Int64)

Nun kann man sich die Knoten angucken:

Mit einer kleinen rekursiven Funktion kann man schnell einen ganzen (Unter-)Baum ausdrucken:

::::{.content-hidden unless-format="xxx"}

...und natürlich gibt es da auch ein Julia-Paket:

:::

::: {.content-visible when-format="html"} :::

::: {.content-visible when-format="pdf"} The type tree of numbers {width=50%} :::

Abstrakte und Konkrete Typen

  • Ein Objekt hat immer einen konkreten Typ.
  • Komkrete Typen haben keine Untertypen mehr, sie sind immer „Blätter“ des Baumes.
  • Abstrakte Typen können in der Definition von Funktionstypen, Argumenttypen, Elementtypen von zusammengesetzten Typen,... verwendet werden

https://github.com/carstenbauer/JuliaCologne21/blob/master/Day1/1_types_and_dispatch.ipynb

Zum Deklarieren und Testen der "Abstammung" gibt es einen eigenen Operator:

In [ ]:
Int64 <: Number