Как стать автором
Обновить
32
0.8
Константин @Cerberuser

Разработчик, экспериментатор

Отправить сообщение

Имитируем функционал зависимых типов в системе типов Rust

Время на прочтение30 мин
Количество просмотров7.4K

Системы типов — это настоящее безумие.


КДПВ в подражание XKCD


Некоторое время назад я уже отметился здесь со статьёй, в которой пытался разобрать, какие гарантии в compile-time может дать система типов Rust. Кое-какие интересные моменты удалось выловить уже тогда, однако больше всего меня зацепил весьма развёрнутый комментарий, описывающий некоторые вещи, доступные в зависимо-типизированном Idris.
Разумеется, я не мог остаться в стороне. Результат исследований доступен на github, а детальный разбор — под катом.

Читать дальше →
Всего голосов 42: ↑42 и ↓0+42
Комментарии24

Null подкрался незаметно: ломаем Scala Option с помощью Java

Время на прочтение5 мин
Количество просмотров3.4K

Приветствую, Хабр! Предлагаю вашему вниманию небольшую пятничную статью про Java, Scala, ненормальных программистов и нарушенные обещания.




Простые наблюдения иногда приводят к не очень простым вопросам.


Вот, к примеру, простой и внешне, пожалуй, даже тривиальный факт, гласящий, что в Java можно расширять любой не-final класс и любой интерфейс в области видимости. И другой, тоже достаточно простой, гласящий, что Scala-код, скомпилированный для JVM, может использоваться из Java-кода.


Сочетание этих двух фактов, однако, заставило меня задаться вопросом: а как поведёт себя с точки зрения Java какой-нибудь класс, который в Scala является sealed, т.е. не может быть расширен внешним относительно его собственного файла кодом?



Декомпилированный Scala-класс в представлении художника. Источник: https://specmahina.ru/wp-content/uploads/2018/08/razobrannaya-benzopila.jpg


В качестве подопытного кролика я взял стандартный класс Option. Скормив его декомпилятору, встроенному в IntelliJ Idea, получаем примерно следующее:


// опустим импорты, они сейчас не слишком интересны
public abstract class Option 
implements IterableOnce, Product, Serializable {
    // кучка реализаций методов
    public abstract Object get();
    // ещё кучка реализаций методов
}
- Ага! - сказали суровые сибирские мужики...
Всего голосов 16: ↑12 и ↓4+8
Комментарии11

Tests vs. Types — Rust version

Время на прочтение5 мин
Количество просмотров2.4K

A few days ago 0xd34df00d has published the translation of the article, describing the possible information about some function if we use it as a "black box", not trying to read its implementation. Of course, this information is quite different from language to language; in the original article, four cases were considered:


  • Python — dynamic typing, almost no information from signature, some hints are gained by the tests;
  • C — weak static typing, a little more information;
  • Haskell — strong static typing, with pure functions by default, a lot more information;
  • Idris — dependent typing, compiler can prove the function correctness.

"Here's C and there's Haskell, and what about Rust?" — this was the first question in the following discussion. The reply is here.

Read more →
Всего голосов 18: ↑18 и ↓0+18
Комментарии0

Тесты или типы? — Rust version

Время на прочтение6 мин
Количество просмотров9.3K

Пару дней назад 0xd34df00d опубликовал здесь перевод статьи, описывающей, что можно узнать о функции в разных языках, если рассматривать её как "чёрный ящик", не используя информацию о её реализации (но, разумеется, не мешая ей пользоваться компилятору). Разумеется, получаемая информация очень сильно зависит от языка — в исходной статье рассматривались четыре примера:


  • Python — динамически типизированный, информации минимум, какие-то подсказки дают только тесты;
  • C — слабо статически типизированный, информации ненамного больше;
  • Haskell — сильно статически типизированный, с чистыми функциями, информации существенно больше;
  • Idris — язык с зависимыми типами, информации достаточно, чтобы во время компиляции доказать корректность функции.

"Есть C, есть Haskell, а где же Rust?!" — немедленно прозвучал вопрос. Ответ — под катом.

Читать дальше →
Всего голосов 51: ↑51 и ↓0+51
Комментарии55

Информация

В рейтинге
1 420-й
Откуда
Новосибирск, Новосибирская обл., Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Fullstack Developer
Senior