LINUX.ORG.RU

Прошу совет у бывалых лисперов

 , , , домашний проект,


7

8

Доброго времени суток! Недавний мой пост о smalltalk натолкнул меня на мысль, что надо заниматься тем, что больше нравится. В итоге я пришел к выводу, что лиспо-семество мне ближе. Поэтому прошу многоуважаемых спецов по лиспу посоветовать: 1. Какую реализацию Lisp выбрать? В чем ее преимущество перед другими? Есть ли возможность заводить под оффтопик? 2. Какой графический тулкит лучше всего вяжется с данной реализацией? 3. Какой быстрый туториал можно почитать по данной реализации лиспа? (классические труды в over9000 страниц не советовать, их я найду в LispFAQ и через поиск лора, интересуют именно туториалы после которых я могу начать писать код через пару вечеров неспешного чтения).

З.Ы.: Если найдутся противники лиспа и/или сторонники C# - отговорите меня реализовывать ERP на лиспе (работаю на C# сейчас, поэтому с ним будет легче). еще раз хочу заметить, что «ерпа» будет домашней поделкой, «для себя» и в целях саморазвития.

Ответ на: комментарий от anonymous

Так а пруфы о зле метапрограммирования можно перечислить? Чье-то икспертное МНЕНИЕ, естественно, пруфом не является.

anonymous
()

Что я понял из всего изучения лиспо-семейства, что это достаточно хороший инструмент сразу после того как научишься жрать кактус

vertexua ★★★★★
()

ERP+Lisp? Clojure, но я уверен пол треда уже посоветовало. История аля зачем платить больше. Выбрав JVM ты просто получаешь работающий софт и решенную задачу. В том числе используя лиспоподобный язык.

vertexua ★★★★★
()

Но вообще лиспосрачи скатились в говно. Один тебе Clojure. Где неадекват? Пора уходить с ЛОРа...

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

Что я понял из всего изучения лиспо-семейства, что это достаточно хороший инструмент сразу после того как научишься жрать кактус

Хотелось бы послушать, как вы научились жрать жопой кактус.

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

По вашему мнению что лучше выбирать - CommonLisp или Clojure?

В Clojure структуры данных иммутабельные, нафих тебе такие свистопляски?

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

В Clojure структуры данных иммутабельные, нафих тебе такие свистопляски?

Почему же? В многотредной программе все намного проще с ними становится. А Clojure как раз и силен в многотредности.

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

Но ведь в нём есть transientы, чтобы в промежуточных вычислений не мутить стопицот недособранных списковекторов!

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

Прочитал, прочитал. Наиболее релевантное тут: http://c2.com/cgi/wiki?LispLacksVisualCues

Все это применимо к любым dsl вообще. Учить языки - сложно. Запоминать синтаксис - сложно, именно по этой причине так популярна группа языков с практически единым общим синтаксисом (фигурноскобчатые си-подобные). Метапрограммирование же ломает все привычки, и потому не имеет права на существование.

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

к любым dsl вообще. Учить языки - сложно. Запоминать синтаксис - сложно

Именно по этому, когда придумали такие dsl как sql и regexp, все программисты дружно забили на этот мусор.

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

Вообще-то да. Смешивать код на разных языках это западло. Так только гомосеки поступают. Поэтому никакого SQL ты в приличном коде не увидишь, там будет ORM или вручную сделанный data layer. То есть, все абстракции БД будут выражаться средствами и идиомами основного языка, и никакой дрянной протекающей абстракции не будет.

Регвыры же и вовсе мразь и дрянь.

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

никакого SQL

Регвыры же и вовсе мразь и дрянь.

Давненько я не встречал такого жира. Молодец, анонимус.

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

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

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

cab ★★★★
()

Учить языки - сложно. Запоминать синтаксис - сложно, именно по этой причине так популярна группа языков с практически единым общим синтаксисом (фигурноскобчатые си-подобные).

Я не могу не привести эти две картинки: раз и два. Эти вообще похоже на «я не могу смотреть на эти сраные отступы в Питоне; как вообще можно писать код, выделяя блоки только отступами, без операторных скобок».

Метапрограммирование же ломает все привычки, и потому не имеет права на существование.

Синдром утёнка.txt

и никакой дрянной протекающей абстракции не будет.

Они же всегда текут, если задумываться о производительности. А если не задумываться, то посрать же.

Регвыры же и вовсе мразь и дрянь.

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

Хм...А если брать не только мою задачу а более общий случай?

Common Lisp, потому что это C++, только со скобочками.

anonymous
()
Ответ на: комментарий от i_overdose

А не бывает ни более общего случая, ни универсальных языков программирования.
ERP я бы делал на смеси языков. Движок на java, конфигурацию на чем-то легеньком. Вполне возможно, что какой-то lisp. Clojure выгодно использовать потому, что это наиболее живой lisp для jvm с наиболее активным сообществом. Но есть еще abcl, kawa, sisc.

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

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

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

У тебя есть другие варианты записи регулярных грамматик?

Регулярные громатеки - мразь и дрянь. А какой либо PEG я и средствами Java опишу не напрягаясь.

anonymous
()
Ответ на: комментарий от cab

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

Не кажется. Синтаксис макроса LOOP в Common Lisp ничего общего с синтаксисом остального лишпа не имеет. А вот цикл for совершенно одинаковый в C, C++, Java, JavaScript и еще десятке других языков.

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

Не кажется. Синтаксис макроса LOOP в Common Lisp ничего общего с синтаксисом остального лишпа не имеет. А вот цикл for совершенно одинаковый в C, C++, Java, JavaScript и еще десятке других языков.

Ты так говоришь, как будто в лиспе принципиально нельзя писать что-то вроде

(for i 1 (< i 10) (+1 i)
  ... )

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

Синтаксис макроса LOOP в Common Lisp ничего общего с синтаксисом остального лишпа не имеет.

СЕМАНТИКА! Мать твою в жопу резным коромыслом, семантика loop не имеет ничего общего. И в этом сила, наш дорогой анонимный эксперт.

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

В java 2 синтаксиса for. В Python он тоже отличается...

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

Но, опять же, главная беда Лиспа в том, что этот грёбаный for надо будет писать самому. Потому что «ну это ж элементарно, нахрена включать его в стандарт, кому надо, тот сам напишет».

Я повторюсь: google://The Lisp Curse

anonymous
()
Ответ на: комментарий от i_overdose

Тот, который оптимально подойдет для конкретной задачи с наименьшими издержками.
В твоем случае Clojure подойдет и для знакомства с концепцией lisp-а, и с концепциями функционального программирования, и с платформой java.

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

Ты бы хоть немножечка матчасть изучил, а?

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

На конце я крутил семантику. Речь про синтаксис и про те самые visual clues, о которых народ на той странице ламентировал.

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

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

Не кажется. Синтаксис макроса LOOP в Common Lisp ничего общего с синтаксисом остального лишпа не имеет.

То, что loop - кривое говно, давно известный факт, именно по-этому все нормальные люди используют iterate, в котором вполне лисповый синтаксис. Правильно написанный dsl по сложности изучения почти ничем не отличается от выполняющей те же функции библиотеки (обычно он даже проще, т.к. все напрямую мапается к предметной области, но никогда - сложнее). Если он написан НЕПРАВИЛЬНО, то тут сложность изучения ничем не ограничена, конечно - точно так же как и в случае изучения библиотеки.

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

Сдаюсь. Баста. Я не могу разговаривать с идиотом, который не может синтаксис от семантики отличить.

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

Ты так говоришь, как будто в лиспе принципиально нельзя писать что-то вроде

и безо всяких «принципиально» можно:

(do ([i 1 (add1 i)]) (< i 10) ...)

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

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

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

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

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

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

Речь про синтаксис и про те самые visual clues, о которых народ на той странице ламентировал.

Ну да, с макросами синтаксис становится проще и понятнее, то есть больше тех самых visual clues. Но это как раз польза метапрограммирования, а ты вроде о вреде пытался рассказывать?

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

за многие годы въевшегося в подсознание синтаксиса

И ты будешь говорить, что это не синдром утёнка?

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

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

Ах да, насчёт visual clues. Слово for — это разве не visual clue цикла for? Или обязательно надо куча мусора вроде скобок, step to и т. п., чтобы рассеянный взгляд обезьяны не дай бог не пропустил его?

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

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

То есть функции писать нельзя? Только goto, только хардкор?

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

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

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

Кстати, а такие определяемые прямо внутри текста, но, между тем, широкоиспользуемые, ДСЛ как таблицы, списки, графики, диаграммы и т.п. тоже НИНУЖНЫ?

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

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

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

Золотой, золотой, не хочу играть с тобой

anonymous
()
Ответ на: комментарий от i_overdose

А вы пишите на Clojure?

Нет (пока).

По вашему мнению что лучше выбирать - CommonLisp или Clojure?

Clojure. Больше книжек, больше коммьюнити, больше библиотек.

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

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

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

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

1) >У тебя есть другие варианты записи регулярных грамматик?< - есть, ещё вопросы?
2) не сильно, LL(1) парсер пишется на лысой коленке за 5 минут и прекрасно с задачей справляется
3) и вообще, это БНФ, чувак, оно как трикопейки-двабревна, я же тебе не предлагаю грамматики ван Вийнгардена туда фигачить

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

не сильно, LL(1) парсер пишется на лысой коленке за 5 минут и прекрасно с задачей справляется

и вообще, это БНФ, чувак, оно как трикопейки-двабревна, я же тебе не предлагаю грамматики ван Вийнгардена туда фигачить

Так может быть оставить и регэкспы, и БНФ? Кому как что нравится? Какая разница, как оно описывается, если в конце концов выходит один и тот же конечный автомат?

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

По крайней мере для задач типа «совпадает ли с шаблоном» и «выдернуть одно-два поля из строки». Для полного парсинга конечно лучше БНФ-грамматику: оно и на кусочки порежет, и ещё подскажет, что эти кусочки значат.

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

Так может быть оставить и регэкспы, и БНФ? Кому как что нравится? Какая разница, как оно описывается, если в конце концов выходит один и тот же конечный автомат?

ну так а я только за, иногда то удобнее, иногда другое, я просто по запросу привёл альтернативу регэкспам

shty ★★★★★
()
Последнее исправление: shty (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.