Size: a a a

2020 August 15

p

polunin.ai in rust_offtopic
Telegram
Мюсли Foland'a
Я тут кое что осознал. Когда мы пишем Foo<Type1, Type2> мы на самом деле под этим подразумеваем Foo { field1: Type1, field2: Type2 }. Почему бы эту неявность не перевести в явность и дать возможность заабузить?

Шаг первый: разрешение на получение доступа к полям на уровне типов.
Можно предложить такой синтаксис (здесь и далее примеры на псевдо-Haskell):
data Vect s t = MkVect { size :: s, ... }
head :: Vect (size :: Nat) t -> t
Таким образом мы объявляем структуру данных Vect с обобщённым параметром size - размером вектора и t - типом элемента.

Шаг второй: обобщенные параметры по умолчанию.
С предыдущей записью нам пришлось бы записывать для каждого использования типа size :: Nat, что выглядит вербозно. Обобщенные параметры по умолчанию уже реализованы в языке Rust. Перепишем наш прошлый пример:
data Vect (size :: Nat) t = ...
head :: Vect size t -> t
Выглядит довольно симпатично!

Шаг третий: посыпаем refinement типами.
Здесь я буду использовать синтаксис очень схожий с refinementd, где вы можете почитать…
источник

А⚙

Антон ⚙️ in rust_offtopic
polunin.ai
Telegram
Мюсли Foland'a
Я тут кое что осознал. Когда мы пишем Foo<Type1, Type2> мы на самом деле под этим подразумеваем Foo { field1: Type1, field2: Type2 }. Почему бы эту неявность не перевести в явность и дать возможность заабузить?

Шаг первый: разрешение на получение доступа к полям на уровне типов.
Можно предложить такой синтаксис (здесь и далее примеры на псевдо-Haskell):
data Vect s t = MkVect { size :: s, ... }
head :: Vect (size :: Nat) t -> t
Таким образом мы объявляем структуру данных Vect с обобщённым параметром size - размером вектора и t - типом элемента.

Шаг второй: обобщенные параметры по умолчанию.
С предыдущей записью нам пришлось бы записывать для каждого использования типа size :: Nat, что выглядит вербозно. Обобщенные параметры по умолчанию уже реализованы в языке Rust. Перепишем наш прошлый пример:
data Vect (size :: Nat) t = ...
head :: Vect size t -> t
Выглядит довольно симпатично!

Шаг третий: посыпаем refinement типами.
Здесь я буду использовать синтаксис очень схожий с refinementd, где вы можете почитать…
Ох, ещё канал
источник

SP

Stanislav Popov in rust_offtopic
каждому нужен канал
источник

p

polunin.ai in rust_offtopic
Антон ⚙️
Ох, ещё канал
Ну все важное сюда буду постить
источник

p

polunin.ai in rust_offtopic
Stanislav Popov
каждому нужен канал
+
источник

p

polunin.ai in rust_offtopic
В чате мысли теряются
источник

SP

Stanislav Popov in rust_offtopic
и чат
источник

В

Вафель in rust_offtopic
Stanislav Popov
каждому нужен канал
...так был придуман твиттер
источник

SP

Stanislav Popov in rust_offtopic
да, антон?
источник

p

polunin.ai in rust_offtopic
@insert_reference_here ты перестал читать чаты?
источник

А⚙

Антон ⚙️ in rust_offtopic
polunin.ai
@insert_reference_here ты перестал читать чаты?
Сейчас начал снова
источник

В

Вафель in rust_offtopic
помянем
источник

В

Вафель in rust_offtopic
божн
источник

b

badtrousers in rust_offtopic
фух
источник

b

badtrousers in rust_offtopic
ну я написал в @rust_jobs
источник

В

Вафель in rust_offtopic
испугался что коммиты пропали, а их просто реально всего 6, репозиторий новый "
источник

А⚙

Антон ⚙️ in rust_offtopic
Вафель
помянем
Все те тысячи непрочитанных мною сообщений?
источник

В

Вафель in rust_offtopic
Антон ⚙️
Все те тысячи непрочитанных мною сообщений?
Тебя
источник

В

Вафель in rust_offtopic
сообщения то и хрен с ними
источник

p

polunin.ai in rust_offtopic
badtrousers
ну я написал в @rust_jobs
Местонахождение, есть ли удаленка, вилка, компания где??
источник