code.google.com Василиса это развитие идеи CGML, который из простого компактного сереализатора превратился в тул для связи данных из разных источников. К примеру у нас есть некий сравочник, который меняется редко и сложен по структуре, пользовательские данные, которые ссылаются на объекты из этого справочника и клиент-серверный протокол, который может ссылаться и на то и на другое. Сравочник в базе хранить смысла не имеет, передавать его на клиент по средством какого-то особого механизма тоже. Имеет смысл загружать этот справочник в память клиента и сервера, как блоб. Имеет смысл смысл хнанить пользовательские данные в БД. Вопрос: как все это дело связать в одное единое, хм.. пространство имен? Вот тут по и приходит на помощь Василиса. По сути это прострой язык для описания структур данных с поддержкой полиморфизма и множественного наследования. Из этого языка генерируются исходники для разных платформ. Исходники предствляют из себя модели (классы с геттерами и стеерами), структруры (классы с геетерами и конструкторами содеражщими параметры), и трейты (суть интерфейсы). Модели и структуры имеют методы выдачи и приемки данных. В случае с со структорой это функции приемки и выдачи полной информации, а с моделями еще приемка и отдача changeset. Эти методы принимают интерфейсы, реализация которых определят способ передачи или сохранения этих моделей/cтруктур (Worker). Worker'ы связываются в цепочки, что позволяет организовать связанность данных. Можно грабить корованы.
Раз уж пошла такая пьяна, и сегодня вечером изрыгаю текст, что в обычные дни для меня не характерно, напишу ка я про свой новый чудо-проект: Рассово Русскуй Православный Дата Фреймворк Василиса.
bitbucket.org Нихрена не понятно, что такое CGML и нахрена он нужен.
Осознал, что из того, что написано тут С++ — 0.25s
Flash10-browser — 0.32s
JS(Chome7-MacOS) — 0.34s
Flash10-standalone-debug — 0.6s
neko — 1.2s
php 5.3.2 — 6.1s
! void player
@ string login
@ string email
@ slist.item inventory
@ slist.friend friends
@ point position
@ bool admin
! void item
@ string label
@ int power
! void friend
@ string name
@ bool online
! void point
@ int x
@ int y
Сереализуется 1000 обектов Player. У каждого по 150 friends и inventory. На моей машине получается 6.1 секунд. Для сравнения на neko — одна секунда. Надо отметить, что haxe генерирует весьма тяжелый php-код, однако мне трудно оценить, 6 секунд это быстро для такого масштаба или медленно?
@yzh44yzh рассказал про AMF и про такую штуку, как Reference Table. Удивительно, как я не додумался до такой простой вещи! Это как раз тот элемент, которого не хватало. Без него приходится делать кучу копипасты.
На BAFPUGe