Лисп - семейство языков программирования. Характерные особенности лиспов: динамичность, гомоиконность (код как данные), программируемость.
{Основные диалекты} :: Common Lisp - разрабатывался как промышленный язык, пригодный для широкого спектра применения, из-за чего имеет достаточно объемную спецификацию. Является мультипарадигменным (процедурщина, функциональщина, ооп (CLOS)), с сильной, динамической типизацией. Есть опциональная декларация типов и, в некоторых реализациях (sbcl, например), частичный их вывод. Описание особенностей: http://habrahabr.ru/post/143490 Основные реализации: - свободные: SBCL (нативный код), Clozure CL (нативный код), ECL (через сишку), Clisp (байт-код; небольшой размер образа; похоже, заброшен), Clasp (LLVM; ориентирован на интероп с C++), ABCL (байт-код JVM), gcl, cmucl - коммерческие: LispWorks, Allegro CL, Scieneer CL, mocl (для программирования под ведро и ios) :: Scheme - это минималистичный лисп, пригодный в основном для обучения, исследований. Наиболее практичными реализациями являются GNU Guile (https://www.gnu.org/software/guile/) и Chicken Scheme (http://call-cc.org/). :: Racket - развитие PLT Scheme. Racket включает в себя много подъязыков (typed racket, lazy racket, frtime racket, Scheme стандартов r5rs и r6rs). :: Clojure - cм. соседний тред.
Старался вкатиться в коммон лисп, но не осилил импорты и стд. Старался вкатиться в рэкет, но на середине книги про прекрасную ракетку забил. Хотя думал это хорошая идея делать длц под свою задачу. Сейчас думаю запилить какую нибудь десктоп приложуху на кложаскрипте и электроне. Но скорее всего тоже забью. В итоге потратил дохуя времени, и все в пустую. Даже с емаксом поебаться успел, и свой конфиг запилил. Хз, зачем это написал, просто хотел бампнуть тред.
>>1591677 Есть поговорка "Труд не уходит в песок" Вкатывайся во все подряд, забивай, опять вкатывайся. Перманентно все в голове не удержишь, но наверстать заново то, что когда-то проходил будет легко.
>>1591687 >А че тебя на лиспе так понесло, если Я думал лиспы сделают меня умным. Но инструмент не может сделать тебя умным. Он может лишь облегчить твою работу. Теперь я это вижу. >Бери какой-нибудь кхм кхм Питон++ и хуярь Плюсы это же совсем про другое. Я думал попробовать байтослесарьство, но плюсы выглядят огромными. Мне страшно туда лезть.
>>1591693 >Есть поговорка "Труд не уходит в песок" Но ведь я уже потратил время, которое не принесло пользы. > но наверстать заново то, что когда-то проходил будет легко. Только если я захочу вернуться обратно. Но я пока не могу найти серьезной причины тратить время время на лиспы. Работы нету, даже на кложе. Про остальные лиспы вообще молчу.
10й тред ? Я даже и предыдущих не видел. Как вы там? Есть ли вообще хоть какие-то люди, которые лисп в проде используют? Ни один диалект по-моему ни стандартной библиотекой, ни комьюнити не оброс. Вы уже всё , на том свете ?
>>1591717 Потому что лисп не пользуется популярностью. И что это такое - популярность на гитхабе? Сама по себе она не стоит ничего. Что ты имеешь в виду?
>>1591710 Если ты про коммон лисп, то скорее нет, чем да. Кложа активно используется очень многими компаниями, схема активно используется в академической среде и во всяких исследовательских проектах по проектированию языков.
>>1591677 Ставь IntelliJ IDEA. Поверх накатывай Cursive плагин. Бери книжку по Clojure и начинай писать код. Сложно себе представить более прагматичного лиспа чем Clojure.
>>1591677 Импорт в CL да, странноват, но нужно понимать, что это вещь, сделанная в конце восьмидесятых, и ничего подобного в других языках не было вплоть до середины двухтысячных. Там просто достаточно запомнить странные называния ("пакет" - это то, что в других языках "модуль", а "система" - это то, что в других языках "пакет"), внимательно прочитать ридми к QuickLisp и всё встанет на свои места. Я когда PCL читал, тоже на всех этих пакетах запнулся, да так, что аж на несколько месяцев отложил, но потом вернулся, осилил, и теперь охуеваю оттого, насколько же коммон лисп прекрасен (хотя местами и уродлив). Ракетка хорошая, но тормозная и на мой вкус слишком перегружена фичами. Кложу не трогал, ничего про неё сказать не могу. Мой тебе совет - вернись к CL, базарю, ещё захочешь.
>>1592148 >Ракетка хорошая, но тормозная Эт неправда. Ракет довольно быстрая схема, кроме того, есть typed/racket когда нужно максимум скорости. Серьездно, я бы забил на любые другие языки навсегда если бы типизированный ракет допили ли бы.
>и на мой вкус слишком перегружена фичами Стандартная библиотека(если это так можно назвать) в нем - бардак.
>>1592161 >А что еще не допилено для постижения сатори? Ну он как минимум житель второго класса. Часть стандартной библиотеки так на тайпед ине переведена. Плюс баги всякие, например полгода не работал дебаг.
>>1592162 >Ага 10й, последний тред утонул джва года назад (ДЖВА, КАРЛ!) На борде остались одни тралли шкальники и фсбешники. В РФ собираются новый закон принять об административной ответственности за РЕПОСТ ИЗ НЕЗАРЕГИСТРИРОВАННЫХ СМИ.
Кинеш ссылочку на реддит например, плати штраф, и на карандашик тебя.
>>1592196 Такие большие проекты как граф движок почти что нельзя довести до точки, всегда будут какие-то проблемы, или улучшения, тем более что тот-же опен жл развивается.
>>1591537 (OP) Ору со школьников-неосиляторов, которые думают, что лисп - это хороший инструмент для каких-то задач. Нет, пора уже признать, что лисп - это лучший язык для любых задач, кроме, разве что, низкоуровневых вещей, для которых есть сишка и асма
Лисп это хороший язык для запилить себе временных велосипедных тулзов когда в твоей области ничего подходящего нет - всякие дсли-хуели, парсеры-хуярсеры.
Проблема же в том, что когда появляется нативное промышленное решение, то лишп резко нафиг становится не нужен.
>>1593413 >However, they have since resumed using it for scripting on some PlayStation 3 games, including The Last of Us.[3] 2013 год. Лисп используют для скриптинга ААА игры продукта, не хотел?
бля, нахуй в живого человека сразу ассемблер засовывать? ты поехавший? мож, блядь, писсать хеллоуворлд, или алгоритм Евклида, держа в голове, как процессор достаёт кэшлайны из памяти, интепретируя виртуальное адресное пространство, и засовывая инструкции в конвейер АЛУ? или, блядь, лчше сначала нормально замести под ковёр сложности, понять, что такое циклы там, переменныйе, операторы присваивания, масивы?
>>1608083 Знаешь, есть такой производитель электроинструмента и промышленного оборудования Hilti. Очень крутая продукция у них. Удобная, надежная, дают пожизненную гарантию. В общем элитное оборудование. Почему бизнес в РФ массово не юзает их оборудование? Потому что дорого, потому что невыгодно, нет смысла. Спецов хороших мало, а васяну дай такую игрушку, он может ее и сломать. Владельцам бизнеса в большинстве же похуй на каком оборудовании работают люди. Им важен результат. Результата можно добиться и с худшим оборудованием. Ну да, оно будет чаще ломаться, оно не позволяет так быстро и удобно работать. Но оно решает задачу в общем. Тоже самое и с Лиспами.
Не каждый понимает их ценность. Не каждый умеет их использовать. Не каждый бизнес готов их юзать. Тот кто ценит свой труд, кто знает ценность и умеет использовать сильные стороны Лиспа, тот юзает их. Есть правило, которое сейчас очень хорошо работает, все что массовое == говно. И даже мнения людей. Чем больше людей имеют какое-то общее мнение, тем выше вероятность, что это их мнение дикий треш. Массовое поклонение псевдо-ООП - треш. Массовые языки - почти все говно. Принятые подходы к программированию в индустрии - почти все хуета, не имеющая ничего общего с инженерным мастерством. И наоборот. Все незаметное, все не распиаренное, все редкое - обычно качественное, верное, правильное.
>>1608134 >Дай угадаю, судя по твоему максимализму, ты не старше 14 лет? Есть что возразить по теме поста? Если нет, то досвидания. Не собираюсь с тобой обсуждать свою личность. Может твою обсудим?
>>1608145 >Может твою обсудим? Давай. Я в универе на первом курсе был таким же как ты, слушал музыку, от которой у посторонних уши сворачивались в трубочку, люто-бешено ненавидел всё, что не компилируется в нативный код и зачитывал одногруппникам вслух копипасты про то, что жаваблядь не человек. Теперь, после десятка лет работы за деньги, я растерял весь максимализм и стал прагматиком, на чём быстрее всего сделать хуяк-хуяк-продакшен, на том и пишу на питонах в основном, на коммон лиспе для души лабаю.
>>1618209 > пиздец какой огромный Это не так. Да, документ со стандартом чуть меньше, чем документ со стандартом C++, но в CL минимум базовых принципов - s-expr'ы, макросы, вот, считай и всё по большому счёту.
> выхлоп меньше или на уровне мейнстрим языков? Это не так. Мейнстрим-языки так до сих пор толком и не смогли спиздить из CL символьный тип данных, гомоиконность и макросы.
>>1618617 >но в CL минимум базовых принципов - s-expr'ы, макросы Я не спорю, синтаксис минималистичный. Но та же стд либа просто огромная. Клос огромный. Начнешь писать что-то сложнее хелоу ворлда придется вкатываться в либы, таже александрия. Захочешь оптимизировать и задеплоить свое поделие - придется разбираться в апи конкретных реализаций. И я вот думаю, а стоит ли оно того? Когда в других языках порог входа на порядок меньше, батерейки на все случаи жизни и комьюнити в разы больше.
>Мейнстрим-языки так до сих пор толком и не смогли спиздить из CL символьный тип данных, гомоиконность и макросы. И вряд ли смогут, потому что дизайн языков другой
>>1618863 > Но та же стд либа просто огромная. Кришна с тобой, в CL стдлиба чуть продвинутее, чем в чистой сишке. Чуть нужно что посложнее - приходится тащить третьесторонние либы.
> Клос огромный. Чего в нём огромного? defclass и defmethod? Серьёзно, клос - это самый изящный ООП, который я когда-либо видел, а я только за деньги писал на полудюжине языков, а посчитать те, что для души - так и дюжина наберётся.
> Захочешь оптимизировать и задеплоить свое поделие И для этого есть решения - многочисленные trivial-* библиотеки, унифицирующие разницу в реализациях, для деплоя можно взять тот же самый шинмеровский deploy. С деплоем того же распиаренного пистона ты насосёшься гораздо больше хуёв.
> Когда в других языках порог входа на порядок меньше Не питай иллюзий, что в CL, что в мейнстримные языки порог входа примерно одинаков, если не считать JS, вот это вообще ёбаный ад, заборы и коровники.
> И вряд ли смогут, потому что дизайн языков другой Amen to that. В руби вроде были какие-то потуги, но вроде бы всё равно не дотягивает до CL.
>>1618863 >Захочешь оптимизировать и задеплоить свое поделие -
У тебя есть возможность прямо в рантайме лично поковыряться ручками в JIT компиляторе и добавить все необходимые AVX-инструкции и правила их использования.
Да нет, просто сытые кекогерцы и гигабайты оперативы тогда еще не изобрели, движение на сервер тогда еще не было - было наоборот - с сервера, который мейнфрейм на персоналки.
>>1626492 Java твоя в 2010 умерла, все на лисп переходят, в том числе и тырпрайз. Я еще помню как на днях был на конференции (работаю в крупной компании over3000 сотрудников), решаем вопрос об архитектуре системы. Мои коллеги че-то пиздели про хайлоад и плюсы, но у меня уже было пару козырей в рукаве. Так что я встал и говорю - все хуйня, ребят, в 2к20 все четкие пацаны на лиспе хуярят, так что давайте выбросим весь тот зашквар, на котором сейчас пыхтит продакшн. Смело заявления, но оно сработало. Пол бюджета тупо вылили на переписывание инфраструктуры на всякие лиспы, каждый прогер выбирал свой любимый диалект и на нём писал, даже босс подключился и сказал "Бля какой хуйней мы занимались, вот где живет дух старой школы, пацаны".
>>1626492 На кложатв полно выступлений от хуйов с реальными проектами В основном это хайлоад тырпрайз ориентированный на дата процессинг Как пример swarmify и amperity Самое смешное, что практически все из них начинались как стартапы и брали рандомных хуев (хоть в основном и связанных с жабой) и студентов без опыта лиспа вообще Путь проекты и не разрослись до мегакорпораций, но свою нишу занимают и до сих пор на плаву по 5+ лет
>>1628665 Жаба скрипта на столько отвратительна, что это грустный мем. Я хз сколько раз пытслася в жс, но через пару часов из за блевоты уже монитра не видно. Так что клжс вполне себе выход.
>>1591537 (OP) Начал читать beautiful racker, понравилась идея придумывать свои языки и дсл. И делать это удобно, потому что есть либы. Как с этим обстоят дела в борще?
>>1635556 >Как с этим обстоят дела в борще? В хаскеле что ли?
Фишка именно рэкета как раз в том, что это по сути фреймворк для написания своих языков. Но с дслами и в кл все ок, можно даже синтаксис свой через ридер-макры захуяривать (но ненужно). Алсо в схеме (и ракете) макросы гигиенические, в кл - нет, можно в них делать все что угодно.
>>1636141 >В хаскеле что ли? В общелиспе же. >рэкета как раз в том, что это по сути фреймворк для написания своих языков Есть ли такой же фреймворк в кле? Похоже что нет
Хочу написать парочку языков под свои задачи, как это в книге beautiful racket расписывали и подумал, а можно ли сразу в кле такое проделать. Про дсл в курсе но имхо для этого потребуется много усилий, а в рекете похоже это делается очень легко.
>>1636246 Мог бы, но какая принципиальная разница между формошлёпством крудов за деньги, которым я сейчас занимаюсь, и разработкой драйверов за деньги? Я и сейчас, когда на CL пишу, с интересом заныриваю в выхлоп (disassemble) и оптимизирую потом запах такой, что аж обои от стен отклеиваются
>>1636286 >Когда-нибудь, я, возможно, вернусь к нему. Ага, как только тебе понадобится хоть какое-нибудь быстродействие. Серьёзно, ракетка хорошая, но тормозная очень.
>>1636817 > ракетка хорошая, но тормозная очень. Быстрее питонов, руби, пхп. Медленнее ноды. Среди скриптовых не худший вариант. Кл в другой категории все таки.
>>1637333 Да. > Медленнее ноды. Ты бенчмаркал или так, мнение с дивана?
>>1637104 Они живые, а gambit/gerbil - самый быстрый из них, но даже он в код втыкает проверки типов в рантайме на каждый чих. В CL-то есть возможность gradual typing.
>>1643865 Не то. Мне нужно монотонно распределить одну функцию на несколько тел, а не делать все в одном теле. Как в хаскелле или прологе. Другой пример, чтобы понятно было. Допустим есть функция transform: (define (transform 'foo) 'bar) (define (transform 'bar) 'foo)
Вызываем: (transform 'foo) Ожидаем в консоли: 'bar
>>1643882 Такой способ мне неивестен, в CL у функции всегда ровно одно тело. Конечно, всегда есть возможность изобразить макрос, который будет вместо defun и который будет матчить аргументы и вызывать нужную суб-функцию, но это уже из разряда троллейбуса из буханки хлеба. А, хотя стой, можно же что-то такое изобразить на дженериках. Не уходи никуда, сейчас напишу.
>>1643802 >factorial 1 = 1 >factorial n = n × (factorial (n × 2)) На каждый паттерн создаются новые переменные Уже пару лет как в компилятор добавили депрекейтет варнинги по этому поводу
Как же меня бесит этот хуевый мир, где нужная инфа не лежит на поверхности, пидоры, мать вашу! Все ваши ебучие принципы форматирования умалчивают, как быть, когда ПЕРВЫЙ БЛЯДЬ член в скобках тоже имеет ОХУЕЛИ ДА БЫВАЕТ ЖЕ ТАКОЕ свой размер??? Есть это лямбда какая-то, например. Что делать, сука??? let не предлагать, не всегда подходит.
>>1673602 Ладно, похуй, все в этом мире относительно, и все человекочитаемые принципы условны. У всего есть мера и предел. Без дефайнов не обойтись. Будьте честны сами с собой и живите в гармонии. Пис.
Программач, хочу написать статически-типизированную схему без сборки мусора с крутыми регекспами и макросами (которые выйдут из разряда "Bad coding practice") безопасность которой будет частично/полностью математически подтверждена, че думаете?
>>1595844 чел, с паскаля надо начинать, а уже потом переходить на асм, т.к. новичка кидать в асм это маразм а в паскале есть норм указатели. После асма С а потом можно и по лишпам пройтись.
>>1681658 >новичка кидать в асм это маразм А как диды компьютер изобретали, ты дурак? Они ж тогда и алгоритмов не знали, и паттернов-хуятернов, но как-то же писали на своих EDSAC и не жаловались
>>1591677 Я вкатился в ракет побольше твоего. Можешь задавать ответы. Идея длц интересная но я этим ещё ни разу не пользовался. Написал пару утилит для себя.
>Мне нужно монотонно распределить одну функцию на несколько тел, а не делать все в одном теле. Тебе чисто визуально важно это, или как? Тут макросик как бы очевиден.
В ракетке есть (define/match как бы) Если тебе именно нужно несколько дефайнов, то ты можешь свой собственный define сделать. Который соберет несколько определений в define/match
>>1710667 >Ты буквально алгоритм на нем прямо записываешь. Мы не мыслим алгоритмами, поэтому писать ast неудобно. И популярность лиспа и это доказывает, с этим странно спорить.
При решении арифметической задачи ты не рассуждаешь, как - надо разделить сумму четыреъ и семи на два. Ты скорее думаешь как, к четверке прибавить семерку и разделить на два.
Я очень рад, что ты весь такой способный, молодой и шутливый и все тебе легко. Но на деле, если ты будешь объективен, то людям ни логическое, ни каноническое функциональное, ни аст-подобное - не удобно. К нему именно что надо привыкать. А к императивному привыкать не надо. Оно естественно.
>>1710670 Ого, вот это тебя разнесло. Какбудто ты на лисп обиженный чем-то. Лисп очень много где успешно применяют. И твоя способность читать мои мысли поражает конечно.
1. Человек может менять способ мышления как угодно. Поэтому он и человек. Смотреть уровни обучения по Бейтсону.
2. Способ записи арифметики из 3тего класса младшей школы не есть истинна. Система школьного образования была созданна для превращения сельских дебилов в боеспособную военную единицу.
>>1710682 >как угодно Нет, не может. Как бы хорошо ты не выучил английский, на русском все равно будет удобней говорить. Со школьной нотация аналогично - у тебя под неё сформировался мозг, когда ты ещё был пиздюком. А все, что формируется в детстве - оно обычно не обратимо.
Вот, погляди, множество лисп программистов даже после нескольких лет дрочки языка вполнеисогласны с тем, что в человеческой нормальной нотации код легче читать https://readable.sourceforge.io/
>>1710771 >Нет, не может. Как бы хорошо ты не выучил английский, на русском все равно будет удобней говорить. Со школьной нотация аналогично - у тебя под неё сформировался мозг, когда ты ещё был пиздюком. А все, что формируется в детстве - оно обычно не обратимо. Не подтверждёно ни одним вшивым студенческим исследованием, зато эмпирически дохуя примеров обратного, когда люди со временем забывают родной язык к хуям.
>>1710670 >А к императивному привыкать не надо. Оно естественно. Какой пиздец. Не, ну если ты ебаный робот, то возможно.
Меня наоборот от императищины коробит, настолько она неестественной для человека кажется. Я когда первый раз на уроке информатики в школе увидел i = i + 1 - просто охуел от этого бреда. Мне кажется это нормальная реакция, и нужно реально пройти через несколько лет отупления посредством программирования на энергичной мутабельной процедурной параше с аппликативным порядком вычисления, чтобы деградировать до уровня "императивного мышления", если такое конечно вообще возможно. Может быть программирование на иммутабельном ЯП с ленивостью, каррированием по умолчанию, pointfree, чистотой и поддержкой денотационной семантики сможет сделать из такого овоща обратно человека, но не уверен. Лучше процедурную парашу всё же обходить стороной.
>>1712712 >Я когда первый раз на уроке информатики в школе увидел i = i + 1 - просто охуел от этого бреда Ну тогда у тебя задержка развития, если ты начал программировать после уроков информатики
>>1712730 Программировать лучше вообще не начинать (особенно на императивной параше) (особенно для кого-то за деньги), но если это неизбежно, то чем позже - тем лучше.
>>1713176 Тут моих два поста, один из которых ответ на ответ на первый, так что не семенство.
>>1713125 >главное это пиздеть на бордах свои шизотемы Какие, например?
>>1712751 У меня есть работа программистом (к сожалению, гордиться тут нечем, лучше скрывать). Но намного лучше получать деньги более вменяемым способом, а программировать дома в качестве хобби. Как тут кто-то недавно точно подметил, программирование за деньги - это говно. Разница лишь в уровне вонючести, например, программирование в модном проекте на ClojureScript/Elixir лучше, чем пердолинг тырпрайзо-говна в банке/бадишопе на аутстаффе на жабе, но хуже возможности запиливания конкурентно-ориентированных языков с матином-лофом и автоматическим доказательством корректности на деньги налогоплательщиков.
>>1713554 Частично соглашусь, но писать на ФЯ вполне себе можно и это намного комфортней, чем на ОО-языках. Тут скорее зависит от степени упоротости на определенных темах, типа программирования на тайплевеле, ссылочной прозрачности и т.д. так что для программирования времени не остаётся. Тут два варианта. Либо человек изначально не хотел программировать, ему просто нравится манипулирование значками/символами, а в математику, матлингвистику или професиольный компсайнс не смог. Либо второй вариант, человек работает программистом, но так как коммерческое программирование - это тупое и однообразное занятие, а каждая новая задача похожа на предыдущую как две капли воды, то программист, чтоб не помереть со скуки, начинает развлекать себя всякими обобщениями, систематизацией и прочими играми с абстракциями, что сопряжено с поиском новых концепций, выразительных средств и соответсвенно изучению новых языков. Заполучив в руки какой-нибудь хаскель с его богатым внутренним миром, человек начинает в него проваливаться, так как процесс повышения уровня обобщения и формализации - в общем-то бесконечен (когда потенциал хаски будет исчерпан, дальше пойдёт Идрис или любой прувер модный в этом сезоне). При этом обычное рутинное программирование на жабе в лохусофте теперь вызывает ещё большее раздражение, потому что совершенно не подходит для абстрактного мышления, которое теперь ещё и наполнилось новыми понятиями. Раздражение не позволяет нормально работать, а вымешать его надо, поэтому вместо быдлокодинга очередной CRM на работе или абстрактного ассоциативного кластера метапарадигм дома, человек срется на мейлачике рассказывая ОО-индусам и байтоебам что они все быдло, а из языки - говно.
>>1713879 Пруверы - хуюверы. 1)Язык - это инструмент, сами по себе эти пердоли ничего не дают. 2)Сколько не ебись, а вебер, который максимум ходит в бд под нескучными обертками и распределенными роутами из своего модного фреймворка в итоге по соотношению зарплата -> умственные затраты выигрывает. Если хочешь НАУКУ, то надо лезть в программирование в последнюю очередь.
>>1713879 >При этом обычное рутинное программирование на жабе в лохусофте теперь вызывает ещё большее раздражение, потому что совершенно не подходит для абстрактного мышления, которое теперь ещё и наполнилось новыми понятиями. Разве новые понятия не помогают лучше решать старые задачи?
>>1736145 Если программа большая, то сложно уследить, что функциям передаются параметры верных типов. Этого можно избежать, если совершать проверку типа на каждый чих... чем ML автоматически занимается еще на этапе компиляции.
>>1736172 >Если программа большая, то сложно уследить, что функциям передаются параметры верных типов.
Это популярная легенда, которой статико-дебилы пугают друг-друга как бабайкой. Разумеется ничего кроме статико-параши и хеллоу-ворда на питоне они не видели, но легенду нужно поддерживать, чтобы как-то оправдать свой анальное рабство у тайп-чекера.
>чем ML автоматически занимается еще на этапе компиляции. Сейчас бы тащить целую нейронку ради предсказывания типчиков, когда можно обойтись обычным тайп-чекером.
>>1736172 >Если программа большая, то сложно уследить, что функциям передаются параметры верных типов. Зачем за этим следить, если лисповый рантайм делает это за тебя?
>>1736618 >>чем ML автоматически занимается еще на этапе компиляции. >Сейчас бы тащить целую нейронку ради предсказывания типчиков Бля, это очень смешно
ML настолько же потомок Лиспа, насколько C потомок Алгола. Надо учитывать, что в 70-е лисп еще не ассоциировался со скобками. В частности, Маккарти все продолжал планировать реализацию этих чёртовых M-expessions.
В англовикипедии написано про ML (правда, без указания источника)
It has roots in Lisp, and has been characterized as "Lisp with types".
Вот довольно неоднозначная цитата из The Definition of Standard ML
The full definition of this first version of ML was included in a book [19]which describes LCF, the proof system which ML was designed to support.The details of how the proof application exerted an influence on design is reported by Milner [39]. Other early influences were the applicative languages already in use in Artificial Intelligence, principally LISP [36], ISWIM [28] and POP2 [10].
Указанные ISWIN и POP2 находились под сильным влиянием Лиспа.
Немножко оффтоп и идти бы мне в /s/, но я всё равно спрошу. Господа лиспачеры, пользуетесь ли вы емаксом? Просто ну, ну сука ебать, ну бля, ну ебучий елисп, ну что это за хуйня ебаная. Вас самих не выворачивает с того, что он такой ублюдский? И ведь альтернатив нихуя, чтобы дали мне не xterm дрочённый, а lisp-term точённый. Ведь по сути, господа, емакс именно как терминалчик и применяется, ну и как шелл, и к обеим задачам по сути приспособлен ну примерно никак. Ох, как заебись бы было, если бы он был... На портабельность на винду чисто поебать.
> Вас самих не выворачивает с того, что он такой ублюдский? ELISP-то? Ну не фонтан, конечно, но уж точно полущ viml-я или, прости г-ди, json-а, которым конфигурируются хипстерские поделки типа сублима.
Попробуй в Pharo пописать на Smalltalk, там, говорят, всё чудно интегрировано в IDE.
>>1736673 >Но в каком месте эмэль ответвление лиспа - непонятно. Лямбда-выражения. Предпочтение рекурсии над итерацией. Удобная работа со списками. Минимальная необходимость указывать типы. Возможность писать полиморфные функции. Функторы как гигиеничные макросы. Сборка сора.
>>1738218 Функтор возвращает определение, которое зависит от параметров: functor MakeCompiler(structure C:CODEGEN and A:ASSEMBLER) : COMPILER = struct --здесь как-то используются C и A end
Вызов функтора похож на применение макроса: structure X86Compiler = MakeCompiler(structure C = X86Codegen and A = X86Assembler) вместо structure X86Compiler = struct ... X86Codegen ... ... X86Assembler ... end
>>1737909 >Лямбда-выражения. >Предпочтение рекурсии над итерацией. >Удобная работа со списками >Возможность писать полиморфные функции. >Сборка сора Ну так у тебя любой ФЯ будет ответвлением лиспа.
>Возможность писать полиморфные функции. >Сборка сора А это вообще где попало есть.
>Минимальная необходимость указывать типы. Не нужно путать динамическую дрисню и статически типизированный язык с Хиндли-Милнером.
>>1738644 >Ну так у тебя любой ФЯ будет ответвлением лиспа. Для конкретики сравнил ML-и с Lisp-ами. >Не нужно путать динамическую дрисню и статически типизированный язык с Хиндли-Милнером. Ну кстати на уровне реализации ML сохраняет динамическую типизацию: чтобы работал полиморфный =, чтобы отличать [] от nil, и ради GC. >>1738646 Возвращает программу, а не данные.
>>1738644 >Ну так у тебя любой ФЯ будет ответвлением лиспа. На момент 70-х (когда эмель и появился) эти особенности, ныне характерные для ФЯ, были практически эксклюзивными для лиспа. Так что да, получается любой ФЯ является потомков лиспа. Ты ведь читал Recursive Functions of Symbolic Expressions and Their Computation by Machine?
Кстати, а JS очень часто рассматривают как Scheme с алголоподобным синтактисом (да и Питону достается).
>>1737040 > емакс именно как терминалчик и применяется, ну и как шелл что ты несешь? > ебучий елисп, ну что это за хуйня ебаная. Вас самих не выворачивает с того, что он такой ублюдский именно elisp "ублюдский"? Да норм, на самом деле. После CL немного непривычно было. А сейчас, когда есть лексические переменные и CL-совместимые макросы и функции, то вполне
>>1737040 Кстати, если уж так тошнит от elisp (от чего именно? от dynamic scope?), то есть реализации на CL и на Scheme. Но там, конечно, нет такого богатства готового elisp-кода, которое мы так любим
>>1737040 >Господа лиспачеры, пользуетесь ли вы емаксом? Да >Просто ну, ну сука ебать, ну бля, ну ебучий елисп, ну что это за хуйня ебаная >Вас самих не выворачивает с того, что он такой ублюдский? Чому? Кроме перформанса с однопоточностью вопросов не вызывает >И ведь альтернатив нихуя, чтобы дали мне не xterm дрочённый, а lisp-term точённый. Чего? >Ведь по сути, господа, емакс именно как терминалчик и применяется, ну и как шелл, и к обеим задачам по сути приспособлен ну примерно никак Может прxминяться, может не применяться >На портабельность на винду чисто поебать Сосите хуй быдло
Наевшись говна с гринлетами питона и корутинами луа, от функционально-фашисты услышал о континуейшенах, и есть они в трёх с половиной языков включая схемку. Учу схемку чтобы понять как это дерьмо там работает. Будут ли какие-то ещё профиты, кроме лёгкости чтения SICP?
Вариант с нативной компиляцией (так называемый CS) сравнялся по функционалу с вариантом с байткодом. Со следующего релиза уже CS вариант будет основным.
>>1786418 Пишут, что Chez примерно как SBCL при дефолтных оптимизациях. В SBCL можно включить более опасные оптимизации, а в Racket-на-Chez можно критичную часть написать на Typed Racket. Короче, точно сказать трудно, если у тебя есть какие-то бенчмарки, которые можно запустить и на CL и на Racket, можно проверить.
>>1790335 Писал и на SBCL, и на Racket (и на Typed Racket пытался). По моим субъективным ощущениям, Typed Racket не даёт вообще никакого прироста производительности, ну и сам Racket ощутимо медленее SBCL. Плюс проблема даже не в тормознутости самой по себе, а в том, что ты в Racket с ней ничего не можешь поделать, даже понять, отчего тормозит. В CL же у тебя есть disassemble, декларации типов те же, declaim optimize, вот это вот всё. Есть простор для ручной оптимизации, что меня, как бывшего байтоёба, не может не радовать.
>>1790594 Ты не путаешь обычный Racket на байткод-машине с новым на базе Chez Scheme? Меня, если честно, устроит пока если он будет в два-три раза медленнее, чем SBCL на максимальной оптимизации (а похоже, примерно так и будет). Для достаточно нового продукта это неплохо.
>>1790594 Кстати, инструментарий постепенно добавляют: >as for the CS variant of Racket, then it cannot be converted back to an approximation of Racket, but installing the "disassemble" package may enable disassembly of the machine code. Decompilation is mostly useful for checking the compiler’s transformation and optimization of the source program.
>>1790838 > Ты не путаешь обычный Racket на байткод-машине с новым на базе Chez Scheme? Пробовал оба, последний и правда даёт малюсенький прирост производительности.
> the "disassemble" package Хах, пробовал я этот пакет, полнейшая залупа по сравнению с CL-ным disassemble. Последний тебе выводит подробнейшую информацию, какая константа что обозначала в исходном коде, какие имена функций, чокаво. Тот рэкетовский третьесторонний пакет тебе просто вываливает машкоды без всяких пояснений, и поди разберись, за что в твоём коде отвечает инструкция call 123456.
>>1791902 Интерфейс чуть более удобный, всё-таки не текстовый емаксовкий буфер, может и графы рисовать, и вложенные структуры разворачивать. Ну и есть возможность наблюдать изменения в реальном времени. В остальном тот же слайм-инспектор
Как не крути, но `x => y => x + y` выглядит намного лучше, красивее, короче, незахломленннее, однострочнее, чем `(lambda (x) (lambda (y) (+ x y)))`. А ведь я ещё не привёл банальные примеры с map/reduce, которые легко пишутся в одну строчку, и только в лиспах придётся писать в несколько строк.
Серьёзно, (lambda x (y x)) это такое же уродство как и function(x){return y(x)} и признак говнокода.
>>1799172 Зато в лиспе не нужен сложный парсер, а ГОМОИКОННОСТЬ позволяет делать макрорасширения на коленке. А ещё не нужно помнить приоритеты операций. Как я тебя уел, а?
>>1799172 >банальные примеры с map/reduce, которые легко пишутся в одну строчку, и только в лиспах придётся писать в несколько строк. Ты просто не умеешь их готовить. (defun sum-digits (number &optional (radix 10)) (reduce #'+ number :key #`(digit-char-p % radix))
>>1608098 риторика слабовата. -Хилти дорого пиздец -Да конечно епта заказ и без Хилти можно сделать, но все же понимают, что это халтурка будет. Кто себя ценит, всегда нанимает только бригаду с Хилти. - Чем больше людей считает, что я не прав, тем выше вероятность, что они все ошибаются. Ну, чисто математически же. - Поэтому и с лиспом так же.
Ваще ахуеть красава. У лиспа смотрю и евангелисты ахуенные. Срочно начинаю изучать этот богоязык. В пизду мейнстрим.
>>1799172 >x => y => x + y >(fn [x y] (+ x y)) >#(+ %1 %2) >+ ты привел очень тупой пример, кстати; в общем случае графический partial application работает чуть лучше, чем его хаскеллевские аналоги
В схемке кстати (λ (x y) (+ x y)) тоже норм выглядит.
>А ведь я ещё не привёл банальные примеры с map/reduce, которые легко пишутся в одну строчку, и только в лиспах придётся писать в несколько строк. Бред какой. Это как раз в х-ле по традиции пишут трансформации в уебищном обратном порядке, тогда как в кложе (ну и окамле с его |>) все заебись: (-> foo (map f) (filter g?) (reduce h))
И да, любой нормальный человек форматирует этот код так, чтобы каждый шаг был на отдельной строке, потому что так читать проще (капитан очевидность).
>признак говнокода Понятие "говнокод" относится к абстрактной структуре кода, а не к используемому синтаксису. Короче юнец еще ожидающий возмужания ты, десу.
>>1790335 >Пишут, что Chez примерно как SBCL при дефолтных оптимизациях. Преувеличивают. Понадобилось вот распарсить 20гб xml, решил сравнить лисповые s-xml, cxml и ракетовский sxml. Первый на моём тостере парсит ~24мб/с, второй - ~38-42мб/с, а ракета едва до 2мб/с разгоняется.
>>1810294 >>Пишут, что Chez примерно как SBCL при дефолтных оптимизациях. >Преувеличивают. Понадобилось вот распарсить 20гб xml, решил сравнить лисповые s-xml, cxml и ракетовский sxml. С дефолтными, а не максимальными. А cxml не только на максимум, но и вообще вручную злоебуче оптимизирован. Они даже строки свои написали! ("rods" у них называются). Впрочем, xml в ракете это вообще какое-то говно, что меня очень удивило. Некоторое время назад надо было что-то большое парсануть, вообще не нашел ничего рабочего. Либо безумно медленно, либо не поддерживает namespaces, либо еще что.
надо делать текстовый редактор на common lisp, но чттбы работал не только с абстракцией ьекста и гуи, но и имел доступ к битмапу фрейма, что позволило бы динамически отрисовывать графики, сложные формулы, вообще любую гиафику.. вот это было бы круто
Есть тут знатоки метаобъектного протокола? https://github.com/fukamachi/mito/blob/master/src/core/class/table.lisp#L59 Наткнулся на такую проблемку. Та функция вызывается в момент инициализации класса, представляющего таблицу бд, ищет слоты, которые ссылаются на объекты других таблиц, и на каждый из них добавляет по вспомогательному с внешним ключом. Например, (defclass dir () __((name :col-type (:varchar 255)) ___(parent :col-type (or :null dir))) __(:metaclass dao-class)) должен добавиться слот parent-id (${slot-name}-${primary-key-name}) Проблема в том, что если слот ссылается на свой же класс или ещё не определённый, то вылетает ошибка, о чем, собственно, комментарий в коде и гласит. Идиоматично ли добавление слотов на стадии финализации класса? В какой метод это разумнее перенести: finalize-inheritance, compute-slots, compute-effective-slot-definition или другой?
>>1813680 >С дефолтными, а не максимальными. s-xml довольно бесхитростно написан >xml в ракете это вообще какое-то говно По-моему, в ракете со всем так. Который раз уже намереваюсь на ней писать, и постоянно всё упирается в отсутствие или непригодность библиотек. >>1817070 Мне их не вытащить нужно было, а перегнать в БД
>>1821053 >s-xml довольно бесхитростно написан S-xml или cxml? s-xml действительно бесхитростен, но он еще примитивнее того, что есть в ракете. CXML это мощнейшая хрень, но там такая ручная оптимизация, что яебу такое писать.
>>1875599 Ты пойми, мир сдвинулся. В результате страшной катастрофы были уничтожены практически все живые существа, а выжившие давали ужасное, поразительное в своей омерзительности, потомство. Большинство умирало, 90% первого поколения были бесплодны. Но в результате жутких мутаций стало возможно межвидовое скрещивание. Из-за множественного наследования здесь можно встретить кошмарных существ: программист С++ с телом рыбы и хуем слона, труп страуса с китовым усом вместо глаз, джигурду в малиновой юбке, выдающего себя за тайскую шлюху. Здесь царят хаос и ужас с тех пор как радиоактивная пыль скрыла землю от солнца в 1983 году. Потом, когда в 1998 решили снять режим глобальной катастрофы, человечество было уже мертво, потому были законодательно закреплены права новых существ. Организмы практически избежавшие мутаций были уравнены в правах с разлагающимися на глазах и истекающими слизью трупоедами и с хищными растениями. Ты представляешь всю безысходность этого мира? Но даже здесь можно видеть лучик надежды. Существа сохранившие глаза и осколки разума тянулись, как цветы с солнцу, к Роланду Дискейну Хаскеллу Карри и его небольшому отряду: Сюзанне Алонзо Чорчу и Джону Маккарти, которые устало брели через эти пустоши. Они были стрелками функциональщиками. Путники несли порядок и знания именем рода Эльда Теории Категорий. Существа хватались за эти крупицы, неловко пытались рисовать своими шупользеподобными руками стрелки на зеленом песке, они получали квадратные скобки вместо круглых, они хотели чистоты, но лишь продолжали пачкать и без того грязные руки. Маленький отряд уходил. Хаскеллу было невыносимо больно видеть страдания этих существ, он знал, что несет ответственность. Но уходил, ведь его неудержимо тянуло к Башне. Он знал, что Бьёрн ждет его там. И там должно было все решится. Из-за Бьерна мертв Денис. Из-за Бьерна мир сдвинулся. Хаскел шел вперед, хоть и не знал, чем это закончится, но два аппликативных функтора приятной тяжестью на поясе давали уверенность, что это лучи не будут разрушены...
https://en.wikipedia.org/wiki/Stalin_(Scheme_implementation) >STALIN often generates code that outperforms handwritten C and Fortran code > The compiler does lifetime analysis and hence does not generate as much garbage as might be expected Если это такой мощный компилятор, то почему его никто не развивает?
>>1880209 Он заброшен автором полтора десятка лет назад, а в его исходниках трудно разобраться кому-либо, кроме автора, потому что он из академии и пишет очень академический код. Но так-то да, из всех схемных компиляторов он до сих пор где-то в топ 3 по быстродействию, несмотря на то, что нихуя не поддерживает фичи из новых стандартов. Автор из (((этих))), кстати, отсюда и название.
>>1880327 В его работу я пока не вчитывался, а только проглядел по диагонали, но, кажется, он всё достаточно подробно и внятно изложил. Вообще, для меня до сих пор загадка, почему для такого простого языка, который будто кроился под обкатывание передовых идей области компиляторостроения, за почти полвека так и не появилось ни одной нормальной реализации. >Автор из (((этих))), кстати, отсюда и название. Коммунист?!
>>1880546 Ну б-г тебе в помощь. Вот тебе еще статья Грэма с референсами на некоторые передовые и до сих пор непревзойденные вещи в области лиспового компиляторостроения: http://www.paulgraham.com/thist.html На самом деле, я сам бы хотел этим заняться, но платить за это, по крайней мере сразу, никто не будет, а кушать хочется, вот и продолжаю уныло веслать.
>Автор из (((этих))), кстати, отсюда и название. Коммунист?! Еврей же.
>>1881046 >На самом деле, я сам бы хотел этим заняться, но платить за это, по крайней мере сразу, никто не будет, а кушать хочется, вот и продолжаю уныло веслать. Да уж. За интересное никогда не платят. Я нагрёб себе на месяцев 10 гречки(сука, греча уже на вес золота) пшенки с хуйцами, теперь могу побыть свободным человеком.
>>1880546 Еще такой аргумент вброшу: при динамической типизации ты почти всегда будешь утыкаться по производительности в (ан)боксинг, если только не навернул продвинутый gradual typing, как в CL, но в R*RS такого, конечно, нету, минимализм во все поля.
>>1881171 > Я нагрёб себе на месяцев 10 Смотри, сбережения утекают быстро. А вообще завидую.
>>1881612 Ну, я отложил из расчёта 15 на месяц, потому что больше никогда не тратил (если не считать разовых крупных покупок). Такой потолок позволяет не считать расходов, плюс остаётся порядка 4х тысяч, которые пойдут на месяц-полтора до первого заработка.
>>1882226 Сейчас всё дорожает - просто пиздец. И это только начало. А тебя какой-то очень минимальный лимит. Так что, мне кажется, 6 мес. было бы более реалистичной цифрой.
Тут ещё надо понимать, что 10 мес - это будет следующий октябрь. Не лучшее время для поисков работы. Если к тому времени вообще будет работа. Лучше - весна.
>>1882312 >А тебя какой-то очень минимальный лимит. Это с запасом. У меня расходы скромные: интернет, счетчики да простые продукты (мука, крупы, овощи и т.д.). >Лучше - весна. Не, не лучше. Всрать лето на галеру никак не хочется.
Я что-то пёзнулся посреди ночи Как по-человековому сделать репликейт (копирование строки N раз) в elisp'e? Реплекейтить нужно много, в первом приоритете перформанс, общелисповые штуки исполььзовать не очень хочу (по крайней мере если они не дадут пару штук перформанса)
>>1901248 Можно предположить, что наиболее быстрый способ такой же, как в общелиспе — with-output-to-string. Или with-output-to-temp-buffer, если конечная строка должна получиться очень большой.
Да блин блять что в емаксе на сегодня считается мейнстримом для ui? Хочу простенько дергать апишки новости там какие-нибудь, курсы валют, харкач, нужны какие-нибудь универсальные формочки\лейату Искоробочные тейблы это совсем атас какой-то, стайлинг текста через enriched (что по совпадению идеально подходит под борды) почему-то ругается на какой-то фонт лок, имежи распердоливают высоту строки соответственно своей (их вообще можно как-нибудь вставить с рассчетом на несколько строк?) Маркдаунские либы не очень подходят, для чего-то они получаются оверкиллом, для чего-то не хватает (манипуляций с имагами, например). тащить что-то большое для таких базовых задач не хотелось бы Уже несколько вечеров ковыряю апишки, по итогу по делу ничего не написав, лол
>>1911707 Спасибо, а я сам так и не понял на чем надо писать, в задании на одной строке написано CLIPS, на следующией CLISP >neq ?x ?y Пытался так, не работало, может я тупо по синтаксису неправильно писал, я решил что надо в defrule одним из правил это указать, т.к правило срабатывает только если все эти функции возвращают тру. Но так жаловался компилятор или что там собирает код на этом языке. В итоге запилил что-то типа такого: (tparent (parentname ?f) (childname ?p&~?x)) , опять же не совсем вник как работает, но вроде как "p, но не x"
>>1911832 >в задании на одной строке написано CLIPS, на следующией CLISP CLISP - реализация общелиспа, CLIPS - среда разработки экспертных систем со своим собственным лиспоподобным языком. >Пытался так, не работало ><conditional-element> ::= <pattern-CE> | <assigned-pattern-CE> | <not-CE> | <and-CE> | <or-CE> | <logical-CE> | <test-CE> | <exists-CE> | <forall-CE> ><test-CE> ::= (test <function-call>) Видимо, нужно писать (test (neq ?x ?y))
>>1928412 Сама по себе кожура - нет. Просто такая своеобразная штука с кучей сомнительных решений. Хайп прошел, кложехипсторы наигрались и бросили, с тех пор она больше никому и не нужна.
>>1928530 Ну тогда поторопись, пока ещё с парочку осталось на ххру целых две веб-обезьяньих вакансии на кложе, потому что скоро затихнут и последние отголоски былого хайпа.
>>1928530 Не обращай внимания, это тебе местный шизик выше отвечал. Его в детстве анально изнасиловали кложурасты, теперь он от любого упоминания сабжа начинает верещать и проецировать в тред беспричинную жопную боль. Именно из-за таких дебилов для CL нихуя нет библиотек, кстати.
>>1591537 (OP) > Самый мощный язык программирования это Lisp. Если вы не знаете Lisp (или его вариант, Scheme), вы не знаете, что имеется в виду, когда говорят о мощности и элегантности языка программирования. Однажды вы выучите Lisp и поймете чего не хватает в других языках программирования. Это правда?
>>1944426 >эта книга специально создана для того, чтобы заставить читателя полюбить лисп. Я бы такую характеристику дал SICP'у, PCL - это прост для перекатышей из других промышленных языков, чтобы прочитал и хуяк-хуяк начал лямбды вертеть на доске маркером
>>1944537 >Я бы такую характеристику дал SICP'у Не соглашусь. SICP - курс вводных лекций в программирование, схема там выбрана просто как высокоуровневый язык с низким порогом входа для новичков >это прост для перекатышей из других промышленных языков Лол. А из академических не получится, да? В PCL-то как раз и интерактивное программирование показывается, и затрагивается тема eDSL. Но немного поверхностно, всё-таки книга рассчитана на незнакомых с общелиспом людей.
>>1946190 Толсто. Минимальнее лиспа ты ничего не найдешь. Лисп по сути - это 7 функций, все. Уровнения максвелла в компсае. Хочешь, основывайся на них. Потом выросли на этих принципах языки, которых по праву можно называть "лиспами". Если хошь минимализма - бери стандарт схемы который на 50 страниц. И я так и не понял почему ты фичи называешь скрытыми - это для тебя любая непонятная фича?
>>1946242 > Минимальнее лиспа ты ничего не найдешь Ага, а переменные и редукция там на пране работают, а не подразумевают под собой некоторый механизм, да?
>>1946286 Да все подразумевает под собой какой-то механизм. Важно - где ты проводишь линию, абстракцию. И эта абстракция в лиспе - элегантна. Нет, хочешь, ебись с Ц и называй себя ноймоновским королем, мне то что.
>>1946319 > Да все подразумевает под собой какой-то механизм. И это никак не оспаривает мой пост. Вот если бы на лиспе переменные были бы не встроенны, а просто абстракциями для удобства написанные на самом лиспе, то да, лисп был бы минимальным тьюринг-полным языком программирования.
>>1946369 Ты не догоняешь. Если у тебя есть 7 функций основанный на s-expressions и лейблом + абстрактная машина которая реализует это все (а она может это делать как угодно, в этом и смысл, она не должна быть фон номоновской), то ты в шоколаде. Вот смотри, ты говоришь переменные: а это просто alist, который ты можешь assoc'ать как хочешь. Переманная в лиспе - это атом замапанный к sexp'у через sexp: '((x 0) (y 1)). Твои int doubles manya_penentration = 44; здесь никому не нужны. "Переменных" тут нет - есть символы которыми ты оперируешь. Ты спросишь - откуда берется память под это все - да откуда угодно - это деталь реализации машины. Нужна арифметика? Ты - тьюринг полон и можешь ее реализовать через списки. Что бы это было оптимизировано, ясно что компилятор может использовать хардварные приблуды машины для которой он конпеляет, но это - НЕ обязательно.
>>1591537 (OP) >Scheme - это минималистичный лисп, пригодный в основном для обучения, исследований. Исследований чего? Чем лисп лучше для PLT например хаскеля? Ради интереса спрашиваю.
квикдокс похоронили - к сожалению, у мейнтейнера не было времени его обновлять и он почему-то так никому эстафету и не передал. теперь только на автогенеренный quickref.common-lisp.net пиздовать.
>>1948077 >>1948086 Минимализм можно определить по-разному. Лисп его достигает, кмк, на 2 уровнях: на уровне освновывющих принципов (что выражается в их очевидной лаконичности, вряд ли тут его что-то бьет) и на уровне написания программ (из-за макросов), и при всем этом он мультпарадигменный (это - важно) - то есть это тот минимализм, которым ты еще будешь пользоваться. Наверняка есть сопоставимые языки, у которых все эти черти имеются, но я о и них не знаю. Тот же пролог, например, тоже минималистичен, но он позволяет писать только в своей парадигме, а все остальное выглядит как костыли. То же самое хаскель. Про названные языки ничего сказать не могу, я их не изучал, не отрицаю их возможных заслуг, но если проясните, буду рад послушать.
Какая же ракетка с sweet-exp красивая и элегантная. Скабочек не больше, чем в питоне. Теперь каждому, кто говорит, что лишп для скобкоблядей буду показывать мой код, и ехидно буду указывать на его си-портянки.
А DrRacket? Он же буквально стрелочками указывает, где у тебя ошибки.
Алсо, попробую racketscript (на крайняк Urlang), а то пока код только для лаб подходит. Планирую писать фронтенд на ракетке.
>>1953133 > { } Фу, хуже чем кожуропедики > significant whitespace Фу > меньше скобочек Ну блять, что плохого в скобочках-то? Просто подвинули левую скобку налево, т.е. вместо fn() писать (fn), fn(fn(fn(fn(fn())))) не особо лучше выглядит чем (fn (fn (fn (fn (fn))))).
>>1591537 (OP) Не люблю интерпретируемые языки. Не могу сказать, что мне нужна скорость, но мне просто приятно, когда я пишу программу на Си и я вижу, как быстро она работает.
Clojure thread смыло (если он был), поэтому спрошу тут. Ответ на лиспе тоже принимается.
Итак, у меня есть штука, которая принимает некий id. Если количество таких уникальных id (уже поступавших ранее + полученное теперь) не превышает некий заранее определенный лимит, то я должен пропустить это сообщение дальше. Например, лимит 10. Значит я должен хранить в памяти 10 уникальных id. Изначально список таких id пустой, как только получили первое сообщение - записали его в список, вернули id. Получили второе сообщение - если id еще не в списке - сохранили, вернули id. Как толко размер списка стал 10, стали возвразать nil. Не могу придумать, как это решить без использования изменяемой коллекции.
>>1953476 Но в прологе нет редукции выражений, есть унификация и скрытый механизм исполнения предикатов. Гугли клаузы Хорна. К примеру, я могу сделать так: test(X + Y) :- writeln(X), writeln(Y).
:- test(2 + 2) % напишет в консоли "2\n2" В прологе абсолютно всё - данные.
>>1953488 Ну пардон что я не шарю в языке документацией к кторому теперь только жопу подтереть, и не пишу по интепритатору в неделю как авторы sicp. Унификация-хуификация, ты сам то понимаешь, насколько это ирл беполезная хуйня, понимать что такое унификация в насколько узком контексте?
>>1953455 > Зачем загрязнять код скобочками? у тебя видно питон головного мозга >>1953470 > Гомоиконность может быть и без скобочек показывай лисповую гомоиконность без скобочек с сохранением семантики.
>>1953494 Кстати, совет очень полезный (объективно), но нет.
Твой код на прологе (во имя чего ты его выучил?) выглядит как функция, объявляется как функция, вызывается как функция и работает как функция. Паттерн матчинга там в упор не вижу, если только + это не какой то специальный прологовский синтаксис, а обычный опреатор сложения, но откуда мне знать? Я не некромант
>>1953501 > Твой код на прологе (во имя чего ты его выучил?) выглядит как функция, объявляется как функция, вызывается как функция и работает как функция. Паттерн матчинга там в упор не вижу, если только + это не какой то специальный прологовский синтаксис Пиздец в жиру всё поплыло. Еще раз для тупых:
writeln(2 + 2) вывыдет на экран не 4, а 2 + 2. В прологе 2 + 2 это тоже самое что и +(2, 2), т.е обычный функтор, которым можно как угодно оперировать. Редукция не обязательное условие для тьюринг-полноты. Не спорь о том, в чём не разбираешься.
>>1953510 >Не спорь о том, в чём не разбираешься. Я не спорил, если ты посмориш ьна мой первый пост, я там задал 2 вопроса, на которые ты овтетил толко спустя 3 поста. Это ты выбрал 3 поста сраться, прежде чем ответить. Извини, но я не пойду гуглить синтаксис пролога, просто потому что кто то запостил его в треде лиспа. Я спросил.
>>1953500 > у тебя видно питон головного мозга Haskell > показывай лисповую гомоиконность без скобочек с сохранением семантики. Заменить скобки на табы, оставить скобки только в однострочых выражениях. Семантика кода никак не поменяется. Получится sweet-exp.
>>1953512 >>1953513 > Заменить скобки на табы, оставить скобки только в однострочых выражениях. Семантика кода никак не поменяется. Получится sweet-exp. окай, но не вижу смысла. ты можешь наставить несколько коротких выражение в одну строку со скобками, с табами ты будешь их делить на вертикальные портянки? но зачем? а код ты все равно засоряешь - только теперь ньюлайнами. плюс редактировать скобки то уж поудобнее будет с нужными плагинами, которых, я вангую, для твоего свитэкспа не завезли.
Блять, на ракете вообще кто-нибудь пишет код или только на ДСЛи дрочат? Хули все библиотеки такие уёбищные? Вот каждый раз, наслушавшись про ракету, решаю дать ей шанс и в итоге упираюсь в отсутствие нормальных библиотек. В этот раз http-клиента не нашлось. Пиздец.
>>1954076 Мимокрок. Пытаюсь сейчас транспилировать код в js. Решил пользоваться Urlang, ибо racketscript хоть и транспилирует, но не понятно, как в пользоваться готовыми интерфесами типа WebRTC, MediaRcorder, DOM API. Пока выходит так себе. (quote) не работает, а quote - лучшая часть лиспа, ради которой и переходят на него.
>>1954140 На скрине он, ага. Я последнее время пробую cl-patterns: реализацию паттернов из SuperCollider. Там есть несколько бэкендов, один через cl-collider и еще один через cl-alsaseq, которым я и пользуюсь чтобы отсылать миди на хардварные девайсы.
>>1954144 Бля, попробую вкатится. в лисп и емакс уже могу. Пробовал как-то Renoise, но привыкнуть к интерфейсу так и не получилось, он не настолько настраиваемый как кажется, да еще closed-source. Перелез на Ableton Live, ну там совсем другой подход, плагинов/инструментов завались, но только гитару на нем записываю в конце концов. Короче, воркфлоу что там что там какой-то деревянный. А вот лисп выглядит как-то прям для души. Есть еще плагины который посоветуешь, ресурсы без которых было бы тяжко?
Я пока не разобрался нормально с sclang и не разобрался в синтезе на реальных железках/плагинах, в cl-collider вкатится не мог хотя было приемлемо лиспо-опыта.
>>1954203 Я отправляю миди из cl-patterns в железяки. Звук с них отправляется через аудиокарту в битвиг. Коллайдером в данном случае я вообще не пользуюсь.
Если звук генерится через коллайдер, то битвиг в целом не нужен.
>>1954089 Профит в том, чтобы бросить курить JS. Однако бросать web я не хочу, ибо не найдешь ничего удобнее HTML+CSS. А js как бы вроде и норм, но с другой стороны, есть же вещи и лучше.
Вообще самый идеальный вариант - некий метаязык созданный для транспиляции и не привязынный к байтикам, виртуальным машинам, средам, экосистемам, и где ты можешь использовать любой синтаксис, который только пожелаешь. Но таких пока нет. Разве что использовать Nearley для транспиляции, однако он не тьюринг полный, потому на самом nearley непопрограммируешь монады и афинные типы. >>1954094 Как-то не знаю даже. Хочу рекет, ибо идея у него 10/10
>>1954971 Так Elm не гомоиконный. Как я на нём макросы под свои нужды писать буду? Вот пишу я либу для работы с музыкой, как я буду преобразовывать синтаксис аккордов (типа D#4maj7) в понятный компьютеру Chord (Note (D # 4) maj7)? Парсить во время исполнения - для пидоров, у которых языки немощные.
https://github.com/rabbibotton/clog Видали новую инкарнацию weblocks? Шустренько работает, мне понравилось. Но всё равно считаю, что за веб гуй нужно обоссывать
>>1955720 Сомневаюсь в нужности. Запустить сервак на компе, а это - на мобилке или планшете - ну ок, поиграться там, покрасноглазить - нормас. А на десктопы есть мкклим.
Кстати про McClim - кто нибудь окунался в него основательно? Какие отзывы, впечатления? Он ведь даже и не умер - не дали ему, пилят сейчас. Но его преподносят как какое-то божественное откровение. Прочитал туториал - ну обычный фреймворк. Да - универсальный. Для чего репрезентации и какие-то сверхкоманды охуительные - так и не понял. Сложилось впечатление немного бесполезной обобщенности. Дискас.
>>1955720 Пиздец, ну и уродство. Автор библиотеки ничего не понимает в создании UI. Пусть лучше посмотрит на то, как выглядит UI в KDE и MacOS. и в новом гноме
>>1956891 > Вложенные данные в слайме не очень удобно инспектировать представляю, да, особенно если нужно просмотреть несколько вещей сразу >>1956908 и что не устраивает в smartparens? paredit? там у них на в ридми даже список похожих проектов есть
>>1956913 Не знаю >>1956917 > и что не устраивает в smartparens? Он какой-то странный, не понятно какую скобочку подвинет и что случится перед тем, как нажму хоткей
В юниксе можно пайпать ls | grep "regex" | sort -u | head -n10 ИМХО это очень просто читать, потому что считаешь слева направо и понимаешь, что происходит. В лиспе такое можно делать?
>>1957472 Да, в кложе это из коробки, притом более гибкое, чем пайпы или оператор |> из окамла: есть варианты, которые протаскивают значение первым аргументом (->), последним аргументом (->>), явно именованным аргументом (as->), протаскивают только при выполнении условия (cond->), и т.п.
В остальные лишпы эту фичу тоже спиздили, ибо благодаря лисп-макросам все это можно реализовать как библиотеку, а не менять сам язык.
>>1958471 >явно именованным аргументом (as->), протаскивают только при выполнении условия (cond->), и т.п. Это ж просто анафорические макросы, им сто лет в обед
>>1958999 > почему же тогда в прикрепе лисп включен в функциональные? Шапка устарела много лет назад, лол. А половина перечисленого там уже чиллит на кладбище
>>1959286 Я же говорю, что смысла нет, просто интересно почему так нельзя. Оказалось, я тупой, нужно funcall. >>1959285 Нужно же что-то возвращать, это же лишп
>>1959332 > Нужно же что-то возвращать, это же лишп Почему стейтмент вообше должен что-то возвращать. Это же не выражение, это стейтмент, блядь. При попытке использования стейтмента (типа set, defn, и пр. ) как выражения должно выкидываться синтаксическая ошибка.
>>1959506 > Почему стейтмент вообше должен что-то возвращать Язык такой. Setq тоже возвращает значение переменной > Это же не выражение, это стейтмент, блядь. А еще это функция, она должна что-то возвращать.
>>1959714 > set это стейтмент set{q,f} это специальная форма. Ничего плохого в (when (equal (setq x (- x 1)) 0) ; можно заменить на incf для разнообразия body) нет, такое делают даже в Си
>>1959731 > Какой set? Который (set x 5) из Scheme/Racket. > Кому не должен? Потому что set это не функция. Функции (лямбды) работают не так, как работает set. >>1959744 > Ничего плохого в > (when (equal (setq x (- x 1)) 0) Ничего плохого? Алло, state мутирует! Ты эффект используешь там, где его он не должен быть.
>>1960068 >Ничего плохого? Алло, state мутирует! О, секта непорочного состояния подъехала. Каюсь, грешно менять Богом заданные значения, но такова уж природа фон-неймановских машин. Да и что плохого? Если ты вынесешь присваивание за скобки, то ничего не изменится. Давай, доставай свою методичку, рассказывать будешь, как и кому в том коде простреливают ногу. > Ты эффект используешь Не эффект, а результат вычисления (- x 1) >Функции (лямбды) работают не так, как работает set. (when (= ((lambda (y) (set! x y) y) (- x 1)) 0) (display x)) А теперь можно, товарищ пресвитер? Нахуя ты вообще схему сюда приплёл?
>>1959506 Это выражение, а не стейтмент. Разделение выражение\стейтмент вообще артифакт говноедских язычков, в нормальных языках все является выражением.
>>1960068 У тебя дикая каша в голове, ты не понимаешь значения слов: функция, экспрешн, стейтмент; плюс путаешь все это с мутабельностью, которая вообще никаким боком отношения к экспрешн-или-стейтмент дихотомии не имеет.
>>1960463 Там нет изменения скоупа, значения слова "скоуп" тоже не понимаешь.
>>1961188 > Это выражение, а не стейтмент Начнем с того, что print, read, write, и прочее - не функции, а процедуры (эффекты). Процедура делает что-то: обращается к дб, делает сетевые запросы, и в конце концов, читает файлы. Процедура ничего не возращает, но может модифицировать переменные. Ты можешь использовать выражение внутри применения эффекта (процедуры), но не наоборот. В чистых языках программирования эффекты (процедуры) либо вынесенны за компилятор, либо являются отдельными сущностями, отличные от функций. > Там нет изменения скоупа set! не меняет скоуп (область в которой хранятся переменные)? Ну ок.
>>1961391 >В чистых языках программирования эффекты (процедуры) либо вынесенны за компилятор, либо являются отдельными сущностями, отличные от функций. Не знаю, о каких языках ты говоришь, но последователи единственного в мире чистого языка, на котором хоть кто-то что-то пишет, тебя бы обоссали, прийди бы ты к ним с такими проповедями. В их мире не существует побочных эффектов, но бывают функции, применённые к глобальному состоянию World и возвращающие новое.
>>1959386 > пишет сама Лэйн Что за вайфу? Няшная? >>1961391 > Процедура ничего не возращает, но может модифицировать переменные. Это ты на каких основаниях решил что процедура ничего не может возвращать? Мань, я тебе открою секрет, но твоя шизопаскалевская терминология тут никому не интересна.
>>1961391 >print, read, write, и прочее - не функции Функции.
>Процедура ничего не возращает read - отличный пример процедуры, ага.
>Ты можешь использовать выражение внутри применения эффекта (процедуры), но не наоборот. И наоборот могу, но у тебя каша в голове.
>В чистых языках программирования эффекты (процедуры) 1. Схема - не чистый язык. 2. "Эффект" и "процедура" - это разные понятия.
>set! не меняет скоуп Нет.
>скоуп (область в которой хранятся переменные) Скоуп - это не область, в которой хранятся переменные.
В общем нахватался вершков, но усвоить смысл понятий не успел. Вместо того, чтобы пытаться спорить, лучше продолжай обучение. Пока неуд, придешь в конце четверти на пересдачу.
{Основные диалекты} :: Common Lisp - разрабатывался как промышленный язык, пригодный для широкого спектра применения, из-за чего имеет достаточно объемную спецификацию. Является мультипарадигменным (процедурщина, функциональщина, ооп (CLOS)), с сильной, динамической типизацией. Есть опциональная декларация типов и частичный их вывод в некоторых реализациях. Описание особенностей: http://habrahabr.ru/post/143490 Основные реализации: - свободные: SBCL (нативный код), Clozure CL (нативный код), ECL (через сишку), Clisp (байт-код; небольшой размер образа; похоже, заброшен), Clasp (LLVM; ориентирован на интероп с C++), ABCL (байт-код JVM), CMUCL, GCL. - коммерческие: LispWorks, Allegro CL, Scieneer CL, mocl :: Scheme - это минималистичный лисп, пригодный в основном для обучения, исследований. Наиболее практичными реализациями являются GNU Guile и Chicken Scheme. :: Racket - развитие PLT Scheme. Racket включает в себя много подъязыков (typed racket, lazy racket, frtime racket, Scheme стандартов r5rs и r6rs). :: Clojure - cм. соседний тред (ОПу почившего надоедло бампать, шапка здесь: https://rentry.co/9ve9d )
{Основные диалекты} :: Common Lisp - разрабатывался как промышленный язык, пригодный для широкого спектра применения, из-за чего имеет достаточно объемную спецификацию. Является мультипарадигменным (процедурщина, функциональщина, ооп (CLOS)), с сильной, динамической типизацией. Есть опциональная декларация типов и частичный их вывод в некоторых реализациях. Описание особенностей: http://habrahabr.ru/post/143490 Основные реализации: - свободные: SBCL (нативный код), Clozure CL (нативный код), ECL (через сишку), Clisp (байт-код; небольшой размер образа; похоже, заброшен), Clasp (LLVM; ориентирован на интероп с C++), ABCL (байт-код JVM), CMUCL, GCL. - коммерческие: LispWorks, Allegro CL, Scieneer CL, mocl :: Scheme - это минималистичный лисп, пригодный в основном для обучения, исследований. Наиболее практичными реализациями являются GNU Guile и Chicken Scheme. :: Racket - развитие PLT Scheme. Racket включает в себя много подъязыков (typed racket, lazy racket, frtime racket, Scheme стандартов r5rs и r6rs). :: Clojure - cм. соседний тред (ОПу почившего надоедло бампать, шапка здесь: https://rentry.co/9ve9d )