RU

Версия интерпретатора в Quest Navigator

newsash #948 19.11.2013 17:05 14 comments 13089 views

Ещё я думаю, что стоит версию интерпретатора поменять в QSPVER хотя бы на 5.7.1 или 5.7.0a, чтобы можно было отличить от классического плеера. Отличия достаточно велики.

newsash,
нет.

Версия интерпретатора - это версия библиотеки. Если ты имеешь в виду различия именно в коде библиотеки, то версия устанавливается Байтом в момент релиза. В классическом плеере версия библиотеки соответствует релизному состоянию. В других плеерах, если используется не-релизная версия, в том числе с модификациями, отличать библиотеку от другой по номеру версии нельзя. Если требуется отличать, то нужно завести обозначение ветки модифицированной библиотеки и указывать ревизию сборки. Номер “базовой” версии при этом останется старым.

На практике, сейчас мы имеем только один плеер (старый Андроид-плеер не в счёт, т.к. его поддержка прекращена), Quest Navigator, со своими модификациями в библиотеке, использующий “свежую” не-релизную версию. Базовая версия у него указывается верно, “5.7.0”. Для возможности различать используемые плееры и платформы, в Quest Navigator сделана функция GETPLAYER.

Используется так:

IF LCASE(GETPLAYER('platform')) = 'ios':
    ...
END

Нужно, чтобы Байт включил поддержку GETPLAYER в следующей версии библиотеки. Таким образом все плееры станут равноправными, можно будет их различать в коде игры.

IF QSPVER < '5.7.1':
    ! Старая версия классического плеера либо AeroQSP
    'Ваш плеер устарел. Обновите его до последней версии.'
    EXIT
ELSE
    ! Есть поддержка GETPLAYER
    IF GETPLAYER('player') = 'Quest Navigator':
        ! Задаём настройки, специфичные для Quest Navigator.
        ...
    END
END

Nex:

В других плеерах, если используется не-релизная версия, в том числе с модификациями, отличать библиотеку от другой по номеру версии нельзя.

Между двумя ревизиями может быть большая разница, что приведёт к непониманию и разногласиям, как это случилось, если я правильно помню, с плеером на Android. Тот же Навигатор может быть пересобран на другой ревизии в пределах версии интерпретатора, что создаст проблемы.

Варианты решить эту проблему:

  1. Забить
  2. Пользоваться GETPLAYER(’player.version’) и искать, какая же ревизия библиотеки там была.
  3. Добавить GETPLAYER(’qsp.revision’)
  4. Добавить команду QSPREVISION
  5. Включать хотя бы для не-релизных версий номер ревизии в номер версии (для Навигатора это “5.7.0.694”).

Я за последний вариант. Поскольку Байт выпускает только релизные версии, то решение за тобой.
В справке уже есть статья, которая приблизительно описывает изменения с привязкой к ревизиям. Её только причесать и в меню добавить.

польза от QSPVER свелась бы к проверке версии на “больше 5.7.0”

Не только. Я полагаю, когда-нибудь будут и более поздние версии, со своими нововведениями. Поэтому тем, кто их захочет использовать и при этом быть уверенным в корректной работе плеера, придётся проверять версию.

Ну и раньше тоже были версии. Некоторые игры и сейчас могут содержать проверку на плеер, например “не старше 5.0.0”. Не стоит сбрасывать со счетов обратную совместимость.

Проверка на версию плеера - это гарантия, что игра будет работать как надо. Нельзя лишить авторов этой возможности просто потому что тебе вдруг приспичило.

Nex:

Нет таких версий библиотеки. Есть только “5.7.0”.

Ты понял, что я имел в виду. Это классическая запись версии, когда четвёртое число - номер ревизии.
Могу сказать по-другому: между 5.7.0 ревизии 529 и 5.7.0 ревизии 694 разница в изменении 8 команд и добавлении ещё нескольких. И отличить их реально только по косвенным признакам.

Nex:

Всё это решается включением GETPLAYER в следующую версию библиотеки.

“Ну то есть решения озвученной проблемы ждать ещё несколько лет…” - сказал во мне реализм, граничащий с пессимизмом.

между 5.7.0 ревизии 529 и 5.7.0 ревизии 694 разница в изменении 8 команд и добавлении ещё нескольких. И отличить их реально только по косвенным признакам.

Допустим. И что дальше? Какие выводы? Какое это имеет значение?

“Ну то есть решения озвученной проблемы ждать ещё несколько лет…” - сказал во мне реализм, граничащий с пессимизмом.

Предположим. А какие другие варианты? Предложенный тобой способ никак не реализовать раньше следующей версии библиотеки. Точно так же ждать следующей версии.

Nex:

Допустим. И что дальше? Какие выводы? Какое это имеет значение?

Это был ответ на фразу “Если знаешь версию “базовой” библиотеки, то всегда знаешь какие возможности в ней реализованы.”. И аргумент в пользу того, что нужно ввести различение по QSPVER не дожидаясь выпуска новой версии классического плеера, если только ты не собираешься её дождаться и выпустить Навигатор на релизной версии библиотеки (тогда да, я зря поднял шум по поводу версии).

Nex:

А какие другие варианты?

Я писал - для не-релизных ревизий библиотеки добавлять номер ревизии к номеру версии. Относительно использования QSPVER всё в порядке: при сравнении “5.7.0” < “5.7.0.694” < “5.7.1”.
Это возможно сделать сразу в следующей сборке плеера без привязки к Байту и его планам (что сейчас происходит с GETPLAYER).

Spoiler

https://github.com/Nex-Otaku/qsplib-experimental/blob/experimental/declarations.h - строка 100

#define QSP_VER QSP_FMT("5.7.0")

И есть ещё один аргумент в пользу реализации именно на QSPVER - номер ревизии относится именно к библиотеке интерпретатора, а не к плееру (к плееру - косвенно). А то, что сейчас умеет GETPLAYER - относится напрямую к плееру.

Это был ответ на фразу “Если знаешь версию “базовой” библиотеки, то всегда знаешь какие возможности в ней реализованы.”

Ну и где здесь противоречие? Версия “базовой” библиотеки соответствует вполне конкретной ревизии на момент релиза. Нововведения этой версии перечисляются для соответствующего релиза. Промежуточные версии библиотеки не релизятся в классическом плеере и AeroQSP.

Что не так-то? Всё верно, знаешь версию - знаешь и то, какие к этой версии сделаны изменения. Потому и релизы библиотеки выходят не с каждым коммитом, а только по накоплению определённого количества изменений.

Я писал - для не-релизных ревизий библиотеки добавлять номер ревизии к номеру версии. Относительно использования QSPVER всё в порядке: при сравнении “5.7.0” < “5.7.0.694” < “5.7.1”.

Ты предлагаешь добавить ревизию базовой ветки. Это не решает проблему. Как ты отличишь, версию библиотеки с внесёнными мной изменениями, от версии с не внесёнными изменениями? Ведь номер ревизии базовой ветки не изменится - изменится номер ревизии моей собственной ветки. У каждой ветки свои собственные номеры ревизий, они в общем случае не упорядочены. Поэтому ревизии нужно считать именно по ветке развития. И что в таком случае делать? Запихнуть в QSPVER ещё и название ветки, а потом его оттуда извлекать, парсить строку? Зачем устраивать этот геморрой, если через GETPLAYER всё можно получить гораздо удобнее?

И есть ещё один аргумент в пользу реализации именно на QSPVER

Реализовывай хоть через яваскрипт, это всё равно никому не нужно. Библиотека должна быть настолько стабильна, насколько это возможно. Потому и вводится GETPLAYER, чтобы у разработчика плеера было больше возможностей по усовершенствованию плеера без вмешательства в библиотеку. Заводить отдельную ветку развития на каждый плеер, собранный не по релизной версии, в которую даже изменений внесено не было - крайне глупо.

GETPLAYER и SYSTEM - это “расширяемое API” плеера. Байт изначально рассчитывал дать возможность расширения функционала библиотеки разработчику плеера. Просто он не учёл, что помимо “оператора” (SYSTEM), который сделает какие-то действия, нужна ещё и “функция” (GETPLAYER), которая вернёт результат.

В этой функции, так же как в операторе SYSTEM, может быть что угодно. Да, в первую очередь она нужна для добычи той информации, которая вне библиотеки принципиально недоступна. Это то, что делает её необходимой. Но никто не мешает её использовать для прочих целей. Всё, что может понадобиться в коде игры, и чего бибилиотека не предоставит “удобным образом”, может быть реализовано в GETPLAYER. Например, туда могут быть зашиты сложные математические функции, которые Байт никогда не введёт в библиотеку. Если автор плеера считает, что это необходимо его пользователям, почему бы и нет. Или встроен вызов каких-то стандартных модулей QSP-кода (типа расширенного инвентаря), с автоматической загрузкой в квест. Или какие-то функции, восполняющие то, чего в библиотеке нехватает в данный момент, но возможно появится в будущем, типа определения текстового индекса по числовому.

Это даёт разработчику плеера большое удобство - всё что может понадобиться, он может сделать не дожидаясь годами релиза библиотеки. При этом, начиная с той версии где будет введена функция GETPLAYER, ему даже ветку библиотеки свою заводить для этого не придётся.

Всё, что ты написал - это здорово. Но, по-моему, смотря в будущее ты забываешь о настоящем:

  • Язык QSP в Навигаторе не соответствует версии 5.7.0
  • Даже базовая ветка библиотеки не соответствует версии 5.7.0
  • Но QSPVER в Навигаторе возвращает “5.7.0”
  • Функции GETPLAYER никогда не будет в 5.7.0
  • Quest Navigator планируется как полноценная замена классическому, а не как сторонний плеер (в котором допустимы какие угодно различия с базовой библиотекой)
  • Итого: две несовместимых ревизии библиотеки можно отличить только по косвенным признакам (кодоизвращениями)
  • Вывод: нужно дать возможность различать эти ревизии методами, доступными в классическом плеере версии 5.7.0 (напрашивается QSPVER) или отложить релиз Навигатора до релиза классического плеера с функцией GETPLAYER (который может и не состояться)

Да, проблему с ветками библиотеки это не решает, это решает более важную проблему. Хотя проблему с веткой тоже можно решить, например, буквой N в конце номера версии. Поиск буквы по строке - простая операция.

Если у тебя есть другие варианты решения - предлагай. Но функции GETPLAYER в версии 5.7.0 нет и никогда не будет. Она может появиться только в следующей версии.

P.S. Я не предлагаю это, как постоянное решение. Я предлагаю это, как временную затычку существующей проблемы, других решений которой я не знаю.

newsash,
я понял о чём ты.

Якобы требуется различать на уровне игры Quest Navigator и классический плеер. Но в реальности, этой проблемы на данный момент не существует. Нет игр, для которых эта проблема была бы актуальна. Решать несуществующую проблему - бессмысленно.

Различать не классический плеер и Quest Navigator, а стабильную библиотеку и библиотеку с кучей изменений.

Nex:

Нет игр, для которых эта проблема была бы актуальна.

Конечно, ведь на Навигаторе игр практически нет. Нет игр - нет проблем.
В каталоге есть игры, несовместимые с Навигатором. Я видел и те, где используются модули, и те, где используется обработка строк, когда игрался с запуском классических игр на Навигаторе.

Nex:

Решать несуществующую проблему - бессмысленно.

Решать потенциальные проблемы до их возникновения - очень полезный жизненный навык. Особенно, если проблема решается добавлением 4-5 символов.

P.S.: хотя всё это нужно лишь для защиты против попыток запустить игру не тем плеером. Если исходить из предпосылки “попытался запустить игру не тем плеером - сам дурак”, то проблема действительно не существует.

В каталоге есть игры, несовместимые с Навигатором. Я видел и те, где используются модули, и те, где используется обработка строк, когда игрался с запуском классических игр на Навигаторе.

Давай не путать. Неправильное открытие модулей - это баг, а не “несовместимость”.

Про строки расскажи подробнее.

Вообще, что касается игр каталога, в тот момент когда я запускал Полку Игр с Андроид-плеером, все игры классического плеера были обновлены, чтобы быть совместимыми и с классическим плеером, и с Андроид-плеером. В Андроид-плеере всегда использовалась “свежая” версия библиотеки.

Решать потенциальные проблемы до их возникновения - очень полезный жизненный навык.

А по мне, так бесполезная трата драгоценнейшего ресурса. Но тебе, конечно, виднее. С нетерпением жду от тебя плеер, в котором ты всё сделаешь как (тебе) надо :)

попытался запустить игру не тем плеером - сам дурак

Если пользуешься плеером, который ещё не вышел в полноценный релиз, и ожидаешь что всё в нём будет идеально, то действительно “сам дурак”. Quest Navigator ещё дорос до того чтобы заменить классический плеер. Именно поэтому я в настоящее время не делаю никаких попыток заменить классический плеер на Quest Navigator. В планах - да, обязательно. Сейчас - боже упаси.

Nex:

Давай не путать. Неправильное открытие модулей - это баг, а не “несовместимость”.
Про строки расскажи подробнее.

http://wiki.qsp.su/razbor_izmenenij_dvizhka
номер ревизии - серьезные изменения:
529 - релиз версии 5.7.0
552 - переименование операторов ADDQST -> ADDLIB, KILLQST -> DELLIB
559,560 - ELSE IF воспринимается как ELSEIF
596 - переименование операторов ADDLIB -> INCLIB, DELLIB -> FREELIB
618, 619 - первый аргумент INSTR, ARRPOS, ARRCOMP переставлен последним
651 - повышен приоритет конкатенации
+добавление в синтаксис цикла FOR, +добавление локальных переменных, +ещё несколько вещей

Только вот не надо говорить, что несмотря на все эти изменения это можно считать версией 5.7.0 =)

newsash,
я вижу список изменений. Но не вижу игр с проблемами совместимости из-за того что в них “используется обработка строк”.

По результатам обсуждения проще будет пользоваться такой проверкой до выхода следующей версии классического плеера.

t = 1
if QSPVER ! '5.7.0':
  'Не 5.7.0'
elseif t _
   or _
   t:
'Quest Navigator на 5.7.0 (ревизия 694)'
end

Log in or Register to post comments.