← All posts tagged vasilisa

yelbota
vasilisa работа Лет пять назад поймал себя на том, что пытаюсь обернуть похапешные функции в в-стиле-делфи. Чуть позже я пытался обернуть жаваскриптовые функции в-стиле-похапе. К счастью я быстро понимал, что я не прав и привыкал к новому API. Прошло много лет и вот сейчас я пишу Василису и придумываю разделение моделей на "простые" и "сложные". При этом сложные действительно адово сложные. На пример модель из двух строковых полей должна генериться в жава-монстра из трехсот строк. Придумываю множественное наследование с стиле скалы. Сложность возрастает дико, а профита ноль. Почти со всем (кроме версионнсти), зачем я делал василису, в итоге легко справляется стоящий на подпорках CGML. То есть большая часть мотивов для создания нового инструмента были надуманы и неосознанно мною раздуты до космических масштабов. Беру себе за правило: придумывая новую функциональность, тысячу раз проверять, нет ли в существующей функциональности простого способа для решения задачи. Надо на стену повесить.
yelbota
vasilisa Немного поразмышлял над тем, что получается и пришел к выводу, что большая часть задумок, выставленных как крутые фичи, служат для решения разовых задач, которые в свою очередь имею вполне легальные решения. Таким образом Василиса лишается множественной типизации, и "легких" моделей (легкая от тяжелой отлиется только тем, что тяжелая умеет формировать changeset). Реализация упрощается в разы. Таким образом от Василиса будет содержать в себе все что было в cgml + версии + vasilisp и новый подход к генерации. Верисии и василисп будут реализованы позже.
yelbota
vasilisa cgml Василиса сложновата получается, сил нет делать. Сложная архитектрура (полный парраллелизм), сложная система типов, и слишком высокие требования к коду (я поставил задачу 100% покрытия тестами, и полную детерминированость). Возможно пока стоит вернуться к cgml. Сам язык очень простой, система типов достаточно развитая, но не переусложенная. Забабахаю онднопоточный компилятор на Scala, повторив архитектуру haxe-версии, благо все косяки уже известны. В дальнейшем добавлю уровень совместимости в Василису.
yelbota
vasilisa В Василисе будет такая клевая штука, "версии".

Немного о проблеме, которую я хочу решить этими "версиями". Вот пример из геймдева: у нас есть работающая онлайн-игра и 100500 (на самом деле это очень мало) персонажей у которых есть два инвентаря. Внезапно оказывается, что второй инвентарь не нужен. Что мы делаем? Пишем скрипт, который переместит содержимое второго инвентаря в первый, останавливаем все, пускаем скрипт, меняем модель. Трудоемкость, время простоя, шанс допустить ошибку высоки, по этому обычно все оставляют, как есть, на уровне логиги вставляется какой-ниубудь костыль. Чем дольше проект живет, чем труднее будет вностить такие изменения. Можно конено уповать на "правильную, гибкую архитектуру", но мы то знаем.

Собственно что такое версии в Василисе? Это блок кода с номером в который оборачивается содержимое модели для этой версии. Для каждой версии дожна быть определеа функция-конвертор из предыдущей версии (за этим следит Василиса). После генерации кода для записи будет доступна только последняя версия, но предыдущие можно будет прочесть и актуализировать автомотическом режиме. Удобно.

Функции-конверторы будут писаться на хитром статически-типизированном лиспе, который будет попадать в рузультирующий код, как есть, в виде строки, и итерпретироваться.
yelbota
vasilisa Кстати о девушках. Одной из килерфич так и не получившего популярность (по понятным причинам) cgml была поддержка алгебраических типов данных (вариантов). В Василисе я тоже это изначально задумывал. И представляете , смотрю я сейчас в код и понимаю, что я просто бессовестно забыл об этом. Целиком и польностью проебал момент. Вставлять их некуда, придется переписывать половину кода. Беда.
yelbota
vasilisa Пример кода на василисе:

model Person<WorldType> extends Actor {

trait BodyPart {
weight of int
}

trait Face {
beauty of float
}

struct Leg extends BodyPart {
length of float
}

struct Eye extends BodyPart include Face {
vigilance of float
}

name of string
age of int
legs of list<Leg>
face of set<face>
}
yelbota
Maven Scala vasilisa Василиса пишется на Scala. Сейчас реализована трансляция исходного кода vsl в ситаксическое дерево и перевод этого деров в модель типов, а так же вализация этой модели. Код рассчитан на многопоточную обработку исходников. Для существующего функционала написаны тесты. Проект собирается мавеном.
yelbota
AS3 Scala vasilisa cgml Раз уж пошла такая пьяна, и сегодня вечером изрыгаю текст, что в обычные дни для меня не характерно, напишу ка я про свой новый чудо-проект: Рассово Русскуй Православный Дата Фреймворк Василиса. code.google.com Василиса это развитие идеи CGML, который из простого компактного сереализатора превратился в тул для связи данных из разных источников. К примеру у нас есть некий сравочник, который меняется редко и сложен по структуре, пользовательские данные, которые ссылаются на объекты из этого справочника и клиент-серверный протокол, который может ссылаться и на то и на другое. Сравочник в базе хранить смысла не имеет, передавать его на клиент по средством какого-то особого механизма тоже. Имеет смысл загружать этот справочник в память клиента и сервера, как блоб. Имеет смысл смысл хнанить пользовательские данные в БД. Вопрос: как все это дело связать в одное единое, хм.. пространство имен? Вот тут по и приходит на помощь Василиса. По сути это прострой язык для описания структур данных с поддержкой полиморфизма и множественного наследования. Из этого языка генерируются исходники для разных платформ. Исходники предствляют из себя модели (классы с геттерами и стеерами), структруры (классы с геетерами и конструкторами содеражщими параметры), и трейты (суть интерфейсы). Модели и структуры имеют методы выдачи и приемки данных. В случае с со структорой это функции приемки и выдачи полной информации, а с моделями еще приемка и отдача changeset. Эти методы принимают интерфейсы, реализация которых определят способ передачи или сохранения этих моделей/cтруктур (Worker). Worker'ы связываются в цепочки, что позволяет организовать связанность данных. Можно грабить корованы.