Pull to refresh

Открыта регистрация участников на Международную конференцию по функциональному программированию

Reading time2 min
Views1.4K


ICFP 2020 — двадцать пятая конференция под эгидой ACM SIGPLAN. В этом году конференция будет проводиться онлайн, и все события, проходящие в её рамках, будут онлайн.


Соревнование ICFP по программированию будет проводиться с 17 июля по 20 июля 2020 года (то есть, уже через два дня).


Сама конференция будет проходить с 24 по 26 августа 2020, и укладываться в два тайм-слота. Первый слот будет проходить с 9:00 до 17:30 по времени Нью-Йорка, и будет включать как технические, так и социальные мероприятия. Второй тайм-слот будет проходить с 9:00 до 17:30 по Пекинскому времени, на следующий день, и будет с незначительными вариациями повторять содержимое предыдущего дня, включая технические и социальные мероприятия.

Читать дальше →
Total votes 7: ↑7 and ↓0+7
Comments2

Ноутбук с Lisp, годами работающий от батареи

Reading time2 min
Views30K

Андрэас Эриксен (Andreas Eriksen) в рамках Hackaday Low-Power Challenge представил свой проект ноутбука PotatoP. Работающий на микроконтроллере с портированным Lisp, этот ноутбук, созданный с нуля, должен, в конце концов, работать полностью автономно.

Читать далее
Total votes 57: ↑56 and ↓1+55
Comments122

Современная игра для NES, написанная на Lisp-подобном языке

Reading time10 min
Views8.2K
What Remains — это повествовательная игра-адвенчура для 8-битной видеоигровой консоли NES, выпущенная в марте 2019 года как бесплатный ROM, запускаемый в эмуляторе. Она создавалась небольшой командой Iodine Dynamics на протяжении двух лет с перерывами. В настоящий момент игра находится на этапе реализации в «железе»: мы создаём из переработанных деталей ограниченный набор картриджей.


В игре есть 6 уровней, на которых игрок ходит по нескольким сценам с картами с прокруткой в четырёх направлениях, общается с NPC, собирает улики, знакомится их миром, играет в мини-игры и решает простые головоломки. Я был главным инженером проекта, поэтому столкнулся со множеством трудностей при реализации видения команды. Учитывая серьёзные ограничения оборудования NES, достаточно сложно создавать для неё любую игру, не говоря уже о проекте с таким количеством контента, как в What Remains. Только благодаря созданным полезным подсистемам, позволяющим скрыть эту сложность и управлять ею, мы смогли работать как одна команда и завершить игру.


В этой статье я расскажу о некоторых технических подробностях отдельных частей движка игры. Надеюсь, другим разработчикам они окажутся полезными или хотя бы любопытными.
Читать дальше →
Total votes 25: ↑24 and ↓1+23
Comments3

Пол Грэм анонсировал новый язык программирования Bel

Reading time3 min
Views6.8K
Язык Bel написан на языке Bel.

image

В 1960 году Джон МкКарти описал Lisp — новый тип языка программирования. Я говорю «новый тип» потому что Lisp представлял собой не просто новый язык, но новый способ описания языков.

Чтобы определить Lisp, он начал с малого набора операторов, своего рода аксиом, которые затем использовал для написания интерпретатора для самого языка.

Он не ставил целью описать язык программирования в обычном смысле — язык, используемый, чтобы указывать компьютеру, что ему делать. В его работе 1960 года Lisp понимался как формальная модель вычисления сродни Машине Тюринга. МакКарти не задумывался об ее использовании на компьютерах, пока это не предложил Стив Рассел, его дипломник.

В Lisp 1960 года не было возможностей, обычных для языков программирования. Например, там не было чисел, ошибок или ввода/вывода. Поэтому людям, использовавшим Lisp как основу для языков, используемых для программирования компьютеров, приходилось добавлять эти возможности самим. И они делали это за счет отказа от аксиоматичного подхода.
Читать дальше →
Total votes 23: ↑12 and ↓11+1
Comments5

Прагматическое функциональное программирование

Reading time6 min
Views6.3K
Привет, Хабр! Предлагаю вашему вниманию перевод статьи «Pragmatic Functional Programming» автора Robert C. Martin (Uncle Bob).

Переход к функциональному программированию всерьез развился только около десяти лет назад. Мы видим, что такие языки, как Scala, Clojure и F# привлекают внимание. На самом деле это был большой шаг в программировании: “О, круто, новый язык!” — энтузиазм… Видимо там было что-то особенное — ну или это мы так думали.  

Закон Мура гласит нам, что скорость компьютеров будет удваиваться каждые 18 месяцев. Данный закон действовал с 1960-х до 2000 годов. Затем он прекратился. Частота достигла 3 ГГц, а затем и вовсе поднялась на плато. Мы достигли скорости света! Сигналы не могут распространяться по поверхности чипа достаточно быстро, чтобы обеспечить более высокие скорости. 

Это привело к тому, что инженеры оборудования изменили свою стратегию. В попытках увеличить пропускную способность, они добавили больше процессоров (ядер). А чтобы освободить место для этих ядер, они удалили большую часть оборудования для кэширования и конвейеризации из чипов. Из-за этого процессоры стали намного медленнее, чем раньше; однако их стало больше. В итоге увеличилась пропускная способность. 
Читать дальше →
Total votes 21: ↑14 and ↓7+7
Comments20

Открыта подача заявок на Scheme and Functional Programming Workshop 2020

Reading time4 min
Views862
image

Научно-практическая конференция Scheme and Functional Programming Workshop 2020 открывает подачу заявок на доклады.


Scheme and Functional Programming Workshop — это ежегодное мероприятие, научно-практическая конференция, на которой собираются специалисты про языкам программирования, эстетически или технологически отвечающим основным принципам, заложенным в Алгоритмическим Языке Scheme: минимализму, сохраняющему универсальность, и тщательному проектированию, обеспечивающему гибкий дизайн.

От докладчиков ожидаются статьи о передовых научных результатах, а также отчёты о практических достижениях, как в инженерной, так и в образовательной сферах, а также развёрнутые предложения по рассмотрению идей сверх-ранней стадии или переосмыслению старых подходов. Приветствуются и поощряются работы, имеющие отношение к любым языкам, входящим в семейство Scheme: от чистых подмножеств RnRS, до «вариаций на тему Схемы», таких как Racket, других диалектов Lisp, включая Closure, Emacs Lisp, Common Lisp, и иных функциональных языков, поддерживающих замыкания и/или макросы (или имеющих таковую поддержку в средствах расширения языка, например, библиотеках). Примерами подобных могут являться Dylan, ECMAScript, Hop, Lua, Scala, Rust и ещё множество других. Общая элегантность работы и релевантность заявленной тебе будут являться более важным критерием оценки, нежели отдельные элементы синтаксиса, в котором реализованы примеры.

Наиболее интересующие темы включают (но не исчерпываются):

Читать дальше →
Total votes 4: ↑4 and ↓0+4
Comments0

А вы знаете, где сейчас используется Лисп?

Reading time5 min
Views32K

Введение


Лисп — второй по старшинству из ныне живых высокоуровневых языков программирования (после Fortran) и первый функциональный язык. Он был разработан в 1958 году и сильно изменился с тех пор, породив множество диалектов и оказав значительное влияние на развитие других языков. На данный момент наиболее известные диалекты: Common Lisp, Scheme, Racket и Clojure.



Слева: Лисп-машина в музее MIT.
Справа: Лисп-машина Symbolics 3640, фото Michael L. Umbricht и Carl R. Friend (Retro-Computing Society of RI)


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


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


Мы в Typeable любим и применяем функциональное программирование, а влияние Лиспа на функциональные языки всё ещё сильно, поэтому нам стало интересно разобраться в этом вопросе.

Читать дальше →
Total votes 48: ↑46 and ↓2+44
Comments48

Какой вклад внесло функциональное программирование в современные языки?

Reading time10 min
Views18K

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


Парадигма программирования — это в первую очередь стиль мышления: то, как программист думает о представлении данных и процессе их обработки. Другими словами, парадигма живёт в голове программиста, а не является свойством языка. Разные языки могут в той или иной степени поддерживать определённую парадигму. Если сейчас зайти на Википедию и начать читать про самые популярные ЯП, мы увидим, что многие из них заявлены как "мультипарадигменные": на них можно писать в разных стилях, но какие-то из них использовать будет удобнее.



В своей недавней статье мы рассказывали о практических применениях Лиспа и упомянули, что он сильно повлиял на развитие других языков программирования, но не стали вдаваться в детали. Пришло время более подробно раскрыть эту тему и разобраться, какой вклад функциональное программирование в целом (не только Лисп!) внесло в развитие других языков. Поскольку мы используем Haskell как основной язык разработки, и наша команда разработчиков состоит из ФП-энтузиастов, мы не смогли пройти мимо такой темы.


В этом посте рассмотрим несколько механизмов, которые либо зародились в ФП-языках, либо нашли в них наибольшее применение и были ими популяризованы, и в итоге появились в языках, изначально не функциональных.

Читать дальше →
Total votes 49: ↑48 and ↓1+47
Comments15

Как я пишу на LaTeX в Emacs быстрее, чем от руки

Reading time17 min
Views24K


Когда Жиль Кастель задокументировал метод ведения математических записей в Vim в реальном времени, многие захотели добиться тех же скорости и удобства ввода LATEX в Emacs1.

Я работаю на LaTeX весь день: уравнения пишу так же быстро, как на бумаге. И даже быстрее. Почему? За размышлением всегда следует работа пальцев. И это — та ситуация, когда количество переходит в качество. Хотя мои рекомендации — лишь 90 % решения.
Читать дальше →
Total votes 53: ↑51 and ↓2+49
Comments9

Что такое алгоритм… Часть [05:00] «Искусственный интеллект»

Reading time21 min
Views5.2K

На алгоритмической арене будет дано новое представление. Под куполом "Искусственного интеллекта" покажут потолок своих возможностей "Языки программирования" в столкновении с ограничениями, унаследованными от естественных языков. Будут продемонстрированы особенности использования структуры, контролирующей последовательность исполнения алгоритма. Мы приоткроем секреты фокуса "Китайская комната". Выясним на какой алгоритмический путь вступила технология искусственных нейронных сетей (ИНС). А самое главное подготовим почву для заключительной статьи, призванной зафиксировать единственно возможный способ синтеза информации.


Итак, время пришло. Мы начинаем...


Title


Осторожно. Под катом много перегруженных предложений, а главная функция иллюстраций — задавать повествованию ритм.

Читать дальше →
Total votes 4: ↑2 and ↓20
Comments6

Nanopass или как я писал компилятор этой осенью

Reading time8 min
Views5.2K

image


Сразу прошу прощения за несколько надоевший всем стиль «lytdybr», но уж очень хочется поделиться крайне приятным опытом и рассказать о по-своему замечательном компиляторном курсе. И это ещё хорошо, что я пишу сейчас, когда эмоции подугасли, а не когда я только закончил вторую главу курса и от эйфории чувствовал себя как «хомячок, которого капля никотина разрывает на части»! Сразу предупреждаю, наверняка для кого-то эта заметка — «ребёнок познаёт мир», тех прошу сразу закрыть вкладку и не судить строго. Здесь и далее, всегда и всюду, во всех четырёх сферах прошу учитывать, что я не только не создаю компиляторы, но даже и не обучаю этому и не пишу методички! ;-)

Читать дальше →
Total votes 29: ↑29 and ↓0+29
Comments29

Первый древнейший: в чём уникальность языка программирования LISP

Reading time10 min
Views35K

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

Лисп, или LISP (от англ. LISt Processing language — «язык обработки списков», современное написание: Lisp) — семейство языков программирования, программы и данные в которых представляются в виде списков.

Существует альтернативная расшифровка названия LISP: Lots of Irritating Superfluous Parentheses («Много раздражающих лишних скобок») — намёк на особенности синтаксиса языка.

Шутливое «Десятое правило Гринспена» гласит: «Любая достаточно сложная программа на Си или Фортране содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Common Lisp».

Читать далее
Total votes 15: ↑13 and ↓2+11
Comments26

Delinking и Lisp

Reading time9 min
Views5.4K

Экономический термин delinking впервые (насколько я смог отследить) использовал Самир Амин в работе 1984-го года Delinking: Towards a Polycentric World для обозначения процесса выхода из системы глобального разделения труда. По многочисленными (для нашего немногочисленного Lisp сообщества) просьбам сообщников делюсь своим частным рассуждением о потенциале Lisp-систем в условиях delinking-а с более широкой аудиторией. Это мнение из категории «просто подумалось на досуге», оно не является абсолютно объективной истиной, но, вероятно, может представлять некоторый интерес.

Читать далее
Total votes 21: ↑17 and ↓4+13
Comments47

LISP-пакет OMGlib или вперёд к Web 3.0

Reading time8 min
Views4K

Я довольно много программирую, но результатом моей работы обычно
является то, что программа выдает, а не сама программа, как таковая.
Потому, как правило, все мои программы консольные и не имеют никакого
интерфейса. Однако, иногда интерфейс всё же нужен и я в таких случаях
обычно конструирую простейший web-фроненд, бесконечно страдая в рамках
модели MVC. Однажды, размышляя над эволюцией мировой Сети я подумал, а
почему бы не довести идею сайта-как-приложения до логической
завершенности, отказавшись от HTML вообще?

И тут мне в руки попался Common Lisp...
Total votes 18: ↑17 and ↓1+16
Comments21

Библиотека для создания веб-приложений OMGlib, как это работает?

Reading time6 min
Views3.5K

В предыдущем посте я, немного сумбурно, рассказал про библиотечку OMGlib, которая позволяет создавать полностью динамические веб-приложения. Вкратце, идея состоит в следующем: приложение использует браузер для взаимодействия с пользователем, для этого браузер открывает WebSocket-соединение с сервером, после чего просто выполняет получаемый от него javascript-код, отправляя результаты обратно через это же соединение. Все DOM-элементы при этом создаются динамически, через соответствующие функции javascript, без использования HTML вообще. Также, сервер может создавать функции в браузере и вызывать их, сгружая, таким образом, всю логику и механику, связанную с интерфейсом, прямо в браузер. Библиотечка реализована на языке Common Lisp, развитая система макросов которого позволяет писать код единообразно, просто помечая часть функций как browser-side, а компиляция их в JS происходит при помощи JSCL прозрачно для программиста.

Казалось бы, что тут может пойти не так?
Total votes 4: ↑4 and ↓0+4
Comments10

Как начать писать приложения на ClojureDart

Reading time4 min
Views5.1K

16 апреля зарелизился ClojureDart, а это значит, что для любителей Clojure открылась возможность писать мобильные, веб- и десктоп-приложения на Flutter. Зачем использовать для этого Clojure, как бы очевидно это ни было, выходит за границы фокуса статьи.

На текущий момент инструменты еще не отшлифованы, нет репла(!) и автодополнений для dart-интеропа, но пользоваться можно, и некоторые плюшки кложуры уже показали себя (например, nest-макрос, убирающий проблему вложенности).

В этой статье хочу рассказать, как написать свое первое flutter-приложение на Clojure, какими инструментами удобно пользоваться, где искать ответы на вопросы. Статья для тех, кто имеет хотя бы минимальный опыт работы с Clojure.

Читать далее
Total votes 10: ↑9 and ↓1+8
Comments3

Язык-головоломка Marthue

Reading time8 min
Views2.1K

Предлагаю читателям Хабра "эзотерический" язык программирования, обобщающий нормальные алгоритмы Маркова (НАМ) и полусистемы Акселя Туэ (semi-Thue systems). В языке есть возможность интерактивного ввода и вывода, выбора поиска замены подстрок с начала, конца строки или случайным образом, условного рекурсивного вызова одного блока подстановок из другого, а также условного перехода между блоками. Это позволяет совмещать подстановку строк с элементами императивного и даже функционального программирования, а также исследовать недетерминированные алгоритмы.

Интерпретатор написан под Линуксом на языке Common Lisp, который я считаю одним из самых мощных и удобных, в том числе для экспериментальногого программирования. При желании большого труда не составит переписать его на любом популярном языке: например, сделать онлайновую версию в Javascript. Просто для запуска программ Лисп знать практически не нужно: достаточно инсталлировать любую версию Common Lisp и ввести нужный файл парой простых функций. Скачать репозиторий интерпретатора Marthue можно здесь.

Читать далее
Total votes 5: ↑4 and ↓1+3
Comments0

Квазицитирование в Lisp

Reading time39 min
Views3.8K

Аннотация


Квазицитирование (quasiquotation) — это технология, обычно используемая в Lisp для создания программ, генерирующих другие программы. В статье объясняется механизм работы квазицитирования, поясняется почему он работает именно так и каковы его ограничения, а также даётся экскурс в историю квазицитирования.

Читать дальше →
Total votes 21: ↑20 and ↓1+19
Comments22

Прототехноблогер. История человека, придумавшего блогинг, подкастинг и RSS

Level of difficultyEasy
Reading time9 min
Views1.4K

Среди профессий, так или иначе связанных с IT, все чаще упоминаются блогеры. И распространенное в сообществе высококвалифицированных технических специалистов снисходительное отношение к этой сфере деятельности совершенно не оправдано: в конце концов, «Хабр» — это тоже коллективный блог, и здесь точно есть люди, для которых написание увлекательных и интересных текстов — основная работа. Говорят, первый в истории техноблогер появился еще в 1994 году, и именно он положил начало профессии, позволяющей кое-кому зарабатывать миллионы. А еще этого человека называют пионером подкастинга, программистом, писателем и предпринимателем, одним из соавторов формата RSS и основателем нескольких успешных стартапов. Речь идет о Дэйве Винере.
Читать дальше →
Total votes 25: ↑24 and ↓1+23
Comments1
1
23 ...