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

Lisp *

Старейший высокоуровневый язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Книга «Основы компиляции: инкрементный подход»

Время на прочтение14 мин
Количество просмотров4.9K
image Привет, Хаброжители!

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

Вместо этого в «Основах компиляции» выбран инкрементный подход: компилятор совершенствуется последовательно, и читатель может написать весь код самостоятельно. Книга помогает создать собственный компилятор для небольшого, но достаточно мощного языка программирования, постепенно, шаг за шагом вводя все более сложные языковые средства.

Джереми Сик объясняет важнейшие концепции, алгоритмы и структуры данных, лежащие в основе современных компиляторов, и закладывает основу для изучения более сложных тем. Это краткое, но доступное руководство уже давно используют студенты и профессионалы.
Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии6

Новости

Что вы знаете о символьном программировании?

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров17K

Кликбейтный заголовок, риторический вопрос и обещание раскрыть тайну! Не самый лучший набор, но нормального названия для статьи мне в голову не пришло. Что же здесь все таки будет? Речь пойдет о реализации символьного программирования в Wolfram Language (WL). Я не буду рассказывать про отличия от других парадигм. А также здесь точно не будет общих определений. Вместо этого я попытаюсь ответить на несколько вопросов исходя из своего личного опыта и наблюдений.

Внимание! Я не математик и не знаю haskell и lisp! И буду рад если меня поправят настоящие математики, которые с ними знакомы.

Читать далее
Всего голосов 40: ↑40 и ↓0+40
Комментарии98

Геймдев на Lisp. Часть 1: ECS и металингвистическая абстракция

Уровень сложностиСредний
Время на прочтение30 мин
Количество просмотров5.1K

В данной серии практических руководств мы подробно рассмотрим создание несложных 2D-игр на Common Lisp. Результатом первой части станет настроенная среда разработки и простая симуляция, отображающая двумерную сцену с большим количеством физических объектов. Предполагается, что читатель владеет некоторым языком программирования высокого уровня, в общих чертах представляет, как на экране компьютера отображается графика, и заинтересован в расширении своего кругозора.

Common Lisp — язык программирования с богатой историей, предоставляющий эффективные инструменты для разработки комплексных интерактивных приложений, каковыми являются видеоигры. Данная серия руководств ставит перед собой задачу наглядно продемонстрировать ряд возможностей CL, отлично вписывающихся в контекст разработки игровых приложений. Общий обзор таковых возможностей и особенностей Common Lisp приводится в статье Юкари Хафнер "Использование высокодинамичного языка для разработки".

Многие возможности, впервые появившиеся в Lisp, такие, как условный оператор if/then/else, функции как объекты первого класса, сборка мусора и другие давно перекочевали в мейнстримные языки программирования, однако есть одна уникальная возможность, которую мы рассмотрим сегодня, и это — металингвистическая абстракция.

Читать далее
Всего голосов 17: ↑17 и ↓0+17
Комментарии19

LISP в космосе

Уровень сложностиПростой
Время на прочтение22 мин
Количество просмотров3.9K


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


Эта история о том, что произойдёт, если человек, страстно увлечённый LISP, попадёт в организацию, где на нём не принято писать софт.


Эта история о том, как LISP попал в космос.


На дворе 1988 год. СССР всё ещё существует. Рональд Рейган — президент США. А Рон Гаррет под началом своего научного руководителя работает над прототипом первого марсохода.

Читать дальше →
Всего голосов 19: ↑17 и ↓2+15
Комментарии23

Истории

96 лет со дня рождения Джона Маккарти

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров3.5K
«Не вижу в человеческом интеллекте ничего такого, что бы человечество не могло бы понять».

Джон Маккарти — фигура, без преувеличения, легендарная. Создатель термина “искусственный интеллект”, основоположник функционального программирования и создатель языка LISP… Список можно продолжать долго.

image

Мы сегодня хотим остановиться на одном из значимых эпизодов в жизни Маккарти — его многолетней дружбе с Андреем Петровичем Ершовым. Их переписка и совместная работа во времена, когда американец и советский гражданин находились по разные стороны баррикад — яркий пример того, что для настоящей науки и её последователей нет никаких границ.
Читать дальше →
Всего голосов 33: ↑31 и ↓2+29
Комментарии0

Знакомство с упорядочиванием в Emacs на примерах

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров3.4K

В этой статье мы разберём использование в Emacs различных команд для упорядочивания строк, абзацев и страниц. В руководствах к Emacs и Elisp эти команды описаны достаточно подробно, так что мы просто познакомимся с практическими примерами их применения.
Читать дальше →
Всего голосов 54: ↑53 и ↓1+52
Комментарии2

История T

Уровень сложностиСредний
Время на прочтение25 мин
Количество просмотров4K

Олин Шиверс


T был одной из лучших реализаций языка программирования Lisp и установил стандарт лаконичного дизайна, который был превзойдён лишь немногими более новыми диалектами. В этой статье Олин Шиверс вспоминает историю T.

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

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

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров6.2K

Преимущества и навыки, полученные при использовании Common Lisp в разработке игр



Разработка игр является увлекательной задачей. Игры требуют быстрого цикла разработки, высокой интерактивности и задают ограничения мягкого реального времени. Хотя в настоящее время небольшие игры разрабатываются на таких динамических языках, как Python или Lua, традиционно игровые движки пишутся на статических языках вроде C++ и C с каким-либо скриптовым языком поверх для обработки геймплейных механик. Common Lisp предоставляет среду разработки, одновременно являющуюся динамичной и достаточно производительной, что позволяет построить с её помощью полноразмерную систему разработки игр, сильно способствующую быстрым итерациям разработки и модульному дизайну.

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

Добавляем генераторы в Common Lisp

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

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

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

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

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

Аннотация


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

Читать дальше →
Всего голосов 21: ↑20 и ↓1+19
Комментарии22

Пишем мультиметоды из Lisp в С++

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


В статье разберёмся что такое мультидиспетчеризация и как её можно воссоздать на С++

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

Цитирование в языках программирования

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

Задачу я встретил, решая упражнения из книги Структура и Интерпретация Компьютерных Программ).

Раздел 2.3 посвящён цитированию в LISP и символическим вычислениям.

Обычные — несимволические — вычисления сводятся к расчётам с помощью арифметических операций. Если я попрошу вас вычислить производную функции x^2в точке x=17, вы можете сделать это по формуле при каком-нибудь не очень большом значении dx.

Подробнее о символических вычислениях
Всего голосов 23: ↑23 и ↓0+23
Комментарии23

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

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

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

И тут мне в руки попался Common Lisp...
Всего голосов 18: ↑17 и ↓1+16
Комментарии21

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн

Удивительное приключение в стране оптимизирующих компиляторов

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

Приглашаю вас в небольшое приключение выходного дня, в котором никто никому ничего не будет доказывать. Мы просто будем реализовывать один и тот же несложный алгоритм, разыскивающий простые числа в некотором диапазоне, на нескольких языках программирования: C, C++, Scheme и Python - и смотреть, что этим кодом могут сделать современные оптимизирующие компиляторы. В процессе приключения мы увидим, что «динамический» не означает «совсем уж медленный», и посмотрим на приёмы программирования на Scheme, что, как мне кажется, можно сравнить с путешествием на экзотический остров.

Читать далее
Всего голосов 66: ↑64 и ↓2+62
Комментарии82

Delinking и Lisp

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

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

Читать далее
Всего голосов 21: ↑17 и ↓4+13
Комментарии47

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

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

image


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

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

Как заменить себя скриптом. Часть 1. Режимы коротких замыканий в электросети с применением OpenCL

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


Длительная однообразная работа неизбежно вызывает приступы автоматизации. На этот раз предпримем попытку автоматизировать настройку устройств защиты электросетей напряжением 6 — 35 кВ.

Самозародившаяся задача требует расчёта коротких замыканий, а поскольку расчётов таких предвидится немало, выполнять их будем с помощью OpenCL, для должной утилизации имеющихся вычислительных мощностей.
Читать дальше →
Всего голосов 14: ↑14 и ↓0+14
Комментарии17

«Ижора»: клеточный автомат-компьютер

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

Хотелось бы поделиться с читателями Хабра довольно необычной разработкой: настоящим компьютером, сделанном в виде клеточного автомата, действующего по простому правилу Fireworld2 с четырьмя состояниями клеток. Текущая базовая версия компьютера называется "Ижора 1". Еще с 1950-х годов существует такая традиция: давать компьютерам географические названия.

Паттерн, состоящий из более 6 миллионов клеток, содержит 256 килобайт памяти и снабжен монохромным экраном 128x64 пикселей, отражающим состояние экранного раздела ОЗУ, примерно как в ZX Spectrum и других популярных исторических моделях персональных компьютеров. Программы можно писать на ассемблере, компилировать в машинный код, тестировать на эмуляторе и вводить специальной утилитой в сам клеточный автомат. Другая утилита позволяет сохранять текущее состояние компьютера. Для запуска компьютера необходима программа Golly - лучшая на сегодня площадка для подобного рода исследований.

Ассемблер и эмулятор написаны на языке Common Lisp, скрипты для ввода программ в сам клеточный автомат и сохранения его состояния - в Python. Компьютер имеет 32-битную архитектуру и на данный момент в нем все один регистр и одна операция: вычитание с условным переходом в случае отрицательного или нулевого результата (Subleq). Несмотря на примитивность такой модели, давно доказана ее универсальность. Существует даже операционная система Dawn OS, написанная для эмулятора Subleq-процессора.

Итак, суммируем: виртуальный компьютер с экзотической моделью программирования и ресурсами уровня древних ПК 1980-х, исполняющий всего около 10 операций в секунду, требующий современный компьютер с несколькими гигабайтами памяти (рекомендуемый минимум - 8 гигабайт), с эмулятором и ассемблером на Лиспе. Зачем и кому это нужно? Очень краткий ответ: ради хака и ретрокомпьютинга. Ниже - более подробно.

Читать далее:
Всего голосов 40: ↑40 и ↓0+40
Комментарии26

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

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

Введение


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



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


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


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


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

Читать дальше →
Всего голосов 48: ↑46 и ↓2+44
Комментарии48

Мемоизация в Лиспе

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

В заметке подробно рассматривается суть понятия "мемоизация" и разбирается работоспособная версия мемоизации произвольных функций Лиспа. Предполагается, что читатель знаком с Лиспом. Тем не менее, "тонкие места" разбираются достаточно подробно.

Читать далее
Всего голосов 18: ↑18 и ↓0+18
Комментарии16
1
23 ...
Изменить настройки темы

Вклад авторов