LINUX.ORG.RU

Портирование на grails


0

0

В общем я, как и обещал, начал переносить движок на Grails, правда пока больше пишу с нуля.

Вопрос такой - хочет ли кто помочь и, если кто хочет, куда мне выложить это счастье (github не предлагать, git я пока что совсем не осилил)

★★★★
Ответ на: комментарий от svr69

>Изменение байткода (а это единственный не влияющий на перформанс метод) в этом случае не проканает, т. к. расширяется класс стандартной библиотеки, и потребуется как минимум изолированный класслодер (и представьте, насколько изолированный - аппсервер пользует один java.lang.String, а приложение - другой), который еще неизвестно чем аукнется

Я груви не знаю - но одним глазом глянул что такое метаклсаы. Короче по идее там все просто (ну или можно так сделать):

String.metaClass.capitalize {
StringUtils.capitalize(self);
}

компляется в что-то типа (интерфейсы я фантазирую):

MetaClasses.register(String.class, "capitalize", new Invokable() {
Object invoke(Object self) {
return StringUtils.capitalize(self);
}
}

соответственно вызов
x = "xxx"
y = x.capitalize

сабститьютится в

y = MetaClasses.lookup(x.getClass(), "capitalize").invoke(x)

разница в первомансе на хэш-лоокап.

r ★★★★★
()
Ответ на: комментарий от r

>разница в первомансе на хэш-лоокап.

и в итоге получается около микросекунды, да

thevery ★★★★
() автор топика
Ответ на: комментарий от r

> y = MetaClasses.lookup(x.getClass(), "capitalize").invoke(x)

Это в чистом виде рефлексивный вызов. Оптимизация там такая же, как и если имена методов по отдельности выбирать.

svr69 ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.