Pull to refresh
4
0.1
Send message

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

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

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

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

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

Reading time 5 min
Views 52K


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

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

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

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

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

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

Reading time 13 min
Views 16K


Мотивация


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


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


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


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

Читать дальше →
Total votes 41: ↑41 and ↓0 +41
Comments 56

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

Reading time 22 min
Views 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
Читать дальше →
Total votes 38: ↑37 and ↓1 +36
Comments 22

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

Reading time 7 min
Views 15K

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

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

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

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

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

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

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

И эти усилия…
Читать дальше →
Total votes 22: ↑16 and ↓6 +10
Comments 6

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

Reading time 7 min
Views 27K
Всем привет!

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

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

Reading time 14 min
Views 10K

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



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

Читать дальше →
Total votes 41: ↑41 and ↓0 +41
Comments 16

Information

Rating
2,741-st
Registered
Activity