- Баллы
- 173
- Имя в Minecraft
- Jampire
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
У меня такое чувство что этот плагин заменит все остальные плагины...
Каким же образом он заменит остальные?
Здесь же целые проблемы - нужно разобраться с новым языком, непонятно, как производить отладку, непонятны потери в производительности (вся эта интерпретация происходит с большими задержками, чем обычный java).
Это же только для фана, серьезные вещи здесь будут уступать тем, что написаны на java.
С этим как я понимаю можно быть спокойным. В том смысле, что интепретация не добавит какой-то заметной задержки.непонятны потери в производительности (вся эта интерпретация происходит с большими задержками, чем обычный java).
). Но если писать плагин с нуля на Java, то: во-первых, слишком много чести если нужна какая-то мелкая фишка
, во-вторых, нужно разбираться с кучей моментов, отлаживать разного рода ситуации, которые могут вызвать ошибки — фактически программируя под VarScript Вы отдаете обработку этого самому VarScript'у. Ну и опять же упрощение целой кучи моментов: то, что у меня на Java займёт здоровенную процедуру, тут может быть реализовано достаточно просто. И это я ещё не разбирался, а сужу только по описанию.С этим как я понимаю можно быть спокойным. В том смысле, что интепретация не добавит какой-то заметной задержки.
Т.е. если код реализующий какой-либо алгоритм вызывает тормоза на VarScript, то реализуйте этот же алгоритм в Java и получите те же тормоза.
@ptnk, Вы говорите о достаточно малых величинах. Знаете, когда-то было "принято" программировать на ассемблере. Это было реально быстрее. Но появились новые процессоры и.... никто ассемблера нынче не знает. Это осталось всё также быстрее, но...
Здесь такая же ситуация, только языком нижнего уровня является Java, а верхнего - VarScript и задержка вводимая интерпретацией скрипта настолько мала, что ею действительно можно пренебречь.
Кроме того, я готов легко согласиться с тем, что некоторые моменты могут выполняться силами VarScript быстрее чем при использовании традиционных способов программирования под Java.
Просто потому что в некоторых случаях одну и ту же вещь на Java можно реализовать с разными эффектом. К примеру, реализовать группировку блоков по чанкам в ScLoad, при помощи банального перебора массива блоков, оказалось в десятки раз быстрее, чем посредством удобной, казалось бы, сортировки при помощи HashMap. При переборе анализ нескольких десятков тысяч блоков занимает столько времени, что можно было даже не заморачиваться выносом всего в отдельную задачу.
Я понимаю, что этого достаточно для выполнения многих задач. Но по сути мы меняем одно на другое, хотя и на интересное....
Но на самом деле быстродействия варскрипта вполне достаточно для выполнения многих задач.
А это как раз подход к реализации. Я уже несколько раз сталкивался с тем, что быстрый и очевидный код в джаве может исполняться быстрее чем с виду более громоздкий код. Соответственно если интерпретатор эти моменты учитывает, то скрипт написанный одним человеком может вполне выполняться быстрее чем если он тот же алгоритм реализует при помощи Java.Как может язык, который компилируется в момент обращения к нему(ну как там это назвать) работать быстрее того языка, который уже скомпилирован?
У меня все в 100 раз проще.... Ну там произвести лексический анализ, построить семантическое дерево, потом как-то сгенерировать выходной код (знания посредственные, но во что-то это все дело преобразуется, может в тот же java байт код). В итоге ну не может это работать даже на ровне по скорости- вся эта обработка и разбор будут занимать много времени и чем больше кусок кода - тем страшнее все будет.

С учетом того, что в майне 50ms на тик (или я не прав?), а тут у нас еще нужно некоторое время на то, чтобы проверить очередь заданий и выполнить их, проверить все шедуллеры на то, что их время еще не пришло, а если пришло то запустить и еще немного подождать. А если плагинов целый вагон, то по времени мы можем даже в минус уйти. Поэтому каждая ms здесь важна.@ptnk, я ещё раз повторюсь. Речь идёт о задержках, которыми можно пренебречь. Я к примеру не способен заметить задержку в 1-2 мс. Уверен, Вы - тоже. Ошибочный алогоритм, использование тормознутых методов Java, загрузка канала - вот то, что реально создает лаги и т.п.
Если код будет выполнен на основе анализа текста, то анализ текстового файла тут займёт не так уж и много. Вы же играете в майнкрафт? А он по сути дела написан на интепретируемом языке (компиляцию в джава-код можно считать условной, по сути Java-машина на лету занимается его интепретацией; в джаве нет машинного кода). Да, на c/c++ было бы быстрее. А ещё быстрее было бы на ассемблере.
А это как раз подход к реализации. Я уже несколько раз сталкивался с тем, что быстрый и очевидный код в джаве может исполняться быстрее чем с виду более громоздкий код. Соответственно если интерпретатор эти моменты учитывает, то скрипт написанный одним человеком может вполне выполняться быстрее чем если он тот же алгоритм реализует при помощи Java.
По поводу php, не буду спорить. У меня был сайт на Joomla с небольшим магазином. Все тормоза были не от php, а от того, что у провайдера жадность превалировала над совестью. Смена провайдера на американского решила все тормоза. И если бы я поставил магазин написанный на perl'е или на чем угодно изменений я бы не заметил. Т.е. php полностью решал свою задачу. А за сколько мс выдается текст - за 1 или за 0.1 мне лично плевать: он доставляется мне из штатов за 100 мс. и скоростью выполнения скрипта тут можно пренебречь.
У меня все в 100 раз проще.
Нет никакого семантического дерева. А вместо лексического анализа - просто разбиение строки на токены.
На выходе - простая структура.
Читать java код и компилировать его в байткод на самом деле не сложно, есть несколько библиотек, реализующих это. Действительно, производительность будет выше. Но какой в этом смысл? Если хочешь писать на Java - пиши плагин.
К тому же VarScript может цепляться к другим плагинам и паразитировать на них
Например, для некоторой игры, вместо того, чтобы писать свою реализацию управления мобами, я установил плагин ControllableMobs, и передавал ему нужные вызовы.
С учетом того, что в майне 50ms на тик (или я не прав?), а тут у нас еще нужно некоторое время на то, чтобы проверить очередь заданий и выполнить их, проверить все шедуллеры на то, что их время еще не пришло, а если пришло то запустить и еще немного подождать. А если плагинов целый вагон, то по времени мы можем даже в минус уйти. Поэтому каждая ms здесь важна.
Этого более чем достаточно.Ну если хотите. Как сам майнкрафт. Как баккит. Как все плагины. Это всё кустарное производство:3. кустарное производство. Главное, чтобы это приносило некоторое удовольствие и душевный покой.


ЦЕЛЫХ 50мсЭтого более чем достаточно.
Ну если хотите. Как сам майнкрафт. Как баккит. Как все плагины. Это всё кустарное производство
Ну да, что спорить. Вы видите проблему, а я вижу возможности. Мне хотелось бы, что бы эти возможности увидели администраторы серверов (тогда мир майнкрафта будет разнообразнее), ну а "проблема в один тик".... оставим убеждённость в том, что это проблема Вам...![]()
профайлер не предусматривал?
Если только такой:
SYSTIME %%start
<какой-то код>
SYSTIME @start - PRINT
Получаем миллисекунды
Насчет наносекунд - сделаю обязательно. Например NANOTIME
@ptnk
Секунды над курицей изменяются по задержке:
<пишем текст тад курицей>
20 TICKS
<пишем ей другой текст>
Задержка осуществляется с помощью BukkitTask - тут нет ничего страшного или тормозного.
Смотрим далее..
У нас есть набор(HashSet) куриц.
На низком уровне регистрируется EntityDeathEvent и PlayerInteractEvent (их тут всего два)
PlayerInteractEvent:
если у игрока есть специфический предмет с определенными NBT тегами, читаем программу из тега, компилируем и исполняем ее.
Программа, которую мы прочитали швыряет курицу и добавляет ее в HashSet
EntityDeathEvent:
если умершая курица была в HashSet, то взрываем ее и удаляем из набора.
У каждого слушателя есть уже готовая к запуску функция, которую надо только пнуть, чтобы она запустилась. Когда нужно, функция получает пинок и переменную Event в придачу.
Единственное, чего тут действительно много, это объектов BukkitTask в ожидании. Их количество равно количеству куриц. Как только курица сдохла, таски отрубаются в месте с ней. А потом их жрет gc.
Но даже несколько сотен объектов BukkitTask никак не сказываются в плане производительности на моем слабеньком ноутбуке с запущенной IDEA в режиме дебага.
Мелкие задачи намного удобнее будет реализовать скриптами, чем под каждую делать отдельный плагин. Или например если какой-нибудь эвент сервер, то удобнее для каждой игры написать скрипт, чем делать плагин.Для тех, кто знает и пишет плагины, это баловство. Я вот для себя не вижу, где это можно применить. Ведь это тоже самое, но в другой упаковке.
ptnk, тут момент какой. Если администратор сервера освоит VarScript, то у него не будет вопросов "какой плагин делает то или это?", "каким плагином взорвать курицу?" и т.п. Он просто будет брать и делать.
Конечно можно порекомендовать изучать Java (и это правильно). Но если писать плагин с нуля на Java, то: во-первых, слишком много чести если нужна какая-то мелкая фишка
, во-вторых, нужно разбираться с кучей моментов, отлаживать разного рода ситуации, которые могут вызвать ошибки — фактически программируя под VarScript Вы отдаете обработку этого самому VarScript'у. Ну и опять же упрощение целой кучи моментов: то, что у меня на Java займёт здоровенную процедуру, тут может быть реализовано достаточно просто. И это я ещё не разбирался, а сужу только по описанию.
Т.е. для серверо-держателей VarScript это отличный инструмент.
Мелкие задачи намного удобнее будет реализовать скриптами, чем под каждую делать отдельный плагин. Или например если какой-нибудь эвент сервер, то удобнее для каждой игры написать скрипт, чем делать плагин.