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

Комментарии 48

А ещё на clojure написан мой (чуть менее чем бесполезный) пет-проект!

Lisp со всеми его диалектами прекрасен, но мало под него умельцев находится, увы...

Кстати, ещё один проект можно тут упомянуть - Guix. Он хоть и необычен, но достаточно интересный - и опенсорсный при этом.

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

Вот ещё пара относительно живых проектов:

pgloader (Common Lisp) - загрузчик данных в PostgreSQL

babashka (Clojure) - скриптовый язык, на замену Bash

Отличное название у языка :D Спасибо за ссылки!

Это не на смену bash, а чтобы писать шелл прямо в REPL. Не совсем понятно, зачем это вообще нужно, если можно просто запускать bash из Java-машины.

Наличие REPL никак не отменяет возможности писать скрипты и однострочники на Clojure:

$ bb -Xmx10m -e '(io/copy (:body (curl/get "http://ipv4.download.thinkbroadband.com/200MB.zip" {:as :stream})) (io/file "/tmp/200mb.zip"))'

На Clojure скрипты писать довольно неудобно, время запуска JVM в несколько секунд делает это бессмысленным. А вот babashka запускается очень быстро.

Автолисп. Писал на нем 15 лет. Рутины и кастомизация Автокада. Мой один из первых языков.

Модифицировал на автолиспе программу, которая строила листы кабельного журнала в автокад. Были времена)

У меня диплом в институте был сделан на AutoLISP под Автокадом. Ужас-ужасный: бесконечные скобки и ограничения на размер памяти.

Почему никто не упомянул R? Тоже диалект.

Наверно, потому, что R — наследник S, а не Lisp

В Nubank все системы написаны на Clojure. В Сбере есть проекты на Clojure. Графовая СУБД Datomic написана на Clojure.

Считается, что LISP - это язык Бога.

Программируя на нем прекрасно понимаешь, почему так говорят.

У меня есть пет-проект под названием Una: LISP-подобный язык на платформе JavaScript: https://una-language.com/

Программируя на нем прекрасно понимаешь, почему так говорят.

Можете раскрыть мысль? Недавно пробовал пописать на Racket для общего развития и опыт вышел, мягко скажу, неудачный. Слишком высокий порог входа без видимых плюсов, отложил в сторону так как не понял чем он вдруг станет интересен после глубокого изучения. И я не против «особенных» языков, OCaml, например, оставил только положительные впечатления

LISP основан на лямбда-исчислении и при правильной композиции функций код выходит лаконичным, мощным и красивым. Особенно "приближает к Богу" реализация чисел Чёрча и всей математики поверх них на лиспе. Если хотите понять красоту лиспа попробуйте пройти книгу "Structure and Interpretation of computer programs".

Интересно слышать о пороге входа в язык, в котором "нет синтаксиса"(с). Ну, фактически есть 3 синтаксических правила. Можно подробнее, что вкладывается в это понятие?

  1. Макросы. В принципе они очень простые, что в CL, что в Racket, что в Clojure, но для глубокого понимания нужно их годами изучать. Я лично знаю довольно плохо, а есть примеры высшего пилотажа, которые выглядят как колдовство 10000-го уровня.

  2. Синтаксиса как бы нет, но у функций масса параметров в определенном порядке, а для приличного программирования надо соображать, как, где и что оптимально использовать. В любом языке главное это, а не синтаксис. Он везде более менее простой. В Прологе, например, тоже можно свести к 3-4 правилам, но от этого переход с C на Пролог проще не становится.

  3. Racket - это метаязык, в котором реализован и Алгол, и всякие специфические языки. Это площадка для опытов с экспериментальным синтаксисом. Скажем, можете там по приколу написать Бейсик. Базовый язык там Scheme, на на нем столько там всего наворочено, что легко запутаться. Собственно, Racket - это вообще не язык, но нагромождение всякой всячины, написанной годами на Scheme. Есть там, например, язык презентаций, что-то вроде игрушки по мотивам PowerPoint. Я как-то пытался создать там презентацию. Обычно пользуюсь для этого LibreOffice. Оказалось, что это какой-то недоделанный малопонятный проект. В Racket напихано много такого. Это все равно, что одновременно изучать нормальный Лисп (Scheme), Пролог (вставлена там недоделанная лиспообразная версия), SQL, SDL для 3-мерной графики и много, много прочего. И особенно "радует" отсутствие человеческой документации. Если человек не знаком вообще ни с каким Лиспом, как он поймет код этих нагромождений?



Если человек не знаком вообще ни с каким Лиспом, как он поймет код этих нагромождений?

Так ведь если человек не знаком ни с каким С-подобным языком, то он точно так же не поймёт псевдокод, который большинство программистов легко прочитает.

В Racket имеет смысл практиковаться в написании кода на обычном Scheme. Во всяких напридуманных там языках, я бы сказал, не высокий порог входа, но чертовски плохая документация. В значительной мере, если не большей частью, вообще никакая. А в режиме Scheme подходит и 8-летним детям, чтобы "черепашкой" рисовать, как в Лого.

Какой второй смысл вкладывался в название языка ? Ведь lisp - переводится как "шепелявить"

Предполагалось, что это LISt Processing.

Почему не LisPro, LP, LPro а именно готовое слово lisp ?

Ну… Это нужно спрашивать у тех, кто создавал язык. Не знаю, много ли осталось в живых, боюсь, абсолютное большинство уже умерло. Но можно попробовать обратиться к Полу Грэму, контакты можно найти на его сайте, может он и подскажет, он разбирается.

А почему в unix постоянно используются команды "кошка", "человек"? Которые совсем не про человека или кошку.

"Это я шалю, ну, то есть, балуюсь!" ©

LISt Processor

Это аббревиатура от list processor.

Интересно было бы узнать, какие преимущества у этих систем по сравнению с вариантом, если бы та же функциональность была написана на чём-то ещё.

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

Во-первых, питон стал подходящим для таких дел лет через 20 после появления емакса. Соответственно, все 100500 плагинов надо было бы кому-то переносить. Во-вторых, где же эти мощные и замечательные редакторы с конфигурацией на питоне? В известном списке, насколько я знаю, только Sublime одновременно популярнее емакса и поддерживает плагины на питоне. И то, там по-ходу нельзя писать функции прямо в конфигурации

LISP использовался в качестве скриптового языка в играх Abuse и Crash Bandicoot. Причём в случае с первой - на это я наткнулся самостоятельно, когда в юности решил залезть в ресурсы игры. Игра была написана в 1996 г крошечным коллективом (чуть ли не парой студентов), и я до сих пор восхищён тем, что под капотом живёт самописный интерпретатор LISP, позволявший сделать из сайд-скроллера хоть пинбол (один из модов, поставляемых самими авторами в качестве примера).

Жду подобных статей о других языках

Скоро будет как минимум ещё одна

А будут ли статьи по экспертным системам, где list не используется?

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

Будет ли forth?

В Boeing 747 и 777 используется Allegro NFS Server (сервер, использующий протокол сетевого доступа к файловым системам, NFS), написанный на Common Lisp.
Хорошо хоть, что не в Boeing 737 MAX

делитесь своими pet-проектами!

Раз вы просите :) На досуге делаю клон Diablo 2 на Common Lisp и периодически стримлю процесс: движок, технодёмка, twitch.

По поводу компаний, использующих лиспы - имел удовольствие поработать в испанской конторе RavenPack, делающей автоматический анализ финансовых новостей на Common Lisp, было очень круто.

Интересный опыт, спасибо, что поделились!

Из лиспов очень используемым можно назвать Clojure. Вот тут можно найти кто его использует (https://clojure.org/community/companies).

Из реализаций, что я щупал (Clojure, ABCL, Cawa, SBCL, Racket, Guile) мне Clojure показался наиболее применим с практической точки зрения. У него много плюсов, есть особенности направленные именно на стабильность и использование в enterprise.

На самом деле Lisp как язык оброс массой мифов. Начиная от его "инопланетного синтаксиса", до того что он является "серебряной пулей". Что Lisp мёртв, на самом деле - такой же миф. Используются как прямые потомки Lisp (Scheme, Racket, Clojure, Common Lisp, PicoLisp, etc), так и его производные (применяемый везде JS - это Scheme с синтаксисом похожим на Java).

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

Вы три разных языка перечислили: Common Lisp, Scheme и Clojure, под разными платформами.

1. ABCL - тормозная глюковатая версия Common Lisp, работающая под Джавой. Не вполне совместим, как быстро выясняется, с хорошо известными реализациями CL. Создан, наверное, чтобы легко портировать код, поскольку работает в Java. Морально устарел еще в процессе создания. :)

2. Kawa - Scheme под Джавой. Удобен для написания умных скриптов для сцепления кусков кода для Джавы, вряд ли для чего-либо другого.

3. Racket - всякая всячина, написанная годами сотнями студентов на Scheme. Вообще не язык в нормальном смысле, но площадка для игр по созданию своих языков (как правило, глючных и недоделанных).

4. Guile - шустрый Scheme. Годится для скриптов и вставления в код, написанный на C/C++. Для этого и предназначен, а не как полноценный самостоятельный язык.

5. Clojure - отличный современный Лисп, но увязанный тоже с Java и несколько отличающийся от CL. Есть урезанная версия под Javascript, но я ничего толком о ней сказать не могу.

6. SBCL - лучшая из бесплатных реализаций CL, практически ничем не хуже распиаренных дорогих LispWorks и Allegro Lisp. Очень быстрый, примерно как C++, если разбираться в оптимизации и использовать массивы вместо списков, содержит даже ассемблер, когда нужна предельная скорость. Помимо стандартного CL, там множество специфического для каждой архитектуры, включая ARM. Я его и на телефоне часто запускаю. Недостатки: много глючных и устаревших библиотек, авторы которых зачастую думают: а что, человек прочитает код и сам допишет. Встречался с таким не раз на американских форумах. А так, я его и в качестве калькулятора использую. Очень удобно. Есть еще CCL (Closure Common Lisp, не путать с Clojure). Раза в два помедленней, заточен больше для Маков, но тоже хороший.

Я на Common Lisp пилю аналог питоновского PyPi: https://ultralisp.org. Это хостинг для более чем тысячи CL библиотек, куда можно в несколько кликов добавлять новые прямо с GitHub.

Ну и ещё есть на гитхабе десятки небольших CL библиотек в организации https://github.com/40ants/, если конечно можно считать их pet-прожектами.

О, вот это интересно! Т.е. не нужно просить авторов Quicklisp, чтобы добавить туда свой проект?

Да именно так.

Более того, Ultralisp автоматически настраивает вебхук в проекте на GitHub, и собирает новую версию диста, как только ты запушишь изменения.

А ещё, в нём можно делать свои "дисты". Например ты в такой дист можешь включить форки каких-то библиотек, которые нужны только тебе. В общем дисте они не будут видны.

К примеру, в такой дист я начал собирать расширения для Lispworks: https://ultralisp.org/dists/lispworks В Quicklisp их в принципе не включат, потому что туда включают только проекты, которые компилируются под SBCL.

Да, забыл сказать. С недавних пор Ultralisp поддерживает не только формат метаданных Quicklisp, но и CLPI. CLPI, это альтернатива Quicklisp, формат данных используемый в Common Lisp Package Manager (https://www.clpm.dev/)

Еще интересная вещь: Hy, Лисп для Питона, т.е. по сути Питон, но с синтаксисом, макросами и прочими фишками Лиспа. Пока альфа-версия, но вполне работает.

А вот такое же примерно для Erlang.

Несколько урезанный Scheme встроен также в Gimp. Удобно писать скрипты для автоматического преобразования кучи картинок по какому-то алгоритму, и т.п.

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

Еще также коммерческий эмулятор последней (кажется?) Лисп-машины с ОС Genera 2.0. Вот тут инструкции по его настройке:

https://archives.loomcom.com/genera/genera-install.html

Вполне работает. Можете какое-нибудь старье превратить таким образом в сервер на Лисп-машине!

Зарегистрируйтесь на Хабре , чтобы оставить комментарий