Преждевременная оптимизация

37
1
9
А для чего такое? Намного проще подобные вещи запилить в lua скрипт, например. Либо вообще в js, тогда даже зависимости никакие тащить не придется.
С классами ведь геморно, как минимум их нужно компилить.
А JS скрипт из скрипт-менеджера, насколько я помню, достаточно медленный (медленнее груви). Тут же основная фича в том, что можно использовать джава-код из файла, не компилированного в проект, без особых затрат в производительности.
 

tox1cozZ

aka Agravaine
8,454
598
2,890
А, понял. Тогда норм. Но для таких небольших расширений лично мне удобнее использовать какой-то скриптовый язык :)

А JS скрипт из скрипт-менеджера, насколько я помню, достаточно медленный (медленнее груви)
Ну, судя по тому что в соседней теме ты пытаешься "оптимизаровать" instanceof - у тебя паранойя.
Никаких проблем с перфомансом ты не получишь)
 
37
1
9
Так вещи маленькие же только в примере. На деле из таких файликов можно даже неплохую архитектуры мутить. А если будет много скриптов, то скрипт-менеджер и JS вообще станут максимально неудобными.
 
37
1
9
Ну, судя по тому что в соседней теме ты пытаешься "оптимизаровать" instanceof - у тебя паранойя.
Никаких проблем с перфомансом ты не получишь)
Ну... Каст и инстансоф явно не являются "быстрыми" инструкциями. Так что, мне кажется, избегать их вполне норм)
 

tox1cozZ

aka Agravaine
8,454
598
2,890
На деле из таких файликов можно даже неплохую архитектуры мутить
Хреновый подход если честно. В моем понимании подобные расширения нужны для простых вещей, аля написать кастомную логику при каком-то событии. Либо с помощью скрипка как-то кастомизировать поведение моба, предмета, блока и тд.

Ну... Каст и инстансоф явно не являются "быстрыми" инструкциями. Так что, мне кажется, избегать их вполне норм)
Эти инструкции могут выполняться сотнями тысяч, если не миллионами в секунду без какой либо просадки по перфомансу.
Самая большая ошибка - преждевременная оптимизация. Ты начинаешь писать сложный и непонятный код. Тратишь больше времени на вещи, которые скорее всего никогда не вызовут проблемы. Заниматься оптимизацией нужно когда появится проблема.
 
37
1
9
Почему хреновый подход? Возьмем какой-то простой пример:
Нужно сделать AI мобу для поиска лучшего пути.
Есть, например, алгоритмы дейкстра и А*. Они оба основаны на графе, который нужно будет строить. Мы создаем абстрактный класс, например, GraphBasedPathfinder, в котором есть метод генерации графа и используем его для реализации других скриптов. Довольно удобно, вроде бы
 
37
1
9
Ты начинаешь писать сложный и непонятный код. Тратишь больше времени на вещи, которые скорее всего никогда не вызовут проблемы. Заниматься оптимизацией нужно когда появится проблема.
Ну...тут я не согласен. Есть моменты, которые стоит продумывать сразу, если отношение перфоманса к затраченному на разработку времени позволяет. В том кейсе, чтобы избежать нескольких проверок (втч instanceof) понадобилось... 2 минуты.

По поводу "миллионов вызовов инструкции" не соглашусь. Считается, что за секунду выполняется в среднем миллион простых операций. Instanceof простой операцией не назвать.
 
37
1
9
Зачем такие вещи делать на расширениях? Намного удобнее сделать API у своего моба, а нужный функционал уже написать аддоном.
А в чем удобство? Даже тестить удобнее с кодом патхфайндера, который ты можешь изменить в рантайме.
Единственный недостаток, который приходит на ум -- невозможность использовать скриптовые классы для расширений твоего плагина/мода в компилируемом коде
 
37
1
9
Для сравнения типов instanceof действительно эффективен (по сравнению с другими методами). Но в моём кейсе от проверок можно избавится вовсе.
 
7,099
324
1,509
Такие расширения больше бы подошли для написания ивентовых мини-игр, которые одноразовые и работают в течении не больше нескольких часов. А такие решения входят в класс "Решения на один раз", следовательно их не стоит делать особо эффективными, на грани "на от**ись".
Однако, использование специализированных движков для скриптов имеет смысл, если язык скриптов компилируемый, в этом случае можно использовать преимущества компилятора для автоматического отлова ошибок

Ого, ничоси, вызов переопрделенного метода медленней, чем instanceof+непереопредленный
 
37
1
9
Такие расширения больше бы подошли для написания ивентовых мини-игр, которые одноразовые и работают в течении не больше нескольких часов. А такие решения входят в класс "Решения на один раз", следовательно их не стоит делать особо эффективными, на грани "на от**ись".
Однако, использование специализированных движков для скриптов имеет смысл, если язык скриптов компилируемый, в этом случае можно использовать преимущества компилятора для автоматического отлова ошибок
По поводу решений хочу и буду спорить. Рантайм подгрузка кода будет мастхев при: наборе сторонних разработчиков на крупный проект (даже не нужно давать паблик апи. Просто генерим интерфейсы и всё), при создании чего-либо, что может иметь овермного различных реализаций, упрощении конфигурирования (тут уж просто для фантазий конфигуратора безграничен. Правда небольшие знания java понадобятся), упрощении тестирования сложных алгоритмов.
 

WantaSanchez

Опоздун
633
17
150
Так джава медленная
Это скорее исходит из особенностей её работы. Какой ЯП будет овербыстрый если он выполняется в ВМ? Хотя как плюс, неплохая кроссплатформерность, из-за которой найти жабу можно там, где не ожидал, хоть в сигнализации дома.
 
Рантайм подгрузка кода будет мастхев при: наборе сторонних разработчиков на крупный проект
Проще же дать апишку, а не думать о костылях. А для упрощения тестирования сложных алгоритмов сойдет прочтение книги по алгоритмам и хоть какой-то практики работы с ними, даже в образовательных целях.
 
37
1
9
Мы с победителем всероса по информатике дебажили полчаса A*, чтобы что-то путное в интеллекте получить... и эта штука очень помогла. Сомневаюсь, что у него недостаточно знаний и практики...
 

tox1cozZ

aka Agravaine
8,454
598
2,890
Это скорее исходит из особенностей её работы. Какой ЯП будет овербыстрый если он выполняется в ВМ? Хотя как плюс, неплохая кроссплатформерность, из-за которой найти жабу можно там, где не ожидал, хоть в сигнализации дома.
Это был сарказм, дружище)
 
Сверху