Как выглядит граф типов в Julia?

Я только начал искать Юлию. Меня интересует, как он выполняет множественную отправку, в частности, как он определяет тип для использования в множественной отправке.

Во введении к Типам manual говорится:

все значения в Julia являются истинными объектами, имеющими тип, принадлежащий одному полносвязному графу типов, все узлы которого одинаково первоклассны, как и типы

У меня вопрос: как связан граф типов?

Например, где бы уместилось Array из Integer? Это подтип Array или подтип Integer? Оба?

Как насчет Complex чисел? Могу ли я иметь Array (2x1) из Rational и Duples (2-кортежи) из Integers обоих быть Complex?

# This is my first Julia code ever. It is probably wrong.
abstract type Rational <: Number end
abstract type Integer <: Rational end
abstract type Complex <: Array{Integer, 2} end
abstract type Complex <: Tuple{Rational, Rational} end
(1, 2)::Complex * (1, 2)::Complex

В двух приведенных выше примерах я использую "code font" для обозначения абстрактных типов.

Может быть, пример кода - неправильная концепция? Может, мне стоит вместо этого определить сложную функцию умножения?

Можете ли вы показать мне рисунок графа типов для встроенных типов?


person Ana Nimbus    schedule 05.03.2021    source источник
comment
Это сложно.   -  person phipsgabler    schedule 06.03.2021
comment
Спасибо, @phipsgabler. Для других читателей этой статьи в аннотации сложной статьи говорится, что эта статья представляет собой первый формальный определение отношения подтипа Джулии и мотивирует его дизайн.   -  person Ana Nimbus    schedule 06.03.2021


Ответы (1)


Вот дерево типов чисел, взятое из https://github.com/bkamins/The-Julia-Express Эта ссылка также будет полезна при первом чтении.

введите описание изображения здесь

В иерархии типов вы можете увидеть:

  • абстрактные типы - они предназначены для определения общей структуры типов. В Julia можно наследовать только от абстрактного типа. Следовательно, все типы ветвления в этом дереве абстрактны.
  • конкретные виды - это все листья
  • параметрические типы. Это значения, которые идут после {}. T <: Integer означает, что любой параметрический тип, являющийся подтипом Integer, будет принят как параметрический тип. Параметрические типы позволяют вам иметь такие вещи, как Complex{Float64} и Complex{Int}, то есть комплексные числа, определенные в различных пространствах типов. С множественной отправкой Джулии такие волшебные вещи, как эта, просто работают.

Надеюсь, это поможет для начала. Еще один полезный бесплатный ресурс - https://juliaacademy.com/.

person Przemyslaw Szufel    schedule 06.03.2021