Шпаргалка по типам Julia для инженеров и не только

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Введение

Эта статья призвана помочь и тем, кто уже давно использует Julia, и тем, кто только начинает её изучать. Благо совсем скоро начнётся Зимняя школа Julia, где можно будет познакомиться с этим по-настоящему замечательным языком.

Мой путь к написанию этой статьи лежал через погружение в работу с массивами, векторами и матрицами в Engee – среде расчётов и моделирования, в которой Julia является основным языком. И в сообществе которой лежит код этой статьи.

Синтаксис, похожий на Python и MATLAB, позволял мне спокойно работать над инженерными проектами, совмещая скрипты и визуальное моделирование. Но мне было сложно понять, почему вектор-столбец

v = [1
     2
     3]

- вектор размера (3,), а вектор-строка m = [1 2 3] - матрица размера (1,3).

И зная о том, что Julia - это крайне эффективный для вычислений язык, я допускал классические ошибки:

a = collect(1:10)
for i in a
    ...
end

Ведь в MATLAB это было реализовано именно так (в нём range - это массив):

По прочтении этой статьи вы поймёте, почему не стоит использовать collect там, где это не нужно.

Но потом мне стало интересно, как же range, занимая всего 48 байт, обладает всем функционалом массива в виде индексации, сортировки и пр:

sizeof([2:0.5:100;])  # 1546 байт
sizeof(2:0.5:100)     # 48   байт

И, погрузившись в документацию, благо она переведена на русский, я пошёл искать ответы на то, почему Julia так здорово работает с range.

В итоге «искал медь», а нашёл золото. Оказывается, система типов в Julia действительно очень интересная.

Было бы странно переписывать документацию на Хабр, поэтому

эта статья призвана собрать в одном месте и в общих чертах (но с неочевидными иногда особенностями) описать систему типов и их предназначение в Julia.

А также получить ответы на вопросы, поставленные выше.

Типы в Julia

Что мне так нравится в Julia, так это её реальное и удобное в изучении совмещение низкого и высокого уровня – от указания того, сколько бит будет занимать ваш тип, до теории типов в виде пересечения, низшего и высшего типов и многого другого.

Несмотря на то, что в документации и многих других статьях про типы пошли по более «идеоматическому» пути, сразу рассказывая про абстрактные типы, я предлагаю пойти по более классическому, «С-подобному» пути, и идти снизу-вверх.

Но перед погружением соберём в одном месте сразу все определения, рассчитывая на то, что читатель знаком с хотя бы некоторыми примерами, которые указаны после символа

Источник: https://habr.com/ru/companies/etmc_exponenta/articles/882178/


Интересные статьи

Интересные статьи

Попадание внутренней корпоративной информации в чужие руки — страшный сон для любого бизнеса. Последствия таких инцидентов могут быть непредсказуемыми, от утечек данных клиентов и сопутствующих штрафо...
Российские университеты и колледжи предлагают обязать использовать отечественное ПО при обучении студентов строительных специальностей. С такой инициативой выступила ассоциация «Национальное объединен...
Всем привет! Я Ира — тимлид команды, которая занимается развитием и поддержкой публичного API hh.ru.Несколько лет назад к нам пришли ребята из мобильной команды и сказали, что хотят документацию в Ope...
Приятно познакомиться, мы битриксоиды. Да-да, те самые которые:- вообще не модные,- пишут НЕ на Laravel и Symphony,- возятся с кучей мягко говоря “неидеального” кода под названием “1С-Битрикс: Управле...
«Битрикс» — кошмар на костылях. Эта популярная характеристика системы среди разработчиков и продвиженцев ныне утратила свою актуальность.