Лисп в изгнании
229 subscribers
156 photos
21 videos
5 files
233 links
Авторский канал на околоайтишную тематику.

По всем вопросам @awkravchuk
Download Telegram
#репост

Как говорится, вашими бы устами да мёд пить.
Давно уже понял про себя, что мне куда больше по душе проекты-долгострои, нежели проекты с чётко очерченными дедлайнами, хотя дедлайны, конечно, по-своему тонизируют. Примерно как рука, спросонья обожжённая об горячую плиту тонизируют, ага.
2👍1
#лытдыбр #common_lisp

Взявшись за написание красивой демки для своей ECS-библиотеки, вот уже во второй раз натыкаюсь на какой-то совершенно адский фундаментальный косяк, который каким-то образом не был выловлен автоматическими тестами. Видимо, придётся сегодня сделать ещё один минорный релиз, а то вдруг Зак наконец разродится новым апдейтом Quicklisp и в нём окажется версия моей библиотеки с багом. Нет слов, как же я на себя зол 😡
🔥2
#репост #common_lisp

Во многом согласен с коллегой по лисповому сообществу, просто не могу не репостнуть 😊
Forwarded from akater
Я выбрал Лисп по нескольким причинам, но в ретроспективе получается, что многие из них вытекают из «Лисп дает своему пользователю максимальную свободу». (Лиспом я называю язык, где есть defun, defmacro, defmethod, unwind-protect, loop, и все это охотно используется.)

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

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

Мне было и есть неприятно программировать не на Лиспе. И по сей день, когда мне нужно написать какое-то сложное условие для if в shell script, я нередко ищу в вебе, какие буквы там писать — и иногда так и не нахожу! Это безумие. В Лиспе с его универсальным (f x y) мне этого никогда не нужно делать, и это было первое, что мне в свое время понравилось в первом языке, на котором мне было приятно программировать (Wolfram Language / Mathematica).

Лисп обеспечивает «первую свободу» по Столлману больше, чем что-либо еще, т.к. он дает максимум возможностей и удобства модифицировать работающую программу. Никто не пользуется первой свободой так, как пользователи GNU Emacs, и это благодаря Лиспу. И я уверен, что никакая социальная группа юзеров опенсорс в мире не читает исходники так активно, как это делают пользователи Emacs.

Первую свободу дает интерактивность. Можно перекомпилировать отдельную функцию в любой момент, и она становится частью работающей сейчас системы. В Common Lisp нет неизбежной необходимости дублировать выполненные вычисления из-за возникшей в ходе вычисления ошибки, благодаря кондишнам. Состояние программы всегда можно поправить, находясь в самой программе. Я никогда не думаю, что «я пишу код» — я живу в системе, которую расширяю. Это все характеризует интерактивность, недоступную за пределами Лиспа. Помимо интерактивности, в первую свободу делает важный вклад свобода самовыражения.

Не так давно я общался с одним студентом, который активно пишет на Python. Мы обсуждали какой-то его код на Python, и я спросил «почему бы тут не написать switch»? И он сказал «в Python, к сожалению, нет switch». Мне это вновь напомнило, насколько ужасна была бы для меня жизнь как у тех, кто не может себе написать switch, или, скажем, добавить в функции киворды / kwargs по-пайтоновски, если этого нет.

Лисп — это для меня не язык. Это система программирования и способ взаимодействовать с компьютером, разумная альтернатива Юниксу. Я собираюсь так взаимодействовать с компьютером, пока не умру. Сейчас я живу в GNU Emacs, разумеется. Именно Лисп делает это возможным, и альтернатив попросту нет.
🔥6
#common_lisp #лытдыбр

Итак, дёмка моего ECS-фреймворка работает примерно в 5-6 раз медленнее, чем аналогичный код с использованием C-шного фреймворка Flecs. Чего-то подобного я ожидал, но всё равно неприятно. Поверхностный анализ показал, что прорва времени теряется на уровне FFI, при вызове функций для отрисовки из liballegro. Полез разбираться — выяснилось, что в liballegro структура с указанием цвета ALLEGRO_COLOR передаётся во все функции "по значению", т.е. не через указатель, а тупо все поля складываются на стек; а документация к лисповому компилятору SBCL гласит, что "Passing of structures by value is not implemented", поэтому CFFI для передачи этой структуры городит в результирующем коде какой-то адский фарш из дженериков и ручного выделения памяти на куче под эту структуру, я вообще удивлён, что это в 5 раз медленнее, а не во все 50.
Решил для дёмки попробовать какую-нибудь другую графическую либу вместо liballegro, и тут выяснилось, что практически все из них (ну окей, не все, а raylib и SFML), как будто сговорившись, передают структуры с цветом по значению, и только набившая оскомину SDL2 с довольно среднего качества лисповыми биндингами принимает компоненты цвета по-человечески, тупо целочисленными аргументами на стеке, наглядная демонстрация: на SDL выставление цвета отрисовки занимает 153 байта машинных инструкций, вместе с проверкой на ошибки, а на liballegro одно только создание структуры с цветом занимает почти два килобайта (!).
Буду завтра на стриме переписывать дёмку на SDL2, чо 😅
5🤪1
#лытдыбр

Выбор ссылки, которая станет превью поста в телеграме — это, блядь, какая-то безвыигрышная лотерея: как ты не ебись, оно сделает так, как не нужно, и это один из немногих косяков, который становится лишь очевиднее после того, как заводишь свой канал. В который раз уже повторюсь, что более косоёбого мессенджера, чем телеграм, я в жизни ни разу не видел, а я настолько мастодонт, что застал ещё ICQ и Miranda. Сколько г-н Дуров вбухал в маркетинг, чтобы все этим костыльным говном пользовались, мне даже примерно представить страшно.
😁1
#лытдыбр #видео

Вчера хвастался своей реализацией самодельного интерпретатора лиспа на сишечьке, сделанной между делом в рамках бесплатного курса. Спасибо Андрею за то, что взял за руку и протащил по этому пути 😁
Упаси меня боже занырнуть в эту сторону с головой и начать писать компилятор своего диалекта лиспа в LLVM-биткод, мне же тогда точно спать станет некогда 😅
🔥3😁1
#common_lisp

Сегодня с утра на стриме с удивлением узнал на опыте, что в SBCL декларация (optimize (space 0)) приводит не к увеличению производительности (хотя казалось бы, если компилятору насрать на всё, включая размер, он потенциально может сделать более большой, но более быстро работающий код), а вовсе наоборот — к деградации скорости работы, причём в моём случае аж в два раза. Век живи — век учись 😅
🔥1
#лытдыбр

Я думаю, это знак, что пора уже расчистить авгиевы конюшни инбокса 😅
#clojure

Минутка бесстыдной рекламы: вот уже в этот четверг, 27 апреля, начнётся первый поток курса Clojure Developer в Otus, к которому ваш покорный немножко приложил руку, и, более того, будет вести в нём несколько занятий. Команда курса собрана очень сильная, поэтому, если всегда хотелось занырнуть в мир разработки на Clojure, добро пожаловать 😊
2
#лытдыбр

Хотел тут на этой неделе сделать небольшую паузу и подкопить немного сил перед предстоящим в конце мая Lisp game jam 2023, но жизнь внесла свои коррективы — во вторник на улице шёл град, я закрыл все ставни на балконе, пошёл в магаз, а когда минут через десять вернулся, полбалкона в граде, а в самой квартире (съёмной, на секундочку) всё плавает в воде по щиколотку, хорошо хоть ничего не закоротило, кроме блока питания к ноутбуку. Как мне потом объясняли, град на балкон умудрился попасть каким-то невероятным образом через ливневую канализацию. В итоге вместе с хозяйкой весь день вычёрпывали воду и паниковали по поводу паркета, и до сих пор абсолютно все мышцы в моём теле болят 😭 Такой вот непреднамеренный отдых, лол
🤯1😢1
#лытдыбр #common_lisp #проекты

В рамках подготовки к Lisp game jam возродил тут проект по сборке бинарников SBCL под старые виндусы (включая шиндус 7 — официальный бинарь с sbcl.org работает только под десяткой+). Провозился несколько часов, разобрался с Github Actions и даже зарепортил баг в SBCL — система сборки у него, конечно, заслуживает эпитета "хтонический", но в конечном итоге последняя версия (2.3.4) успешно работает. Забирайте, кому нужно 😊
🔥5
#статьи #common_lisp

Лентой принесло статью про лиспы, которой хотелось бы поделиться. Автор исследует вопрос, что же вообще делает какой-то конкретный язык Lisp'ом; утверждает, что любой акт программирования — это акт создания своего языка, даже когда ты этого не замечаешь, а затем акт его использования (тут на ум сразу приходят шаблоны Django или SQL). Наконец, автор приводит пару примеров из практики на Common Lisp приходит к выводу, что лисп — это любой язык, в котором есть возможность конструировать свои (суб-)языки. Можно спорить о том, насколько часто эта возможность используется (в той же Clojure вроде как многие бестпрактисы отсоветывают писать свои макросы), но в целом со статьёй согласен, лёгкость написания DSL в лиспах — это самая его убойная киллерфича, как мне кажется.
👍1
#clojure #мемасики

Наткнулся тут на великолепный пример использования Clojure 😊
4🤔1
#мемасики

В зарубежных интернетах есть такой мемчик, The missile knows where it is, выстёбывающий формалистский текст ради текста (как раз такой, который любит генерировать модный нынче ChatGPT), совершенно шизоидного содержания, типа "ракета знает, где находится, потому что знает, где она не находится". Так вот, на днях наткнулся на ютубе на двухминутный видос с этим текстом, наложенным на демонстрацию кода на JS, и меня чёт вообще порвало 🤣
#common_lisp

В рамках подготовки к Lisp Game Jam 2023 уже сделяль шаблон для игрового проекта с использованием SDL2, которую я раньше избегал в пользу liballegro. Как выясняется, мне были уготованы пара открытий чудных: во-первых, в биндинге SDL2 к CL очень много "медвежьих услуг" в стиле автоматического удаления сишных указателей с кучи через финалайзеры trivial-garbage, как будто я сам не могу условный free дёрнуть (а если так сделать вместе с финалайзером, то через неопределённый период времени игра крэшится или тупо зависает).
Во-вторых, GC в SBCL, конечно, весьма чудной, что под линуксом (см. рис. 1), что под шиндой (см. рис. 2). Сказали ему при компиляции, что общий размер доступной ему кучи 2 Гб, и он не особо шевелится вплоть до момента, пока не будет сожран гигабайт с хвостиком 😂
🤔2
#common_lisp

Итак, вот уже в эту пятницу начнётся Lisp game jam. Я к его началу собрался подготовить cokiecutter-шаблон для игры на CL, с выбором варианта middleware-библиотеки (SDL2, liballegro, raylib) и с автоматической сборкой готовых бинарников для трёх основных платформ (Linux, MacOS, Windows). Так вот, сегодня с утра доделал вариант с raylib, который на удивление занимает меньше всего кода и меньше всего места в скомпилированном виде. Под линукс и шинду уже всё готово, это, на секундочку, шесть протестированных вариантов сборки. Попробовал ткнуться в сборку под MacOS, установив у себя в kvm-виртуалку Monterey (а затем и High Sierra в VirtualBox), и я должен сказать, что там не работает НИХУЯ, по буквам: Николай, Иван, Харитон, Ульяна, Ярослав. Ну то есть код с использованием liballegro крэшится где-то в недрах кода макоси при её, liballegro, инициализации, код SDL2 намертво залипает на каком-то мьютексе внутрях cl-sdl2, и только raylib говорит открыто и смело прямо в лицо, что Failed to initialize Graphic Device, хотя хочу заметить, что под виндой с софтверным рендерером в том же VirtualBox все три варианта прекрасно бегают. По хорошему, надо бы попробовать сделать в KVM GPU pass-through, но моя Nvidia поддерживается только в High Sierra и ранее, а хайсьерра в QEMU не ставится, мотивируя отказ тем, что не может до серверов эппла достучаться, хотя интернет у неё есть. А это я ещё даже не прикасался к теме компиляции под Apple Silicon, там вообще гроб гроб кладбище пидор. В общем, решил пока подзабить на макось, если будет по ходу дела время, попробую чё-то поковырять, в идеале вообще нужно где-то приобрести старенький мак и на нём экспериментировать, но это уже не для моих финансовых условий.
Теперь надо написать статью на хабр с анонсом геймджема, и ещё поспать бы, а то на улице жара такая, а я не выспался 🥱
🔥4
#common_lisp #проекты

Ну штош, выкатил на гитхаб свой шаблон для игры на Common Lisp 🎉 Эх, давненько я так плотно с CI пайплайнами не развлекался 😅

Завтра на стриме, наверное, вернусь к ECS-библиотеке, надеюсь, ещё пару мажорных фич успею реализовать до пятницы.
🔥2