LINUX.ORG.RU
решено ФорумTalks

Lisp и современность

 , ,


0

4

Привет, ЛОР.
Создал тему не срача ради, а потому что действительно хочется разобраться.
Уже которую неделю ковыряю emacs с его elisp-ом и параллельно читаю околопопсовые статьи по машинному обучению и, собственно, возник вопрос, а почему современная индустрия машинного обучения использует python, а не lisp? Ведь, если мне не изменяет память, lisp довольно продолжительное время удерживал первенство в этой сфере, особенно в области символического искусственного интеллекта и области экспертных систем. Но, видимо, после прошлой «AI winter» что-то изменилось и я не могу понять что именно. Были ли это причины, связанные с самим языком или «просто так получилось»?

Теперь немного наброса(куда же без этого). Можете пропустить эту часть.
Расскажите о ПО, написанном, на lisp-е, которое вы используете. Лично для меня это: emacs и иногда maxima.
Ну и хотелось бы услышать ваше мнение о перспективах lisp в будущем, страричку пора на покой или у него еще появится возможность проявить себя?


Ну это же очевидно. Макаку очень просто обучить тыкать палкой в говно, но практически невозможно заставить взлететь самолет.

Anoxemian ★★★★★
()

Кажется мне, что ответ на этот вопрос идентичен вопросу «У какого языка проще синтаксис и куда проще вкатиться человеку, который вообще не видел в глаза никаких ЯП вообще» (качество поделок такого человека опустим как выходящее за плоскость вопроса).

Zhbert ★★★★★
()
Ответ на: комментарий от Zhbert

))

Syntax error reading source at (REPL:1:2).
Unmatched delimiter: )

Да, я написан на лиспе, и что?

Nervous ★★★★★
()
Ответ на: комментарий от Anoxemian

невозможно заставить взлететь самолет

Наберусь наглости и позволю себе спросить почему лисп всегда сравнивают с «самолетом»/«лучшим языком ever» и т.д?
Очень часто вижу подобные заявления, которые почти никогда не подкрепляются агрументами, они почему-то просто пишутся как данность. Да и будем честны, реальность тоже показывает другую картину. Тот же emacs и maxima написаны в бородатые годы, но значит ли это, что их аналоги нельзя написать сегодня с помощью других технологий? Не думаю. Даже в научной среде уже во всю используется python/julia/R, но лиспа, если это софт не из 20 века, за весь свой скромный опыт никогда не видел.
Где весь этот софт на лиспе из темной эры технологий?

eyrell
() автор топика
Ответ на: комментарий от Zhbert

куда проще вкатиться человеку, который вообще не видел в глаза никаких ЯП вообще

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

eyrell
() автор топика
Ответ на: комментарий от eyrell

Тот же emacs и maxima написаны в бородатые годы, но значит ли это, что их аналоги нельзя написать сегодня с помощью других технологий?

А зачем? Переписывать ради переписывать? Ты как растаман прям.

Zhbert ★★★★★
()
Ответ на: комментарий от eyrell

А ты задай этот вопрос авторам сотен курсов в этих ваших энторнетах, где делают специалиста по машинному обчучению за день (нет).

А что печально, таких полно. У меня товаризщ, вообще с компом не дружный, решил вдруг после курсов стать оналитегом. Правда, не вывез вроде бы в пистон вообще и так и не стал, но ведь есть и те, кто как-то заканчивают… А качество того, что он там писал, это прям ахтунг.

Zhbert ★★★★★
()
Ответ на: комментарий от eyrell

Где весь этот софт на лиспе из темной эры технологий?

Я на нем писал скрипты для автокада где-то в середине 2000х. Вроде вполне норм писалось, можно было довольно удобно автоматизировать разные штуки.

Zhbert ★★★★★
()
Ответ на: комментарий от Zhbert

А зачем? Переписывать ради переписывать?

Незачем, потому что я не предлагал ничего переписывать. Я лишь усомнился в исключительности лиспа для определенного рода задач. Когда я пытался изучить тему из тс-поста самостоятельно, то перечитал немало статей про лисп, которая все до единой были похожи на рекламные статьи по расту, где сначала общими словами описывается чудо-технология, а затем показывается какой-то hello world. Единственное, что показалось хорошим, так это отладка и работа с макросами. Хотя это я заметил самостоятельно при работе с elisp.

eyrell
() автор топика

У гвидобейсика куча биндингов к Сишным библиотекам вроде куды. Да и освоить его не так уж и тяжело.

Meyer ★★★★★
()
Ответ на: комментарий от Zhbert

У лиспа, конечно. Две скобки — вот и весь синтаксис.

()

Починил.

theNamelessOne ★★★★★
()
Последнее исправление: theNamelessOne (всего исправлений: 2)

индустрия машинного обучения использует python

Ничего не знаю про машинное обучение, но неоднократно слышал, что змейка там только для запуска/склейки написанных на С++ инструментов. Если так, то отчего нет? Хороший, чистый язык, гораздо лучше bash’а и, в отличие от лиспа, хорошо раскрученный, есть куча методической литературы, много людей мал-мала умеют кодить на питоне. Разумный выбор.

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

У меня были похожие размышления на этот счет. Лично я представляю процесс таким образом:

  • берется идея
  • быстро пишется прототип на питоне
  • если идея имеет право на существование, то прототип переписывают на компилируемый язык
  • готовое решение используют как библиотеку для того же питона, где последний выступает в качестве «клея» между подобными библиотеками.
eyrell
() автор топика

Были ли это причины, связанные с самим языком или «просто так получилось»?

Язык сложный, поэтому требовал сложного компилятора. Поэтому компиляторы были дорогие. Поэтому на Си написали больше библиотек. Лисп был временно забыт. Стал более-менее снова развиваться после 1996 года, когда появились свободные достаточно хорошие компиляторы. Но мало библиотек. Поэтому мало программистов. Поэтому мало библиотек.

Питон используется, потому что прототип на питоне можно переписывать на Java/C#/C++ почти один-в-один. Библиотеки общие, модель ООП общая, семантика близкая. Лисп — вещь в себе: замыкания вместо объектов, обобщённые функции вместо методов классов, динамические переменные и перезапуски. При переписывании с Лиспа на Си++ приходится заново проектировать всю архитектору программы.

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

Смотря что понимать по лиспом. Если ANSI Common Lisp, то у него ниша проектов для маленьких команд. Количество библиотек потихоньку растёт, но за пределы этой ниши вряд ли выйдет. Для крупных программ лучше подходят Java/C# за счёт изоляции пакетов. Для прототипирования питон (причину упоминал выше).

Если понимать язык с макросами, скобочками и замыканиями, то есть шансы у Racket или чего-то подобного (там нормальные модули, контракты между ними и возможность типизации: вполне может потеснить Java/C#). Правда сам Racket рассматривает вариант перейти на синтаксис без скобочек.

Если рассматривать просто язык со сборщиком мусора и замыканиями, то это JavaScript. Если с нормальными макросами, то Nim и Rust. Популярны, но уже не совсем Лисп.

monk ★★★★★
()
Ответ на: комментарий от eyrell

Можно добавить и следующее: когда говорили, что лисп — язык искусственного интеллекта, то под таковым подразумевались различные символьные вычисления. И это имело смысл. А теперь всё решили сделать быстро-быстро перемножая матрицы, поэтому для ИИ скорее фортран подходит.

ugoday ★★★★★
()

или у него еще появится возможность проявить себя?

«Кто-ж его проявит, он же памятник!» ©

quickquest ★★★★★
()

Но, видимо, после прошлой «AI winter» что-то изменилось и я не могу понять что именно. Были ли это причины, связанные с самим языком или «просто так получилось»?

ничего не изменилось. Просто исторически нейросети получили третье дыхание (после второго дыхания, multi layer perceptron) когда появились GPGPU и стало возможно тренировать «глубокие» модели. Из какого языка поручать GPGPU перемножать и складывать матрицы совершенно безразлично.

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

seiken ★★★★★
()
Ответ на: комментарий от ugoday

А теперь всё решили сделать быстро-быстро перемножая матрицы

И это правильно, ибо это основа тензорных процессоров, а в перспективе и ихних оптических реализаций.

поэтому для ИИ скорее фортран подходит.

И такоже уместен древнесанскритский APL :)

quickquest ★★★★★
()
Ответ на: комментарий от monk

А чем, кстати, вообще Lisp примечателен? Пол Грэм (основатель YCombinator) одну из своих книг по Lisp начинает с дифирамбов, но заканчивает вступление тем, что мы конечно даже не способны осознать крутости этого ЯП, она нам лишь приоткроется по мере чтения книги. Господа лисперы, реквестирую спойлер, стоят 500 страниц того? Или лучше потратить их на более фундаментальные вещи, а не на очередной ЯП?

От ещё одной книги прифигел, там во второй главе даётся таблица заклинаний – имена функций для работы со списками и как их правильно произносить: car (кар), cdr (кудер), caar (ка-ар), cadr (ка-дер), cdar (ку-дар), cddr (ку-ди-дер), …, cdadr (ку-да-дер), cddar (ку-ди-дар), cdddr (ку-дид-ди-дер), cadddr (ка-ди-ди-дер), … Всегда мечтал выучить татарский (нет). Не сильно похоже на хороший интерфейс, если честно. Но это может быть просто я чего-то не пониманию.

Pwner
()
Последнее исправление: Pwner (всего исправлений: 1)
Ответ на: комментарий от Pwner

А чем, кстати, вообще Lisp примечателен?

примечателен тем, что относительно просто реализовать интерпретатор простого лисп-подобного ЯП

seiken ★★★★★
()
Ответ на: комментарий от seiken

Т.е., если реализовывать простые лисп-подобные ЯП не требуется, то и Лисп не нужен?

Пока самый отталкивающий момент, что я обнаружил в состоянии дел в CL – за пределами одной коммерческой реализации, такая привычная во всех современных компиляторах штука как кросс-компиляция одной строкой – в Lisp фантастика.

Pwner
()
Последнее исправление: Pwner (всего исправлений: 1)

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

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

причина популярности именно питона в ML в том, что он успел распространиться в среде data science. почему распространился там именно он, не знаю, но он подходил под требование «языка с синтаксисом понятным непрограммисту». лисп под это точно не подходит

caryoscelus
()

Создал тему не срача ради, а потому что действительно хочется разобраться.

Ну так разберись. Это знания и опыт. Начни с этого

Можно ещё старпёра почитать - https://betterprogramming.pub/why-i-still-lisp-and-you-should-too-18a2ae36bd8

masterOf
()
Последнее исправление: masterOf (всего исправлений: 1)
Ответ на: комментарий от monk

модель ООП общая

Уже нетЪ! C# впереди планеты всей.

masterOf
()
Ответ на: комментарий от Pwner

реквестирую спойлер,

Из парадокса Блаба выхода нет … И это не только ЯП касается. Что да car,cdar,cdadr и иных, то это просто удобно. Считайте эдаким ad-hoc сопоставлением с образцом.

ugoday ★★★★★
()

Но, видимо, после прошлой «AI winter» что-то изменилось и я не могу понять что именно. Были ли это причины, связанные с самим языком или «просто так получилось»?

Потому то сила лиспа в манипулировании кодом, сила современного машинного обучения - в быстром перемножении матриц.

Norgat ★★★★★
()

особенно в области символического искусственного интеллекта и области экспертных систем

Вот именно. А современный ИИ это про то, чтобы молотить матрицы на GPU. ЛИСП тут вообще ни при чём. Питон тоже ни при чём, просто из него удобно дёргать библиотечный код. По факту он используется как конфигуратор, а не как полноценный язык.

страричку пора на покой или у него еще появится возможность проявить себя

Тут недавно один человек высказал такую мысль, что гонка железа заканчивается. Начнётся гонка ПО. Т.е. современный подход типа берём железку, ставим туда linux и скриптуем логику на питоне, скоро станет не актуален из-за огромного оверхеда. Есть шанс что мир вернётся к разнообразию систем, как это было во времена начала микрокомпьютеров. Тогда каждый комп имел свою бейсик-систему, или форт-систему и т.п. ЛИСП в этом ряду имеет шансы, т.к. он максимально простой и дубовый в плане реализации, но хорошо масштабируется в плане кода (в отличие от того же бейсика).

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Т.е. современный подход типа берём железку, ставим туда linux и скриптуем логику на питоне, скоро станет не актуален из-за огромного оверхеда

Это как, типа питон сделают ещё тормозные, а все старые версии на всех носителях сотрут?

seiken ★★★★★
()
Ответ на: комментарий от Pwner

лучше потратить их на более фундаментальные вещи

Конечно. Лучше начни с SICP.

Nervous ★★★★★
()
Ответ на: комментарий от ugoday

car,cdar,cdadr … это просто удобно

Спалился, рептилоид %)

Nervous ★★★★★
()
Ответ на: комментарий от Pwner

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

Предложи хорошее имя для функции, которая возвращает хвост головы хвоста списка.

monk ★★★★★
()

Питон - это современный бэйсик. С него начинают обучние. Датасатанисты другие языки не учат, а занимаются математикой, а аутисты - разметкой данных. Поэтому наделали биндинги именно к питону. ИМХО.

her_s_gory
()
Ответ на: комментарий от monk

Предложи хорошее имя для функции, которая возвращает хвост головы хвоста списка

Чтобы придумать хорошее имя, нужно знать, что в том хвосте головы хвоста лежит — в терминах предметной области. Допустим, там лежит вид животного (пишем ПО для управления зоопарком). Тогда

(def animals '(("Sam" :bear)  ("Billy" :rabbit) ("Bobby" :lion)))

(def second-animal-species (comp rest first rest))

(comment

  (println "Species of the second animal is" (second-animal-species animals))

)
Species of the second animal is (:rabbit)

И никаких кададров запоминать не надо.

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 1)
Ответ на: комментарий от monk

Предложи хорошее имя для функции, которая возвращает хвост головы хвоста списка.

Из [a, [x, y, z], c, d, e] вернуть [y, z]? Вот уж точно cdadr (ку-да-дер) здесь самое изящное, что можно придумать.

Предлагаю ещё за арифметическими действиями закрепить названия: + ku, - ka, / ra, * cha. Тогда можно наопределять всяких полезных функций для работы с выражениями. Пример:

  • kukaracha: a + b - c / d * e
  • rachakaka: a / b * c - d - e
  • chachacha: a * b * c

Разве может быть что-то лучше?

Pwner
()
Ответ на: комментарий от seiken

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

Бред собачий.

Просто корпорации раскрутили говно(никогда такого не было и вот опять, а хомячки на это и повелись. Маркетинг - сила! Технологии - могила.)

lovesan ★★★
()
Последнее исправление: lovesan (всего исправлений: 1)
Ответ на: комментарий от seiken

Твой говнолисп наколеночный никому не нужен.

CL или даже вменяемые варианты Scheme реализовывать очень сложно.

lovesan ★★★
()
Ответ на: комментарий от eyrell

У лиспа есть два очень весомых преимущества:

  1. S-exp’ы
  2. Макросы.

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

skiminok1986 ★★★★★
()
Ответ на: комментарий от skiminok1986

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

Также, в CL самая вменяемая опциональная типизация из всех что есть в динамических и полудинамических языках.

В бидоне и близко нет того что есть в лиспе.

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

Ну и способности собираться в один исполняемый файл докучи.

lovesan ★★★
()
Ответ на: комментарий от skiminok1986

Остальные киллер-фичи боль-мень успешно растащили в другие языки

А в некоторые другие языки и sexpы с макросами тоже того. Утащили.

Теперь умудрённые мужи сидят и много думают — если это выглядит как лисп и ведёт себя как лисп — то лисп ли это на самом деле?

Nervous ★★★★★
()
Ответ на: комментарий от lovesan

Твой говнолисп наколеночный никому не нужен.

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

no-such-file ★★★★★
()
Ответ на: комментарий от Nervous

И никаких кададров запоминать не надо.

Зато надо создавать по функции на каждую предметную область. Причём отличаться они будут только названием.

Миссионеры писали, у какого-то племени было понятие количества, но на каждый предмет свои слова. То есть «две овцы» одно слово, «два человека» другое, «два камня» третье… И вот они описывали, как страдали, пытаясь объяснить туземцам арифметические действия.

monk ★★★★★
()
Ответ на: комментарий от Pwner

Разве может быть что-то лучше?

Посмотри APL или J. Там эта идея реализована.

monk ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)