Comments 48
Спасибо за ссылку! Всё не удалось вместить в пост, чтобы он не разросся в скучный лонгрид, но мы планируем продолжать тему с обзором инструментов на функциональных языках.
Отличное название у языка :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? Тоже диалект.
В Nubank все системы написаны на Clojure. В Сбере есть проекты на Clojure. Графовая СУБД Datomic написана на Clojure.
Считается, что LISP - это язык Бога.
Программируя на нем прекрасно понимаешь, почему так говорят.
У меня есть пет-проект под названием Una: LISP-подобный язык на платформе JavaScript: https://una-language.com/
Программируя на нем прекрасно понимаешь, почему так говорят.
Можете раскрыть мысль? Недавно пробовал пописать на Racket для общего развития и опыт вышел, мягко скажу, неудачный. Слишком высокий порог входа без видимых плюсов, отложил в сторону так как не понял чем он вдруг станет интересен после глубокого изучения. И я не против «особенных» языков, OCaml, например, оставил только положительные впечатления
LISP основан на лямбда-исчислении и при правильной композиции функций код выходит лаконичным, мощным и красивым. Особенно "приближает к Богу" реализация чисел Чёрча и всей математики поверх них на лиспе. Если хотите понять красоту лиспа попробуйте пройти книгу "Structure and Interpretation of computer programs".
Интересно слышать о пороге входа в язык, в котором "нет синтаксиса"(с). Ну, фактически есть 3 синтаксических правила. Можно подробнее, что вкладывается в это понятие?
Макросы. В принципе они очень простые, что в CL, что в Racket, что в Clojure, но для глубокого понимания нужно их годами изучать. Я лично знаю довольно плохо, а есть примеры высшего пилотажа, которые выглядят как колдовство 10000-го уровня.
Синтаксиса как бы нет, но у функций масса параметров в определенном порядке, а для приличного программирования надо соображать, как, где и что оптимально использовать. В любом языке главное это, а не синтаксис. Он везде более менее простой. В Прологе, например, тоже можно свести к 3-4 правилам, но от этого переход с C на Пролог проще не становится.
Racket - это метаязык, в котором реализован и Алгол, и всякие специфические языки. Это площадка для опытов с экспериментальным синтаксисом. Скажем, можете там по приколу написать Бейсик. Базовый язык там Scheme, на на нем столько там всего наворочено, что легко запутаться. Собственно, Racket - это вообще не язык, но нагромождение всякой всячины, написанной годами на Scheme. Есть там, например, язык презентаций, что-то вроде игрушки по мотивам PowerPoint. Я как-то пытался создать там презентацию. Обычно пользуюсь для этого LibreOffice. Оказалось, что это какой-то недоделанный малопонятный проект. В Racket напихано много такого. Это все равно, что одновременно изучать нормальный Лисп (Scheme), Пролог (вставлена там недоделанная лиспообразная версия), SQL, SDL для 3-мерной графики и много, много прочего. И особенно "радует" отсутствие человеческой документации. Если человек не знаком вообще ни с каким Лиспом, как он поймет код этих нагромождений?
В Racket имеет смысл практиковаться в написании кода на обычном Scheme. Во всяких напридуманных там языках, я бы сказал, не высокий порог входа, но чертовски плохая документация. В значительной мере, если не большей частью, вообще никакая. А в режиме Scheme подходит и 8-летним детям, чтобы "черепашкой" рисовать, как в Лого.
Какой второй смысл вкладывался в название языка ? Ведь lisp - переводится как "шепелявить"
Почему не LisPro, LP, LPro а именно готовое слово lisp ?
А почему в unix постоянно используются команды "кошка", "человек"? Которые совсем не про человека или кошку.
"Это я шалю, ну, то есть, балуюсь!" ©
LISt Processor
Это аббревиатура от list processor.
Skill - диалект лиспа. Бедные инженеры микроэлектронщики вынуждены на нем разговаривать :)
https://en.wikipedia.org/wiki/Cadence_SKILL
Интересно было бы узнать, какие преимущества у этих систем по сравнению с вариантом, если бы та же функциональность была написана на чём-то ещё.
Если бы емакс конфигурировался не лиспом, а питоном, количество его пользователей сейчас было бы побольше.
Во-первых, питон стал подходящим для таких дел лет через 20 после появления емакса. Соответственно, все 100500 плагинов надо было бы кому-то переносить. Во-вторых, где же эти мощные и замечательные редакторы с конфигурацией на питоне? В известном списке, насколько я знаю, только Sublime одновременно популярнее емакса и поддерживает плагины на питоне. И то, там по-ходу нельзя писать функции прямо в конфигурации
LISP использовался в качестве скриптового языка в играх Abuse и Crash Bandicoot. Причём в случае с первой - на это я наткнулся самостоятельно, когда в юности решил залезть в ресурсы игры. Игра была написана в 1996 г крошечным коллективом (чуть ли не парой студентов), и я до сих пор восхищён тем, что под капотом живёт самописный интерпретатор LISP, позволявший сделать из сайд-скроллера хоть пинбол (один из модов, поставляемых самими авторами в качестве примера).
Жду подобных статей о других языках
В Boeing 747 и 777 используется Allegro NFS Server (сервер, использующий протокол сетевого доступа к файловым системам, NFS), написанный на Common Lisp.Хорошо хоть, что не в Boeing 737 MAX
Там, оказывается, Clojure: https://www.youtube.com/watch?v=iUC7noGU1mQ&ab_channel=ClojureTV
делитесь своими 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
Вполне работает. Можете какое-нибудь старье превратить таким образом в сервер на Лисп-машине!
А вы знаете, где сейчас используется Лисп?