to post messages and comments.

← All posts tagged Lisp

В процессе перевода проекта с MySQL на PostgreSQL возникла резонная проблема миграции существующей базы. Попробовал несколько софтин, остановился на этой — github.com Правда обнаружились проблемы при миграции в режиме "quote identifiers" (т.е. когда сохраняется регистр названий таблиц/колонок/прочего). Запатчил, сделал пул-реквест. Если что — github.com — тут есть версия с фиксом. Увы, не смог убить один баг, а именно кривую конвертацию enum'ов в этом самом "quote identifiers". Возможно что-то посоветует разработчик.

Забавное: первоначально софтина была на Tcl (1.х), потом переписали на Python (2.x) и теперь на Common Lisp (3.x). Как это прокомментировал сам разработчик: "The pgloader version 1.x from a long time ago had been developped in TCL. When faced with maintaining that code, the new emerging development team (hi!) picked python instead because that made sense at the time. So pgloader version 2.x were in python.

The current version of pgloader is the 3.x series, which is written in Common Lisp for better development flexibility, run time performances, real threading."

и вот еще странного порою хочется: хочется для generic'а задавать более одной :before, :after и :around специализации (для одинакового набора аргументов, хочется чтобы они просто вызывались все, по очереди). Есть способы это сделать? Или я чего-то не знаю?)

привет, лисперы! обнаружил, что metabang-bind не в силах прожевать конструкции вроде:
(bind (((:values a (b c)) (values 1 (list 2 3))))
(list a b c))
т.е. он не умеет разбирать вложенные паттерны в :values. Вопрос: так задумано или это баг? Если так задумано, то есть ли тут лица, заинтересованные в том, чтобы bind научился таки разбирать вложенные паттерны. Ну, и если вы считаете, что вложенные паттерны — плохая идея, высказывайтесь почему, т.к. я пока проблем и подводных камней не вижу.

лисперы, может я чего-то не знаю, что такие функции пишу?
(defun list->hash-table (key-fn list)
(let ((hash (make-hash-table)))
(loop
for val in list
for key = (funcall key-fn val)
do (setf (gethash key hash) val))
hash))
или все норм и в стандарте/александрии такого нет?

вот что бесит в CL: нет стандартных реализаций многих обыденных вещей, например DateTime. К чему это приводит? Есть 100500 несовместимых между собой сторонних реализаций. И все бы ничего, пока одна твоя зависимость не использует один костыль, а другая — другой.

Грустно все это(

есть 2 версии функции map-page: деструктивная и недеструктивная. первая будет использоваться почти всегда (в моем коде), но она "потенциально опасная". вот думаю: какую назвать map-page, а какую map-page* ? гребаные муки творчества(((

лисперы, а если ли способ получить бэктрейс прилетевшего condition'а? Например в виде строки (лучше, конечно, списка). Лучше переносимо, но сгодится и sbcl-way. Чтот пока не нахожу. trivial-backtrace дает бэктрейсы точки вызова (print-backtrace err), а не точки выброса этого самого err.

Как же меня бесит куцость и унылость стандартной библиотеки Common Lisp. Как только выходишь за рамки hello-world, в проекте появляюся 100500 библиотек-зависимостей на каждый чих. НЕНАВИСТЬ! НЕНАВИСТЬ! НЕНАВИСТЬ!

Жуйк, скажи, это меня так .net (пых, бидон, qt, whatever else) испортил или ты тоже думаешь, что это есть леденящий душу пиздец?

disclaimer: нет, кложуру не хочу, там CLOS'а нет.