Форум » » Рефакторинг URQL » Ответить

Рефакторинг URQL

Ajenta: Решила немного потеоретизировать по поводу языка URQ. Ни на что не претендую, и понятно, что всё здесь написанное – это только теория, ибо практикой я точно заниматься не собираюсь. И да, можно кидаться тапками. Но захотелось как-то структурировать мысли на тему. В связи с размножившимися платформами и новыми языками, окидывая взглядом уркл, можно заметить, что он как-то не сильно удобен. Собственно он всегда был не очень, но с последними тенденциями совсем отстал. Поясню: Неудобство 1: То, что перед строкой текста, да что там, перед каждым новым параграфом надо обязательно писать pln. Знающие люди, конечно умеют переносить тексты и удобно ихз структурировать, но тогда вместо pln приходится писать знак переноса и нижнее подчёркивание, что тоже не есть хорошо. Нигде, абсолютно нигде это не делается и не используется. Все нормальные люди либо заключают полностью весь текст в кавычки. Либо в скобки, либо вообще пишут прямо так без всего. Неудобство2: Непонятные ифы. Если мы делаем в игре вложенные условия, тодовольно сложно понять какой else к какому if относится. Конечно, можно проэкспериментировать и приноровиться, но всё прогрессивное человечество пользуется блоками кода и закрытием ифов, будь то связка if\end или же фигурные скобки или просто перенос по строкам и отступам. Так же нет в урке и кейсов, то есть проверок на безусловный выбор из множества. Даже в куспе сделали команду elseif, а мы всё ещё извращаемся. Флаги рисуем. Неудобство3: В урке отсутствуют массивы и функции их обработки. Ужасно неудобно. Да, конечно массивы можно сэмулировать подстановками, что сейчас и делается, в целом даже без особого труда. Но вот функции работы с массивами, такие как: Замена элемента Удаление элемента Добавление элемента Сортировка Поиск Определение размерности массива Это всё приходится писать самому. Что уже вычёркивает авторов не сильно знакомых с программированием и алгоритмами. Неудобство4: Нет нормальных функций. Да, можно сэмулировать функцию - вызвать локацию с параметрами через proc, посчитать там что-то, присвоить куда надо значение, но! Нельзя сделать локальную функцию, которая возвращала бы тебе что-то не в глобальных переменных. На самом деле то, что все переменные в уркле глобальные, ну, кроме появившихся в фурке параметров, передаваемых локации, это даже хорошо. Но вот то, что нетльзя сделать функцию свозвращаемыми параметрами – неудобно. Всё, что вот прямо сейчас пришло в голову и было бы достаточным для удобного написания текстовой игры. Если что-то ещё забыла, то допишу позже. Либо вы напишите, если что-то ещё углядели. В целом моё мнение такое, что язык требует переработки и добавлений. Не таких уж больших и сложных. И нет, не надо предлагать втыкать в фурку луа или что-то такое. У урки есть чудесная штука – подстановки, и за них ей можно простить всё. И терять их не надо. А вот поменять то, что нужно поменять - было бы прекрасно. К тому же, если очень захотеть, то даже совместимость со старыми версиями можно оставить. Понимаю, что, вероятнее всего, никто этим заниматься не будет, но помечтать-то можно(!). Ну и мало ли, вдруг, неожиданно так, каким-то невероятным чудом... Спасибо за внимание.

Ответов - 11

Евгений: Чую я, грядет ажурка...

Ajenta: Не, не будет никакой кожурки. я не пишу движков. И кстати, что касается скорее интерфейса, чем языка. Есть ещё неудобство, что нельзя убирать\стирать отдельно btn'ы. Но это уже другой немного функционал.

Серый Волк: Новогоднее письмо Адженты Деду Морозу)


Ajenta: Надеюсь, он решит, что я хорошо себя вела в этом году и заслуживаю подарка ;)

qwerty: Ajenta пишет: В связи с размножившимися платформами и новыми языками, окидывая взглядом уркл, можно заметить, что он как-то не сильно удобен. Он не идеален, НО, на данный момент, это самый удобный для меня язык написания текстовых игр. В том плане, чтобы именно сесть и писать игру, минимально отвлекаясь на средство разработки. Вот парсерную игру на нём писать реально неудобно. === По неудобствам согласен со следующими: Ajenta пишет: Неудобство2: Непонятные ифы. Если мы делаем в игре вложенные условия, тодовольно сложно понять какой else к какому if относится. Ajenta пишет: Неудобство4: Нет нормальных функций. Да, можно сэмулировать функцию === Вообще, окидывая взглядом имеющиеся платформы, можно заметить, что срочно нужна ещё одна- реально удобная. В этом и заключается причина, по которой они размножились.

Ajenta: Сделала библиотечку функций для работы с одномерными массивами. Надеюсь, это упростит авторам жизнь. Мне так точно. http://urq.plut.info/node/2281

uux: Всё справедливо, всё правильно, но... Ajenta пишет: Неудобство 1: То, что перед строкой текста, да что там, перед каждым новым параграфом надо обязательно писать pln. Знающие люди, конечно умеют переносить тексты и удобно ихз структурировать, но тогда вместо pln приходится писать знак переноса и нижнее подчёркивание, что тоже не есть хорошо. Почему pln? А #/$ на что? Нигде, абсолютно нигде это не делается и не используется. Ты когда-нибудь выводила текст на ассемблере?.. Неудобство2: Непонятные ифы. Если мы делаем в игре вложенные условия, тодовольно сложно понять какой else к какому if относится. Конечно, можно проэкспериментировать и приноровиться, но всё прогрессивное человечество пользуется блоками кода и закрытием ифов, будь то связка if\end или же фигурные скобки или просто перенос по строкам и отступам. Так же нет в урке и кейсов, то есть проверок на безусловный выбор из множества. Даже в куспе сделали команду elseif, а мы всё ещё извращаемся. Флаги рисуем. Вместо просто вложенных if'ов можно использовать if-goto и уже на новой локации применять следующий условный оператор. Тот самый редкий случай, когда оператор безусловного перехода помогает сделать код читабельнее. Неудобство3: В урке отсутствуют массивы и функции их обработки. Ужасно неудобно. [...] Это всё приходится писать самому. Что уже вычёркивает авторов не сильно знакомых с программированием и алгоритмами. Справедливости ради, я, пожалуй, и не вспомню, когда мне при создании текстовой адвенчи понадобился массив. И это даже парсерных игр касается. Списки - да, пригождались, а вот массивы... Разве что когда Аргинк на Фурку портировал... нет, пожалуй и там с них толку было как с козла молока. Неудобство4: Нет нормальных функций. Да, можно сэмулировать функцию - вызвать локацию с параметрами через proc, посчитать там что-то, присвоить куда надо значение, но! Нельзя сделать локальную функцию, которая возвращала бы тебе что-то не в глобальных переменных. На самом деле то, что все переменные в уркле глобальные, ну, кроме появившихся в фурке параметров, передаваемых локации, это даже хорошо. Но вот то, что нетльзя сделать функцию свозвращаемыми параметрами – неудобно. Ну, при должной самодисциплине (использование для proc специально выделенных переменных и неиспользование этих переменных где-то еще) оно ничем от нормальной функции не отличается.

uux: Серый Волк пишет: Новогоднее письмо Адженты Деду Морозу) Скорее снегУРКе.

Ajenta: Uux, "Почему pln? А #/$ на что? " (с) Я про них помню, знаю, люблю. Но это опять дополнительная писанина. "Ты когда-нибудь выводила текст на ассемблере?.. " (с) Выводила, писала, было такое, но на ассемблере уже тыщу лет никто не пишет. Утрирую, но тем не менее. "Вместо просто вложенных if'ов можно использовать if-goto и уже на новой локации применять следующий условный оператор. Тот самый редкий случай, когда оператор безусловного перехода помогает сделать код читабельнее. " (с) Можно и прок использовать, и там тоже ифы делать, можно и флаги ставить. Да много чего можно. Но от этого сильно удобней не становится. "Справедливости ради, я, пожалуй, и не вспомню, когда мне при создании текстовой адвенчи понадобился массив. И это даже парсерных игр касается. Списки - да, пригождались, а вот массивы... Разве что когда Аргинк на Фурку портировал... нет, пожалуй и там с них толку было как с козла молока. " Справедливости ради, списки по сути те же массивы. И мне вот они нужны везде, массивы эти и добавление и удаление. Но себе я либу написала, так что мне пофигу теперь. Раз уж Фаер их добавлять не хочет. "Ну, при должной самодисциплине (использование для proc специально выделенных переменных и неиспользование этих переменных где-то еще) оно ничем от нормальной функции не отличается." (с) Всё можно, кроме переменная = proc функция(2,4) и чтобы в переменной оказывалось число равное 2*4

Ajenta: qwerty пишет: Вот парсерную игру на нём писать реально неудобно. Реально удобнее, чем на любой другой менюшной платформе. Я не говорю конечно сейчас про инстед с его метапарсером.

apromix: По поводу функций, чтобы не сильно изменять сам язык, есть 2 варианта. 1. Нужно добавить оператор func (или оставить proc). А также оператор return (или модифицировать quit/exit) для вызова внутри локаций. И аргументы для функции. Вызывать все так: r = func локация(a1, a2) или r = proc локация(a1, a2) :локация a = arg1; первый аргумент а1 b = arg2; второй аргумент а2 return (a + b) end 2. Добавить только параметры для proc. Вызывать proc с параметрами, а возвращать в переменной, скажем result. 3. Этот 3-й вариант работает сейчас: :begin arg1 = 5 arg2 = 5 proc func pln func = #result$ end :func result = #arg1 + arg2$ end



полная версия страницы