01-21-2017, 02:13 PM
Alay Написал:Статья на хабре Архитектура skyforge
где тут down casting как вы выразились если можно сделать так
Код:public enum ObjectType
{
Avatar,
Kto-to,
Kto-to2
}
if(abonent.objectType != ObjectType.Avatar) // Чтобыстрее сравнить 1-2 байта либо же сигнатуры. ????
{
Cast.logError(****);
return;
}
instanceof говорит лишь о том что архитекторы кода где то смухлевали.
Такой же способ к сожалению используется и во всех сборках l2 эмулей.
Вообще такое впечатление что разрабы пишут instanceof в любой непонятной ситуации когда особо не хочется задумываться. А зря.
А что если такая конструкция будет в коде который очень часто используется ? получаем колосальные задержки которых можно было б избежать чутка подумав. Но нет. Нам лень. Нам нужен продакшен и как можно быстрее.
Да и вообще мне кажется что ответ заданный в этой теме Вам был дан и она начинает скатываться в дебри. Кому лень читать.
Вопрос:
1)Почему java, а не С# или C++?
2)Какие преимущества будут у java над C# или С++, ну или наоборот?
Ответ:
1) Потому что на момент создания первого эмуля всех интересовал линукс. C# не был развит тогда как сейчас. Почему же не С++ - эмуль создавался в торопях и в основном энтузиастами. Они же хотели как можно быстрее увидеть хоть какой то результат. На тот момент java была лучшим решением для поставленных целей.
2) На данный же момент C# более перспективный язык. MS не любили потому-то мало кто знал что у них под капотом. Сейчас же наконец-то мелкософт понял что будущее за OpenSource и работают теперь в данном направлении. А это выталкивает C# вперед. ИМХО. Могу и ошибаться. Сам раньше любил кодить на Java. Пока не попробывал C#. С его WPF и прочими вкусностями. Переходить обратно не собираюсь и нет необходимости.
По поводу цены на win. С выходом Win 10.1 и 2016 сервером. Это того стоит. Темболее раз уж вы пираты - то кто вам помешает скачать KMSAuto Net и ставить серв на win10? или же вам прям так необходим Activedirectory?
Так почему же нет на шарпе работающих эмуляторов. - Потому что придется писать практический все с нуля, что писали 10 лет подряд. Все таки L2 хоть и бессмертная но через 10 лет врятли будет актуально.
Еще одна неоднозначность в Java - HotSpot - оптимизатор паттернов. Если вы пишите четко как робот по популярным паттернам, все ОК. Но как только вы начинаете придумывать свои варианты которые возможно работали б лучше, HotSpot вам все запоганит. Плюс это или минус. Каждый пускай решает сам.
Вот down casting
Код:
final Avatar avatar = (Avatar)abonent;
Ваш вариант быстрее, но он архитектурно кривой. А если у вас enum из 30 типов? И в вашем варианте тоже будет down casting, как только понадобится доступ к полям/методам класса Avatar, просто вы это в коде у себя опустили.