Re: Nemerle: Compile time serializer generation - возможно?
От: Vermicious Knid  
Дата: 16.02.06 19:57
Оценка: 7 (2) +2
Здравствуйте, EvilChild, Вы писали:

EC>Позволяют ли выразительные возможности Nemerle сделать сериализацию a-la .NET

EC>(т.е. помечаем поля атрибутами и т.д.), но чтобы код класса, выполняющего
EC>сериализацию/десериализацию создавался на этапе компиляции?

Да, позволяют(хотя почему a-la .NET? Nemerle ведь язык для .NET). В случае Nemerle сами атрибуты могут являться макросами и генерировать такой код. Вот здесь как раз есть примитивная реализация такой сериализации.

Правда среди встроенных макросов такой сериализации нет, но есть реализация ряда смежных задач.

Например есть макросы Record, LexigraphicCompareTo(генерирует CompareTo используя информацию о полях), StructuralHash(аналогично для GetHashCode), ProxyPublicMembers.
Re[6]: Nemerle: Compile time serializer generation - возможн
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.02.06 03:10
Оценка: 1 (1) +1
Здравствуйте, WolfHound, Вы писали:

WH>Да какая разница когда их сгенерировать? Главное что работать они будут с одной и тойже скоростью.


1. Время на генерацию будет потрачено в компайлтайме.
2. Можно обойтись без лишней косвенности часто возникающей при генерации в рантайме.
3. Контролировать процесс кодогенерации в компайлтайме не допуская рантайм-ошибок.
4. Получить более простой и читабельный код. Все же макросы куда более выскоуровневое средство чем генерация кода и темболее эмит.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Nemerle: Compile time serializer generation - возможн
От: vdimas Россия  
Дата: 16.02.06 21:50
Оценка: 2 (1)
Здравствуйте, EvilChild, Вы писали:

EC>>>Речь идёт о compile time.

WH>>Да какая разница когда их сгенерировать? Главное что работать они будут с одной и тойже скоростью.
EC>Хотелось бы избавиться от накладных расходов на создание serializer'а в run time.

сделай создание суррогатов как часть post-build step, а полученную динамическую сборку сохрани и потом подгрузи во время работы.
Re[9]: Nemerle: Compile time serializer generation - возможн
От: vdimas Россия  
Дата: 20.02.06 18:17
Оценка: 1 (1)
Здравствуйте, EvilChild, Вы писали:

V>>сделай создание суррогатов как часть post-build step, а полученную динамическую сборку сохрани и потом подгрузи во время работы.

EC>Можно подробнее о суррогатах? — мне незнаком такой термин в данном контексте.

MSDN:
ISerializationSurrogate
ISurrogateSelector

или как вариант
ISerializable

суть вот в чем, для сериализации объекта тебе надо реализовать 2 метода:
GetObjectData() — для сериализации
SetObjectData() — для десериализации

Стандартная сериализация работает через reflection, и действительно — нетороплива. Поэтому некоторые объекты иногда явно реализуют ISerializable (если честно — не только по этой причине, но сейчас это к делу не относится).

Тебе предлагают через кодогенерацию создать и зарегистрировать суррогаты для интересующих типов (прочитал уже MSDN?)

Если тебя волновали проблемы с задержками в run-time, то ты можешь сделать генерацию суррогатов как часть post-build step.

Можно и еще более гибко: генерировать в run-time, но результаты генерации сбрасывать на диск и подгружать в следующий раз. Ориентироваться можно по дате создания целевой сборки и суррогатной, т.е. если ее дата неактальна (скажем, после обновления целевой), то ты перегенерируешь.
Re[5]: Nemerle: Compile time serializer generation - возможн
От: WolfHound  
Дата: 16.02.06 20:49
Оценка: +1
Здравствуйте, EvilChild, Вы писали:

AVK>>Да вобщем тоже ничего секретного — кодогенерация динамических методов в рантайме.

EC>Речь идёт о compile time.
Да какая разница когда их сгенерировать? Главное что работать они будут с одной и тойже скоростью.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[6]: Nemerle: Compile time serializer generation - возможн
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.02.06 21:19
Оценка: +1
Здравствуйте, AndrewVK, Вы писали:

AVK>Тогда примерно так, как работает утилитка sgen.


Хороший пример. Открой ее в Рефлекторе и погляди... это не хилый объем рукопашного кода. И это только для одной задачи. Плюс эту утилиту нужно как-то подуключить в процесс компиляйии...

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

По-моему, макросы здесь были бы куда более удобным решением. И код бы был короче, и интеграция удобнее.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Nemerle: Compile time serializer generation - возможн
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.02.06 23:02
Оценка: +1
Здравствуйте, AndrewVK, Вы писали:

VD>>Хороший пример. Открой ее в Рефлекторе и погляди... это не хилый объем рукопашного кода.


AVK>Так и задачу она очень не простую решает.


Думаю, что аналогичный код на макросах будет раз в 10 меньше.
А уж про простоту интеграции и говорить не стоит. Ехе-шник с макросами не сравнить.

VD>> И это только для одной задачи. Плюс эту утилиту нужно как-то подуключить в процесс компиляйии...


AVK>Достаточно соотв. выставить в свойствах проекта.


Э нет. Чтобы в свойствах проекта можно было что-то выставить было написано еще пара тон кода. Мы просто его не видим. Ты прикинь, что нам нужно будет сделать если мы захотим реализовать подобный фрэймворк генерирующий, к примеру, код глубокого клонирования или сериализации в бинарный поток/БД?

AVK>Нифига себе примитивная. Там одних управляющих атрибутов десяток. XmlSerializer очень навороченная штука с кучей фич.


Ну, с десяток. Это очень много? Уверяю тебя, что на макросах это будет довольно простое решерие.

Надо будет в качестве примера для самобучения попробовать сделать аналог.

VD>>По-моему, макросы здесь были бы куда более удобным решением. И код бы был короче,


AVK>Вряд ли.


Ну, тебе конечно виднее. Я уверен, что код будет значительно короче. Причем надо еще учитывать, что не нужен окажется не только код этого ехе-шника, но и код самого XmlSerializer.

VD>> и интеграция удобнее.


AVK>Возможно.


Возможно? Макрос подключается как ключик к компилятору. То есть при наличии поддержки IDE это будет выбор из списка. А отдельный ехе-шник это еще тот трах.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Nemerle: Compile time serializer generation - возмож
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.02.06 14:25
Оценка: :)
Здравствуйте, AndrewVK, Вы писали:

VD>>Думаю, что аналогичный код на макросах будет раз в 10 меньше.


AVK>Ошибаешься. Служебных вещей там не много, в оновном функционал.


Как ты там любишь говорить? Доказательства?

AVK>>>Нифига себе примитивная. Там одних управляющих атрибутов десяток. XmlSerializer очень навороченная штука с кучей фич.


VD>>Ну, с десяток. Это очень много?


AVK>Очень много.


Это очень много если писать вот так как написан этот генератор. А на макросах это довольно просто получится. По крайней мере в разы проще лобового решения на Шарпе.

VD>> Уверяю тебя, что на макросах это будет довольно простое решерие.


AVK>Сдается мне, ты не представляешь себе весь объем функционала. Не будет там простого решения ни на чем.


Там будет значительно более простое решение. Это не тоже самое, что простое. Но и это уже очень хорошо.

VD>>Надо будет в качестве примера для самобучения попробовать сделать аналог.


AVK>Попробуй.


ОК. Только мне сериализация в ХМЛ не так интересна. Думаю начать с кода автоматического клонирования. Тоже забавная задачка.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Nemerle: Compile time serializer generation - возможно?
От: EvilChild Ниоткуда  
Дата: 16.02.06 19:20
Оценка:
Позволяют ли выразительные возможности Nemerle сделать сериализацию a-la .NET
(т.е. помечаем поля атрибутами и т.д.), но чтобы код класса, выполняющего
сериализацию/десериализацию создавался на этапе компиляции?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Nemerle: Compile time serializer generation - возможно?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 16.02.06 19:59
Оценка:
Здравствуйте, EvilChild, Вы писали:

EC>Позволяют ли выразительные возможности Nemerle сделать сериализацию a-la .NET

EC>(т.е. помечаем поля атрибутами и т.д.), но чтобы код класса, выполняющего
EC>сериализацию/десериализацию создавался на этапе компиляции?

А в чем проблема?
... << RSDN@Home 1.2.0 alpha rev. 642 on Windows XP 5.1.2600.131072>>
AVK Blog
Re[2]: Nemerle: Compile time serializer generation - возможн
От: EvilChild Ниоткуда  
Дата: 16.02.06 20:08
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>А в чем проблема?


Проблемы нет.
Просто стандартная сериализация порой напрягает своей неторопливостью,
но как сделать это средствами C# я не знаю (может ты в курсе?), а по описанию Nemerle
показалось, что это естественная для него задача — вот и спрсоил тех, кто в теме.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Nemerle: Compile time serializer generation - возможн
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 16.02.06 20:20
Оценка:
Здравствуйте, EvilChild, Вы писали:

EC>Проблемы нет.

EC>Просто стандартная сериализация порой напрягает своей неторопливостью,

Форматтеры имеются ввиду?

EC>но как сделать это средствами C# я не знаю (может ты в курсе?)


Да вобщем тоже ничего секретного — кодогенерация динамических методов в рантайме.
... << RSDN@Home 1.2.0 alpha rev. 642 on Windows XP 5.1.2600.131072>>
AVK Blog
Re[4]: Nemerle: Compile time serializer generation - возможн
От: EvilChild Ниоткуда  
Дата: 16.02.06 20:26
Оценка:
Здравствуйте, AndrewVK, Вы писали:

EC>>но как сделать это средствами C# я не знаю (может ты в курсе?)


AVK>Да вобщем тоже ничего секретного — кодогенерация динамических методов в рантайме.

Речь идёт о compile time.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Nemerle: Compile time serializer generation - возможн
От: EvilChild Ниоткуда  
Дата: 16.02.06 21:00
Оценка:
Здравствуйте, WolfHound, Вы писали:

EC>>Речь идёт о compile time.

WH>Да какая разница когда их сгенерировать? Главное что работать они будут с одной и тойже скоростью.
Хотелось бы избавиться от накладных расходов на создание serializer'а в run time.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: Nemerle: Compile time serializer generation - возможн
От: WolfHound  
Дата: 16.02.06 21:13
Оценка:
Здравствуйте, EvilChild, Вы писали:

EC>Хотелось бы избавиться от накладных расходов на создание serializer'а в run time.

1 раз создал и закешировал. В чем проблема то?
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[4]: Nemerle: Compile time serializer generation - возможн
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.02.06 03:10
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Да вобщем тоже ничего секретного — кодогенерация динамических методов в рантайме.


на этапе компиляции?


Смотри выделенное жирным и цитату.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Nemerle: Compile time serializer generation - возможн
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.02.06 11:07
Оценка:
Здравствуйте, EvilChild, Вы писали:

AVK>>Да вобщем тоже ничего секретного — кодогенерация динамических методов в рантайме.

EC>Речь идёт о compile time.

Тогда примерно так, как работает утилитка sgen.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[8]: Nemerle: Compile time serializer generation - возможн
От: EvilChild Ниоткуда  
Дата: 17.02.06 18:15
Оценка:
Здравствуйте, vdimas, Вы писали:

EC>>Хотелось бы избавиться от накладных расходов на создание serializer'а в run time.


V>сделай создание суррогатов как часть post-build step, а полученную динамическую сборку сохрани и потом подгрузи во время работы.

Можно подробнее о суррогатах? — мне незнаком такой термин в данном контексте.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Nemerle: Compile time serializer generation - возможн
От: EvilChild Ниоткуда  
Дата: 17.02.06 18:15
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Тогда примерно так, как работает утилитка sgen.

Про неё знаю, вопрос в том как получить то, что она делает на этапе компиляции,
чтобы этот код стал частью сборки, для классов которой, это всё генерится.
Насколько я понимаю средствами C# это сделать нереально.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[8]: Nemerle: Compile time serializer generation - возможн
От: EvilChild Ниоткуда  
Дата: 17.02.06 18:20
Оценка:
Здравствуйте, WolfHound, Вы писали:

EC>>Хотелось бы избавиться от накладных расходов на создание serializer'а в run time.

WH>1 раз создал и закешировал. В чем проблема то?

Ты всё верно отквотил, но так и не понял — 1 раз создал это накладные расходы в run time.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Nemerle: Compile time serializer generation - возможн
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.02.06 20:08
Оценка:
Здравствуйте, EvilChild, Вы писали:

EC>Ты всё верно отквотил, но так и не понял — 1 раз создал это накладные расходы в run time.


При желании сборку можно и на диск скинуть.
... << RSDN@Home 1.2.0 alpha rev. 642 on Windows XP 5.1.2600.131072>>
AVK Blog
Re[7]: Nemerle: Compile time serializer generation - возможн
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.02.06 20:08
Оценка:
Здравствуйте, EvilChild, Вы писали:

AVK>>Тогда примерно так, как работает утилитка sgen.

EC>Про неё знаю, вопрос в том как получить то, что она делает на этапе компиляции,
EC>чтобы этот код стал частью сборки, для классов которой, это всё генерится.

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

EC>Насколько я понимаю средствами C# это сделать нереально.


Только C# нет, не реально. Иначе зачем был бы нужен Nemerle?
... << RSDN@Home 1.2.0 alpha rev. 642 on Windows XP 5.1.2600.131072>>
AVK Blog
Re[9]: Nemerle: Compile time serializer generation - возможн
От: WolfHound  
Дата: 17.02.06 20:35
Оценка:
Здравствуйте, EvilChild, Вы писали:

EC>Ты всё верно отквотил, но так и не понял — 1 раз создал это накладные расходы в run time.

Фигня это, а не затраты... особенно если сериализовать нужно много... а если мало то тогда чем стандартная сериализация не устраивает?
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[7]: Nemerle: Compile time serializer generation - возможн
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.02.06 21:42
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Хороший пример. Открой ее в Рефлекторе и погляди... это не хилый объем рукопашного кода.


Так и задачу она очень не простую решает.

VD> И это только для одной задачи. Плюс эту утилиту нужно как-то подуключить в процесс компиляйии...


Достаточно соотв. выставить в свойствах проекта.

VD>В итоге получаем нехилый геморой для решения казалось бы примитивной задачи.


Нифига себе примитивная. Там одних управляющих атрибутов десяток. XmlSerializer очень навороченная штука с кучей фич.

VD>По-моему, макросы здесь были бы куда более удобным решением. И код бы был короче,


Вряд ли.

VD> и интеграция удобнее.


Возможно.
... << RSDN@Home 1.2.0 alpha rev. 642 on Windows XP 5.1.2600.131072>>
AVK Blog
Re[10]: Nemerle: Compile time serializer generation - возмож
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.02.06 23:02
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>При желании сборку можно и на диск скинуть.


Можно. Я так и делаю в R#. Обем кода, скажу тебе, получается очень не кислый. А на макросах он будет равен нулю.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Nemerle: Compile time serializer generation - возможн
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.02.06 09:22
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Думаю, что аналогичный код на макросах будет раз в 10 меньше.


Ошибаешься. Служебных вещей там не много, в оновном функционал.

AVK>>Достаточно соотв. выставить в свойствах проекта.


VD>Э нет. Чтобы в свойствах проекта можно было что-то выставить было написано еще пара тон кода. Мы просто его не видим. Ты прикинь, что нам нужно будет сделать если мы захотим реализовать подобный фрэймворк генерирующий, к примеру, код глубокого клонирования или сериализации в бинарный поток/БД?


Зависит от функциональности.

AVK>>Нифига себе примитивная. Там одних управляющих атрибутов десяток. XmlSerializer очень навороченная штука с кучей фич.


VD>Ну, с десяток. Это очень много?


Очень много.

VD> Уверяю тебя, что на макросах это будет довольно простое решерие.


Сдается мне, ты не представляешь себе весь объем функционала. Не будет там простого решения ни на чем.

VD>Надо будет в качестве примера для самобучения попробовать сделать аналог.


Попробуй.
... << RSDN@Home 1.2.0 alpha rev. 642 on Windows XP 5.1.2600.131072>>
AVK Blog
Re[11]: Nemerle: Compile time serializer generation - возмож
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.02.06 19:00
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Как ты там любишь говорить? Доказательства?


Открываешь MSDN и читаешь. Я XmlSerializer года 4 использую и до сих пор не знаю всех его возможностей. Что, например, ты можешь сказать по поводу управления пространством имен в нем? А возможностью подменять на лету атрибуты? А возможность сериализации произвольного списка объектов? Возможность сериализации сырого XML? Что ты можешь сказать о поддержке SOAP? CAS? Для чего нужен XmlSerializationReader? Как можно вместе с ним использовать XML Schema?
Мог бы догадаться, что я знаю о чем говорю.

AVK>>Очень много.


VD>Это очень много если писать вот так как написан этот генератор. А на макросах это довольно просто получится. По крайней мере в разы проще лобового решения на Шарпе.


Напиши так, чтобы на 100% повторить функционал. Думаю денька через 2 ты поймешь, что был неправ.

VD>ОК. Только мне сериализация в ХМЛ не так интересна. Думаю начать с кода автоматического клонирования. Тоже забавная задачка.


На 2 порядка проще.
... << RSDN@Home 1.2.0 alpha rev. 642 on Windows XP 5.1.2600.131072>>
AVK Blog
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.