?

Log in

В clojure нет возможности записать и прочитать обратно sexp. Чтобы… - Оживший юзерпик

Nov. 24th, 2012

04:59 am

Previous Entry Share Next Entry

В clojure нет возможности записать и прочитать обратно sexp. Чтобы сохранить конфиг, его нужно сериализовывать в какой-нибудь XML. Epic fail.

(Вот такой же точно страдалец.)

Current Mood: disappointeddisappointed

Comments:

[User Picture]
From:zinal
Date:November 24th, 2012 01:03 pm (UTC)
(Link)
Ну дак это ж не Lisp или там Scheme какой-нибудь ;)
Видимо, разработчики посчитали, что в 21 веке прямая сериализация списков - атавизм
(Reply) (Thread)
[User Picture]
From:alexott
Date:November 24th, 2012 01:58 pm (UTC)
(Link)
сериализация базовых объектов работала всегда, с рекордами - да, были проблемы, но они решены.
я активно пользуюсь стандартной сериализацией для гоняния данных между разными процессами, все нормально работает
(Reply) (Parent) (Thread)
[User Picture]
From:alexott
Date:November 24th, 2012 01:57 pm (UTC)
(Link)
неправда ваша, ключевое слово: reader literals, правда в 1.4 (https://github.com/clojure/clojure/blob/master/changes.md). Рекорды тоже сериализуются (структуры использовать не надо - их наверное скоро выбросят). Или используйте map для конфигов - они во всех версиях сериализуются без проблем

user=> (defrecord A [a b c])
user.A
user=> (A. 1 2 3)
#user.A{:a 1, :b 2, :c 3}
user=> (pr-str (A. 1 2 3))
"#user.A{:a 1, :b 2, :c 3}"
user=> (read-string (pr-str (A. 1 2 3)))
#user.A{:a 1, :b 2, :c 3}

(Reply) (Thread)
[User Picture]
From:porokh
Date:November 24th, 2012 07:24 pm (UTC)
(Link)
"Да он никак диавола вызывал!" :)

На самом деле грустно -- ничего не понятно от слова вааще. Где ты, мой Pascal?
(Reply) (Parent) (Thread)
[User Picture]
From:alexott
Date:November 24th, 2012 07:26 pm (UTC)
(Link)
паскаль давно умер :-)
(Reply) (Parent) (Thread)
[User Picture]
From:porokh
Date:November 24th, 2012 07:56 pm (UTC)
(Link)
Потому и грустно. Ушла эпоха, когда ИТ занималось обсчитыванием чисел и массивов чисел; чем теперь занимается ИТ лучше и не говорить :)
(Reply) (Parent) (Thread)
[User Picture]
From:alexott
Date:November 24th, 2012 09:19 pm (UTC)
(Link)
ну почему, народ до сих пор много считает, просто это делается на более приспособленных языках :-)
кстати, паскаль, а также продукция борланд, это один из феноменов российско-советского ИТ... В других странах я не слышал о таком распросранении паскаля
(Reply) (Parent) (Thread)
[User Picture]
From:tobotras
Date:November 25th, 2012 12:39 am (UTC)
(Link)
Угадай, на чём учат программировать моего младшего младенца :-)
(Reply) (Parent) (Thread)
[User Picture]
From:alexott
Date:November 25th, 2012 09:13 am (UTC)
(Link)
ну дык поди и учат-то по программе 20-25-летней давности, и тот же преподаватель что эту программу написал... Я такого насмотрелся в бытность свою преподавателем
(Reply) (Parent) (Thread)
[User Picture]
From:tobotras
Date:November 25th, 2012 12:37 am (UTC)
(Link)
Ну, я софтину написал раньше, чем дочитал про рекорды, так что у меня структуры. Фиг они сериализуются.

Не, я, конечно, справился, сконвертировав всё в списки перед сериализацией, но это меня унизило :-)
(Reply) (Parent) (Thread)
[User Picture]
From:alexott
Date:November 25th, 2012 09:12 am (UTC)
(Link)
а все потому-что преждевременной оптимизацией занялся! :-)
структы - это вообще мертворожденное что-то. Я их как-то использовал, и заметного выигрыша в производительности не заметил.
Практически всегда maps удобней чем все остальное, и даже рекорды рекомендуется использовать уже после того как структуры данных устаканятся.
(Reply) (Parent) (Thread)
[User Picture]
From:caml_programmer
Date:November 24th, 2012 05:45 pm (UTC)
(Link)
Есть ещё slurp/spit, для конфига как-то раз slurp использовал.

http://clojuredocs.org/clojure_core/1.2.0/clojure.core/slurp
http://clojuredocs.org/clojure_core/1.2.0/clojure.core/spit
(Reply) (Thread)
[User Picture]
From:tobotras
Date:November 25th, 2012 12:38 am (UTC)
(Link)
Они есть, вопрос про то, что [де]сериализация структур ни через какие штатные средсва не работает. Чем в файл потом писать, уже второй вопрос.
(Reply) (Parent) (Thread)