Как стать автором
Обновить
4
0.1

Пользователь

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

Arend – язык с зависимыми типами, основанный на HoTT (часть 1)

Время на прочтение21 мин
Количество просмотров9.6K
В данном посте мы поговорим о только что выпущенном JetBrains языке с зависимыми типами Arend (язык назван в честь Аренда Гейтинга). Этот язык разрабатывался JetBrains Research на протяжении последних нескольких лет. И хотя репозитории уже год назад были выложены в открытый доступ на github.com/JetBrains, полноценный релиз Arend случился лишь в июле этого года.

Мы попробуем рассказать, чем Arend отличается от существующих систем формализованной математики, основанных на зависимых типах, и о том, какая функциональность уже сейчас доступна его пользователям. Мы предполагаем, что читатель настоящей статьи в целом знаком с зависимыми типами и слышал хотя бы про один из языков, основанных на зависимых типах: Agda, Idris, Coq или Lean. При этом мы не рассчитываем, что читатель владеет зависимыми типами на продвинутом уровне.

Для простоты и конкретности наш рассказ об Arend и гомотопических типах будет сопровождаться реализацией на Arend простейшего алгоритма сортировки списков — даже на этом примере можно почувствовать отличие Arend от Agda и Coq. На Хабре уже есть ряд статей, посвященных зависимым типам. Скажем, про реализацию сортировки списков методом QuickSort на Agda есть вот такая статья. Мы будем реализовывать более простой алгоритм сортировки вставками. При этом основное внимание уделим конструкциям языка Arend, а не самому алгоритму сортировки.
Читать дальше →
Всего голосов 31: ↑30 и ↓1+29
Комментарии22
Сколько можно приравнивать всех программистов к компьютерщикам (и чудикам) и приписывать им магические свойства, навязанные кинематографом и анекдотами из курилок? Поэтому в день программиста пора внести ясность, как обстоят дела у разработчиков на самом деле. В этом материале нет места вязаным свитерам, шлепанцам и очкам в нелепой оправе.
Подробности – под катом
Всего голосов 54: ↑39 и ↓15+24
Комментарии88

Я бросил работу мечты, потому что не переношу продуктовую разработку

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


На днях друг хвастался мне, что завернул на собесе чувака, который работал только в аутстафах. Друг работает в продуктовой компании и твердо убежден — от придурков с галер нет никакой пользы. Там работают бездушные наемники, профессиональные проходимцы собеседований и лентяи. Говорит, продукт загнется раньше, чем они подберут себе цветовую тему в IDE.

Мой друг категоричен, и ненавидит аутстафы даже больше, чем они заслуживают. Он считает, аутстафы убивают саму суть разработки. Берут плохих разрабов, натаскивают проходить собесы, продают подороже в корпорации, где все устаканено, и вопрос выживания вообще не стоит, и просто живут спокойно на попиле денег и имитации работы. В общем, ненавидит их как трудяга-коммунист биржевых брокеров.

А я всю жизнь работал в аутстафах, и, конечно же, считаю по-другому. И я хотел осудить друга, но вспомнил как сам отказывался брать продуктовых разрабов на собеседованиях.
Читать дальше →
Всего голосов 125: ↑81 и ↓44+37
Комментарии161

Excelsior JET прекращает разработку своего AOT-компилятора после 18 лет работы

Время на прочтение1 мин
Количество просмотров20K
Те, кто следит, что происходит с платформой Java, вероятно, в теме, что есть очень интересный AOT-компилятор для Java, разработанный российской компанией из Новосибирска. Это один из тех проектов, которыми можно гордиться.
Читать дальше →
Всего голосов 56: ↑55 и ↓1+54
Комментарии39

Аппликативные парсеры на Haskell

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


Мотивация


Когда я только начинала осваивать Haskell, меня очень раздражало повсеместное использование сложных абстракций вместо каких-то конкретных решений. Мне казалось, что гораздо лучше всегда следовать принципу KISS и писать велосипеды с использованием элементарных конструкций языка, чем разбираться во всех этих классах типов, чтобы где-то в итоге написать одну якобы удобную конструкцию.


Мне не хватало хорошего примера, где бы окупались усилия, потраченные на освоение "матчасти". Для меня одним из самых удачных таких примеров оказались парсеры. Теперь я довольно часто рассказываю про них, когда у меня спрашивают, для каких распространённых задач можно красиво использовать Haskell.


Я хочу предложить начинающим тоже пройти этот путь и создать с нуля небольшую базу функций для удобной реализации парсеров, а затем использовать её для написания собственного парсера, код которого будет практически дословно повторять грамматику, по которой осуществляется разбор.


Надеюсь, кому-то это поможет перебороть страх абстракций и научит уместно их использовать (да, я всё ещё считаю, что иногда бывает эффективней написать велосипед).

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

Десять вещей, которые можно делать с GraalVM

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


От переводчика: GraalVM — новая, интересная технология, но на Хабре по ней не так много статей, которые бы могли показать примеры возможностей Graal. Статья ниже — это не просто перечисление того, что GraalVM умеет, но ещё и небольшой мастер-класс, аналогичный тому, который Chris Seaton и Олег Шелаев проводили на Oracle CodeOne 2018. Вслед за автором, призываю — пробуйте делать примеры из статьи, это действительно интересно.


В GraalVM много всего разного, и, если вы слышали это название раньше, или даже видели доклады, то все равно есть много вещей, о которых вы наверняка ещё не знаете, но которые GraalVM может делать. В этой статье мы рассмотрим разнообразные возможности, которые предоставляет GraalVM и покажем, что с их помощью можно сделать.


  1. Быстрое выполнение Java
  2. Уменьшение времени старта и потребления памяти для Java
  3. Комбинирование JavaScript, Java, Ruby и R
  4. Исполнение программ, написанных на платформо-зависимых языках
  5. Общие инструменты для всех языков программирования
  6. Дополнение JVM приложений
  7. Дополнение платформо-зависимых приложений
  8. Код Java как платформо-зависимая библиотека
  9. Поддержка нескольких языков программирования в базе данных
  10. Создание языков программирования для GraalVM
Читать дальше →
Всего голосов 38: ↑37 и ↓1+36
Комментарии22

Что, опять? Возрождение небанковских дебетовых карт

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

В 2007 году СМИ пестрели заголовками о революционном продукте, который изменит судьбы мерчантов и даст потребителям бесчисленные выгоды. Аналитики назвали продукт «историческим шансом» улучшить проседающие показатели прибыли. А инноваторы бросились создавать новые приложения, чтобы ухватиться за эту возможность.

Что это было? Нет, не iPhone, хотя такое предположение вполне логично. Речь идет о дебетовых картах без привязки к банкам.

Виновником «революции» стал Capital One, один из крупнейших банковских холдингов. Его предложение многие посчитали гениальным ходом на фоне нехватки спроса на срочные депозиты и отсутствия у организаций иных способов предоставления дебетовых предложений, которые бы привлекали и удерживали потребителей.

Небольшая историческая справка
На самом деле с подобным предложением первой выступила компания Tempo, созданная в 2000 году, несколько лет неудачно пытавшаяся достичь популярности у мерчантов и выкупленная в 2006 году компанией HSBC.

Новый продукт получал средства с депозитных счетов других эмитентов и работал у любого мерчанта, принимающего MasterCard. С его помощью холдинг Capital One одновременно предлагал потребителям нечто свежее и реализовывал инновационную бизнес-модель, вокруг которой создавалась новая программа лояльности.

Для пользователей выгода состояла в получении функциональности, схожей с дебетовыми продуктами. Средства для оплаты услуг мерчантов брались напрямую с пользовательских чековых счетов, и не возникало необходимости переносить свой депозитный счет в некий новый банк ради выгодного кэшбека.

Вдохновленные перспективами, ритейлеры принялись разрабатывать собственные продукты с теми же преимуществами: дебетовой функциональностью, крупными вознаграждениями для лояльных клиентов и уменьшенным размером межбанковской комиссии для всех транзакций в своих магазинах.

И эти усилия…
Читать дальше →
Всего голосов 22: ↑16 и ↓6+10
Комментарии6

Зависимые типы — будущее языков программирования

Время на прочтение7 мин
Количество просмотров27K
Всем привет!

Несмотря на диковинность и некоторую отвлеченность рассматриваемой сегодня темы — надеемся, что она сможет разнообразить вам выходные. В конце поста помещаем три ссылки от автора, позволяющие познакомиться с зависимой типизацией в Idris, F* и JavaScript
Читать дальше →
Всего голосов 40: ↑35 и ↓5+30
Комментарии107

Учим поросёнка на моноидах верить в себя и летать

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

В одной из предыдущих статей я рассказывал о том, как можно построить исполнитель программ для виртуальной стековой машины, используя подходы функционального и языково-ориентированного программирования. Математическая структура языка подсказала базовую структуру для реализации его транслятора, основанную на концепции полугрупп и моноидов. Этот подход позволил построить красивую и расширяемую реализацию и сорвать аплодисмент, но первый же вопрос из зала заставил меня слезть с трибуны и снова залезть в Emacs.



Я провёл простое тестирование и убедился в том, что на простых задачах, использующих только стек, виртуальная машина работает шустро, а при использовании "памяти" — массива со случайным доступом — начинаются большие проблемы. О том, как удалось их решить, не меняя базовых принципов архитектуры программы и достичь тысячекратного ускорения работы программы, и пойдёт речь в предлагаемой вашему вниманию статье.

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

Информация

В рейтинге
2 399-й
Зарегистрирован
Активность