Что скажешь, ГрАнд?
Уже достаточно изменений накопилось, по-моему...
Неактивен
Вот именно, что много необкатанных и недоделанных изменений.
Сообщения для первого лица адаптированы не все;
Орфография работает не так как положено (считаю, что в справочной области должны быть только видимые предметы, а также не стоит обрабатывать слишком короткие слова). Также не понял, решили ли вопрос с выскакивающим сообщением;
Вывод догадок системы как следует не протестирован;
Хочу автоматизировать определение приглагольного падежа (type).
Частые обновления пугает авторов, особенно начинающих, так что не следует торопится. Все желающие могут получить от меня "альфа версию".
Неактивен
Просьба протестировать www.rtads.org/libr25beta.rar.
Хотел сделать автоматическое спряжение глаголов, но это ещё изрядно времени займет. Попробуйте разные лица ГП!
Неактивен
"дубину of стража"
Исправил, залил новую версию.
Который "дубину of стража" вы имеете в виду, "левый скипетр стража" или "правый скипетр стража"?
Синонимы могут быть разных полов и чисел. Тут либо смириться, либо свести сообщение к абстрактному "Который из объектов "дубину стража" вы имели в виду, ... " или "Упоминая "дубину стража", вы имели в виду: ... "
>ударить гоблина топором
Я не вижу здесь объект "гоблина топором".
Код гоблина и топора, пожалуйста.
Неактивен
Обновил бету библиотеки. Прошу изучить и помучать функцию glok. На этом принципе можно сделать встроенный генератор падежей.
http://www.rtads.org/libr25beta.rar
Полезный для проверки код:
pers: object setall(num)= { isThem:=nil; self.lico:=(num-1)/2+1; if (num%2=0) self.isThem:=true; } ; sprag: function(num1, num2, str) { local i:=1; while (i<=6) { pers.setall(i); glok(pers,num1,num2,str); " "; if (i%2=0) "| "; i++; } "\n"; } sprag1: function(str) { local i:=1; while (i<=6) { pers.setall(i); glok(pers,str); " "; if (i%2=0) "| "; i++; } "\n"; } startroom: room ldesc = { sprag(1,1,'мож'); sprag(3,1,'хот'); sprag(2,1,'вид'); sprag(2,1,'сид'); sprag(2,1,'леж'); sprag(1,2,'нес'); sprag(2,1,'нос'); sprag(2,1,'наход'); sprag(1,1,'зна'); sprag(1,1,'дума'); sprag(1,1,'име'); sprag(2,2,'выгляд'); sprag(1,1,'помога'); sprag(1,1,'представля'); sprag(1,2,'пойд'); sprag(1,1,'вылез'); sprag(2,2,'сто'); sprag(1,1,'слез'); sprag(1, 1,'пахн'); sprag(2,2,'говор'); sprag1('хотеть'); } ;
Неактивен
Не могу воспроизвести этот баг. Видимо, уже исправлен.
Неактивен
Вуаля!
Генератор склонений подключен к РТАДС, а также ещё некоторые новые фишки.
Прошу жесточайшим образом протестировать!
Теперь можно самому на ходу настраивать правила, так что делитесь наработками.
скачать.
Неактивен
Видимо, сейчас актуальнее иные вещи. Так и быть, поддамся конъюнктуре:
brosok: function() { local i, maxdie=6, sides=6, total=0; "\nБросок, результат: \n"; for (i:=1; i<=maxdie; i++) { local res = _rand(sides); " <<res>>"; total+=res; } "\nИтог: <<total>>\n"; } startroom: room sdesc = "<b>Бросалка кубиков</b>" ldesc = { brosok(); "\nНажмите пробел для нового броска, либо любую иную клавишу для выхода. "; while (inputkey()=' ') brosok(); quit(); } ;
Неактивен
Обновил бету. Задавайте вопросы, если что не ясно.
скачать 25 релиз бета
Для использования скинуть все в папку с библиотеками (как минимум обновить advr.t, где есть новая функция для работы генератора, и скопировать библиотеку generator.t).
Внимание! Генератор запускается через функцию commonInit, причем он сразу включает ставший режимом по умолчанию HTML. Поэтому в файле игры следует убрать следующий фрагмент:
replace commonInit: function {"\H+";}
На данный момент генерируются только лексемы. Подлежащие генерации лексемы должны быть отмечены слэшем "/". Ставится он после слова, за ним могут следовать флаги обозначающие род, число и одушевленность. При отсутствии флагов используются свойства объекта. Таким образом возможно решить проблему различия свойств синонима и основного названия объекта - запоминать каким словом обратились, и потом использовать его характеристики (Проблемы из ряда: здесь ящик=> взять коробку => ты не можешь взять его)
Результат генерации выдается на экран, если не отключена соответствующая опция.
Что ещё не сделано: генерация склонений короткого названия, обезЁживание лексем, оптимизация кода (так скажем, не шустрый).
Неактивен
Да, 25. Гляжу в будущее, знаете ли...
Неактивен
Хм. Это точно была последняя версия? Уже в прошлый раз не должно было возникать.
Выкладываю ещё одно обновление. Изменился только файл генератора.
Подоптимизировал, но все равно 800 миллисекунд на 113 слов без вывода на экран...
Туду для себя - ввести ключ однократного прохода в функции замены.
у меня от твоего генератора голова ходит циркулем.
Генератор вообще можно не подключать, а подключенный, он ничего не будет делать, если для него не оставить отметки. Сложность с ним будет только в изучении отметок.
sdec, rdesc... pdesc - все будут.
Неактивен
Совершенно верно. Это альтернативный вариант, который должен стать основным. Надеюсь вы разберетесь как вносить новые правила и поможете доработать алгоритм для всех извращенных случаев.
Чтобы увидеть какое из правил было задействовано, нужно раскомментировать строку
// generator.detailed:=true;
1 - индивидуальное правило, 2 - общий блок правил. Второе число - порядковый номер правила. После каждого фрагмента в комментарии написана его длина для упрощения ориентирования. Не забывайте изменять эти значения после внесения правокю
Неактивен
Можно начинать пользоваться. Неработающие варианты публиковать здесь. Если до релиза библиотеку не исправят, то просто вручную прописать правильный вариант. Буквы-флаги вряд-ли изменятся.
Чтобы было яснее - склонения формируются при запуске игры, но внутренне они принимают тот вид, который мы всегда ранее задавали. Библиотеку обновил, исправил "восточное" и "старинное", качать там же.
Неактивен
Gremour написал:
Прилагательное 'голубое/1с' вызывает слом (выход за границы массива).
Качай свежую версию, ранее исправил.
Неактивен
Извиняюсь за задержку - потихоньку пишу.
В TADS значения noun хранятся не упорядоченно, оригинальный порядок сохранить не удастся (если я правильно понял о чем идет речь). Сам же генератор выдает список склонений в обычном порядке.
Неактивен
fireton написал:
Андрей, ну как? Будет релиз или пока перебиваться бетой? Особенно интересует рабочий генератор с инструкцией о том, как задавать собственные правила...
Столь внезапный и коварный вопрос лишил меня дара речи.
Инструкции в комментариях библиотеки. Готов ответить, если что не ясно.
Неактивен
Что означает запись (4)ки? Или (у6)и? Или (.)ы?
"(4)ки" обозначает, что сначала эта цифра будет заменена на строку из следующей таблички:
// задаем символьные множества symbols= [['0' '[бвдзлмнпрстфц]'] ['1' '[еуюа]'] ['2' '[бвдзлмпрсфц]'] ['3' '[бвгджзнрц]'] //звонкие ['4' '[чшщц]'] //шипящие ['6' '[бвгджзйклмнпрстфхцчшщ]'] //согласные ['8' '[аеёиоуыэюя]'] //гласные ]
В данном случае мы получим "([чшщц])ки". Далее к этой строке автоматически будет добавлен значок '$', обозначающий конец строки. Программа будет сверять лексему на соответствие этому шаблону (о поиске с регулярными выражениями). В замене можно использовать обратные ссылки: $1 - подставить то, что было в первой скобке, $2 - что во второй, и т.д.. По умолчанию, будет изменяться весь найденный шаблон, поэтому неизменяемые части нужно захватывать скобками и вставлять в замену.
"(у6)и" - "(у[бвгджзйклмнпрстфхцчшщ])и"
"(.)ы" - в соответствии с синтаксисом регулярных выражений, точка - это любой одиночный символ.
Рассмотрим правила:
rrules = [ ['2F' 'йки' 'ек'] ...
При множественном числе и женском роде, всё оканчивающееся на 'йки' в род. падеже будет оканчиваться на 'ек'.
Пример: рейки -> реек
commonrules1 = ... ['2' '(6)на' '$1ен' '$1нам' '$1на' '$1нами' '$1нах'], // брёвна, 6 -согл. ...
Ранее были другие условия, если не сработали, работает это.
Множественное число, окончание '(6)на' -> '([бвгджзйклмнпрстфхцчшщ])на' :
Р.П. '$1ен'
Д.П. '$1нам'
В.П. '$1на'
Т.П. '$1нами'
П.П. '$1нах'
Пример:
окна -> окен, окнам, окна, окнами, окнах
Как мы видим, что в родительном падеже есть ошибка. Такая же ошибка была бы, если бы мы ввели 'волокно'. Значит, нужно либо исправить это правило, либо прописать исключение для родительного падежа.
rrules = [ ... ['2' 'кна' 'кон'] ...
Вероятно, потом это же правило придется расширить, если обнаружатся сходные проблемы. Расширить, потому что исключения имеют склонность появляться группами в отдельных падежах, при отдельных окончаниях и числе/роде. Уникальные исключения бывают редко.
Неактивен
Генерация кратких описаний практически заработала. Вот только нельзя во время исполнения присваивать значения в виде строки с двойными кавычками. По крайней мере, я не нашел. Приходится заносить значения в другую переменную, а потом вставлять в строку.
Было бы гораздо лучше все это делать предкомпилятором, но не настолько продвинут. Может быть, есть способ запустить игру и сохранить состояния как отдельный игровой файл?
Неактивен
Да, извиняюсь, не обновлял. Ещё есть что дорабатывать.
Неактивен
Flint, спасибо, что подсказал "preinit"!
Эта функция выполняется после компиляции, но результат сохраняется в игровом файле. Если не выводить отчет об генерации, то игровой файл загружается сразу. Важен порядок загрузки библиотек. Если заменять функцию в stdr.t, то генератор нужно подключать после, если вставлять код в preinit определенный в stdr.t - перед.
Текстовый вывод в preinit работать не должен, а потому все выводится в отчет компилятора, что приводит к зависанию при большом количестве слов.
В общем, с этой функцией не все однозначно, ну буду пытаться.
О твоем коде:
здорово, но описания генерировать из лексем - это... как шубу в трусы заправлять
Должно быть наоборот - пишешь sdesc="останки/2 многоцелевого/п- робота/п- U1001/пу-", а результат:
sdesc="останки многоцелевого робота U1001" rdesc="останков многоцелевого робота U1001" ddesc="останкам многоцелевого робота U1001" vdesc="останки многоцелевого робота U1001" tdesc"останками многоцелевого робота U1001" pdesc="останках многоцелевого робота U1001" adjective='многоцелевого' 'многоцелевого#r' 'робота' 'робота#r' 'U1001' 'U1001#r' noun='останки' 'останков' 'останкам' 'останками' 'останках' 'останкам#d' 'останками#t' 'U1001'
/пу- будет обозначать, что нужно добавить и лексему прилагательного и существительного, но не склонять (-)
Ещё пример: "зеленое/пс вещество/с из носовой/п- полости/п-"
sdesc="зеленое вещество из носовой полости" rdesc="зеленого вещества из носовой полости" ... adjective='зеленое' 'зеленого' 'зеленому' 'зеленому#d' 'зеленым' 'зеленым#t' 'зеленом' 'носовой' 'носовой#r' 'полости' 'полости#r' noun='вещество' 'вещества' 'веществу' 'веществом' 'веществе' 'веществу#d' 'веществом#t'
/c - средний род
Неактивен
Flint, спасибо. Проверку _debug собирался ввести как дополнение, не думал, что окажется остро необходимым.
addwordru(obj, prop, str); - тоже отлично, не задумывался, что может понадобиться
Неактивен
Выложил доработанный генератор. В библиотеке только generator.t и stdr.t.
Работает так:
trava: item location = startroom gdesc = '"чертова/1пж" трава/1ж из Нового/п- Света/п-' noun= 'табак/1м' ldesc="Бурые скрученные листья кучкой лежат на столе." ;
#r пока не ставит, и части речи, исходя из положения в строке, не определяет.
P.S. обновил после сообщения Фаертона. Поменял строку gdesc с двойных кавычек на одиночные.
Отредактировано GrAndrey (16.07.2008 17:59)
Неактивен
Ещё "домашнее задание":
-хотя бы формально описать правила склонения сокращенных прилагательных типа "чертова"
Неактивен
В ТАДС игры можно вводить список команд из файла через опции командной строки. При этом ничего на экран выводиться не будет, зато сразу кусок игры можно будет пропустить + можно увидеть, где застрял, если что-то сломалось. Естественно, строго линейно.
Проверка генератора не так сложна - всего-то создать файл с единственным предметом, в котором прописать всевозможные слова для проверки. При изменении правил запустить, результат сохранить в файл и утилитами сравнить с эталоном.
Неактивен
www.rtads.org/libr25beta2.rar - текущее состояние библиотек
Извини, Михаил, пока не добавил addwordru.
Неактивен
http://www.rtads.org/libr25beta3.rar - ещё обновление.
- Заработало распознавание ударного окончания по прописной букве, несколько исправлений правил генератора, введены правила для слов на -ец.
- Исправил вывод сформированных sdesc...pdesc
- Включил addwordru и delwordru.
- Местный падеж практически заменил все упоминания предложного падежа.
В выложенном advr.t недоработана функция parseNounPhrase. В принципе рабочая, но путает прямой и косвенный объект.
В комплекте - тест для генератора, а также немного доработанная библиотека меню.
Неактивен
Жду комментариев и предложений по юзабилити.
Например, думал дефайнами уменьшить количество переключений раскладки, но кириллица не катит.
Как на счет того, чтобы вместо апострафов ставить двойные кавычки при gdesc, а во время компиляции превращать в обычную строку?
Ещё есть задумка вынести лексемы с метками падежей в отдельные свойства объекта. Список лексем очистится, а количество разных свойств прибавиться. Куда-то можно сослать и "затравку" для генератора после её использования (gnouns и gadjective например).
Я ранее упоминал о скрипте для отладки игры. Подробнее написано здесь:
http://teladesign.com/tads-manual/tads-b.html в параграфе "Testing Your Game".
Вкратце:
mygame.exe -o walkthru.in - записывает в файл команды по мере прохождения
htmlt2.exe -i walkthru.in -l walkthru.log mygame -запускает игру и вводит список команд, а выходящий текст записывает в файл.
Майкл Робертс предлагает сверять старые и новые результаты любой программой типа diff.
Хотел сразу на Вики, но она ещё лежит.
Неактивен
Спасибо!
Потрясающе, но факт: буква 'ё' не входит в диапазон регэкспа '[а-я]'. Аналогично для 'Ё' и '[А-Я]'.
Неактивен
http://www.rtads.org/libr25beta4.rar - налетай, торопись! Теперь генератор работает ещё лучше, ещё правильнее!
Рекомендую ставить авторам. Для публикации игр лучше подождать релиза, а для разработки можно (и нужно!) пользоваться этими библиотеками.
Неактивен
fireton написал:
Добавлены
takedesc
иdropdesc
. Теперь любому предмету можно назначить свой текст вместо банальных "Взят" и "Брошен" при взятии и бросании, соответственно.
Насчет этого не уверен. Часто прописывается схема такого вида:
doTake(actor)= { if (self.isonoriginalplace) { "Ты выдрал *что-то* с его векового места. "; incscore(5); self.isonoriginalplace:=nil; self.moveInto(Me); } else pass doTake; }
хотя правильнее вообще так:
doTake(actor)= { if (self.isonoriginalplace) { "Ты выдрал *что-то* с его векового места. "; incscore(5); self.isonoriginalplace:=nil; } pass doTake; }
В последнем случае проводятся проверки массы и объема инвентаря, а стандартное "Взято" рефлексивно вызывает параксизм довольства у любого ИЛ игрока. Без этой фразы не сразу ясно, вежливый ли это отказ, или сообщение об успехе.
Единственная польза от takedesc и dropdesc - то, что можно сменить фразу по умолчанию. Но я с трудом представляю себе ситуацию, когда нужна менее универсальная фраза. Подбирать и бросать можно в любом месте и в любой ситуации, и расширенное описание может быть весьма неуместно.
В общем, я против. Кому нужно, тот сделает или спросит на форуме.
Неактивен
Детализация, это здорово, но как ты видишь описание выкладывания вазы в случайном месте?
"Ты аккуратно поставил вазу." Куда? На пол? Посреди поля? Баллансируя на канате?
Кстати, следующему же автору понадобится передать аргументы этому методу. Чтобы стандартное сообщение менялось в зависимости от актера и локации.
Ок, я оставлю, но это только одно из сотен усовершенствований, которые можно сделать. Если все их внедрять, библиотеки распухнут и станут совсем непонятными, потому как это все не покрыто мануалом (мы не высылаем отчет о всех наших нововведениях Валентину). РТАДС уже сейчас сложен для новичков, излишние доработки только усугубят ситуацию.
Неактивен
fireton написал:
GrAndrey написал:
Детализация, это здорово, но как ты видишь описание выкладывания вазы в случайном месте?
"Ты аккуратно поставил вазу." Куда? На пол? Посреди поля? Баллансируя на канате?Если балансируя на канате, то нужно перекрыть у комнаты
roomDrop
- все предметы должны падать вниз. Для разных типов комнат можно определить разные классы и флажок в них, чтобы определить, куда ставишь. Все решаемо. Конечно, комбинаторный взрыв. Но если автор хочет идти на это, то пусть у него будут возможности. А если не хочет - у него всегда будут "Взято" и "Брошено".
Все-таки уж слишком частное решение. Почему только "взять" и "бросить"? А кинуть? А одеть-снять?
Думаю, чем завтавлять авторов искать твой takedesc или учить его использовать, так лучше научить исправлять стандартное сообщение этим способом. Выложить во все обучалки этот пример модификации.
Неактивен
Вот что я надумал:
- extendr.t нужно прочесать и даптировать стоящее в основную библиотеку
- это, а также любые другие небольшие расширения вносить как модификации в новом extendr.t
При этом код должен сопровождаться подробным комментарием для чего, он и как используется
Неактивен
fireton написал:
Но все не так просто. Бывает так, что код просто неудачно построен.
...
[Что-то] еще можно внести как дополнение, но что-то - явно нельзя...
В таких случаях в необходимый код вставляется вызов пустой функции, которую можно переопределить в модуле.
Например, так можно вставить дополнительную обработку в предпарсере.
Похожим образом я поступил с проверкой орфографии. Основной модуль запускается без неё, но простое включение сразу её активирует без изменения любых стандартных функций (типа преинита, коминита, интродьюса и т.п.), только специальной функции additionalPreparsing, по умолчанию пустой.
Неактивен
Закоммитил новую версию. Много доработок.
Тперь исправить предпарсинг и можно делать финальный релиз.
Неактивен
Ура, ура! Вышел юбилейный, 25-ый релиз библиотек! Масса изменений и усовершенствований, среди которых генератор, встроенный в систему. Качаем! http://rtads.org/libr25.rar
В скором времени подготовлю обновленную версию обучалки про волка, козу и капусту.
Просьба жестоко протестировать!
Обратите внимание:
gdesc стал просто desc
в библиотеки включен следующий код:
modify room dispBeginSdesc = "<b>" dispEndSdesc = "</b>" ;
т.е. все название комнат выделены жирным. Нужно удалить старые теги
Неактивен
fireton написал:
Андрей, спасибо!
Пожалуйста, выложи библиотеку и в SVN, мне оттуда проще забирать.
Таки сделал
Неактивен
Не видел никаких комментариев к новой версии. Есть ли недостатки и рационализаторские предложения?
Неактивен
Gesperid написал:
О великий и могучий, русский язык! О великие и могучие, регулярные выражения!
GrAndrey, при всем уважении, не думаю, что такой подход может упростить разработку.
Gesperid, не ты ли автор?
башорг написал:
Некоторым программистам, когда они сталкиваются с какой-то проблемой, приходит в голову такая мысль
— О, я знаю! Это можно сделать с помощью регулярных выражений!
Это означает, что у этого програмиста теперь ДВЕ проблемы.
Неактивен
Спасибо, очень интересно. Но при всей справедливости этой шутки, в нашем случае регекспы оказались очень эффективным и наглядным средством реализации генератора. В самой первой версии все было через ветвистые ifы, что несомненно гораздо хуже.
Неактивен
Обновил версию в гугловском репе.
П.С. Не понял, как там выложить файл для всеобщей скачки.
Неактивен
Не совсем подходящий момент, но вот текущая версия библиотек. Генератор существенно доработан благодаря самоотверженной обкатке его участником конкурса.
Доработки с момента 25 релиза:
- в advr.t добавлена функция opro, которая подставляет "об"
или "про" в зависимости от слова, с которым предлог должен
быть согласован
- исправлен механизм отдачи приказов актерам фразами
"попросить таню взять мячик", "приказать Рексу укусить Боба"
Обновременно исправлен глагол "спросить об"
- генератор доработан для определения существительных, прилагательных
и предлогов в коротких описаниях (desc). Данные флагов записывются в
список info_list. Например, для фразы "ржавый/м ключ/м от
сундука/-" он будет выглядеть как ['мп' 'мс' '+' 'п-'].
- генератор формирует местный падеж. В базе - 49 слов (+несколько
упомняуты в комментариях)
- Доработки правил. Главная - окончания -ок. Осталось небольшое
количество исключений.
- Генератор оптиимзирован. Флаги переводятся в двоичный формат,
что существенно ускоряет обработку. Для этого введены функции binarize и
debinarize.
Неактивен
Итак: после перезагрузки (reset) текущей игры не сохраняются все сгенерированные лексемы. При этом есть сгенерированные короткие описания.
Проблема есть только в игре откомпилированной для релиза.
решение: пока нет и не ясно как исправлять. Видимо, нужно обращаться к Майклу Робертсу.
Как временная мера - запретить перезагрузку или по этой команде загружать начальное состояние (это требует создания файла сохранения в папке с игрой в момент запуска и очистит экран при запуске).
Неактивен
Вообще ситуация очень странная - остаются свойства описаний, которые в реалтайме никак генерироваться не могут, но исчезают лексемы. Даже если при перезапуске программа уничтожает все динамически созданные лексемы, ещё один проход генератора (в отладочной версии он происходит) должен вернуть их на место.
Баг только в версии для релиза и потому не могу просмотреть отладчиком. Буду просматривать с помощью отладочных сообщений, решение точно найдется.
Неактивен
любой
Неактивен
нет, не писал. Сам толком ещё не разбрался
Неактивен
Толком так и не разобрался в проблеме, но сделал быстрый хак:
replace initRestart: function(parm) { global.restarting := true; #ifndef __DEBUG "\n\tПожалуйста, подождите, идет генерация падежей.\n"; generator.start; #endif }
Неактивен
Что-то мне подсказывает, что при перезагрузке стираются все динамически назначенные noun и adjective. Это правильно для объектов переименнованных в процессе игры, но не должно касаться тех свойств, что были назначены в стадию предкомпиляции. Вот об этом и нужно писать Майклу, нашему, Робертсу
2 fireton: Пожалуйста, размести отчет, - не могу зарегистрироваться на трекере. Кстати, это тоже баг
Неактивен
The following issue has been RESOLVED.
======================================================================
http://bugdb.tads.org/view.php?id=55
======================================================================
Reported By: GrAnd
Assigned To:
======================================================================
Project: TADS 2
Issue ID: 55
Category: Interpreter
Reproducibility: always
Severity: tweak
Priority: normal
Status: resolved
Fixed In Version: 2.5.14
Resolution: fixed
Fixed in Version:
======================================================================
Date Submitted: 2009-05-01 00:42 EDT
Last Modified: 2009-05-06 16:54 EDT
======================================================================
Summary: Reset of dynamically created nouns and adjectives on
game restart
Description:
Interpreter always delete all dynamically created nouns and adjectives
created in preinit phase at time of game restart. It is an obstacle for
Russian TADS libriries which generates flexions for words during
compilation. All generated "sdesc" type properties remains intact, but all
new nouns and adjectives just disappear and require repeat generation (it
could take up to 10 seconds).
Suggested solution: delete on restart only those lexemes which created on
runtime, not at preinit phase.
======================================================================
----------------------------------------------------------------------
(0000098) Michael Roberts (administrator) - 2009-05-06 16:54
http://bugdb.tads.org/view.php?id=55#c98
----------------------------------------------------------------------
I've made this change for 2.5.14. During compilation, after preinit
finishes, the compiler now marks as static all objects created with 'new'
and words added with 'addword'. This makes anything created during preinit
effectively permanent, so it won't be deleted on restart.
It's been a long time since I've looked at the design of this part of the
system, so I'm a little concerned that there might be side effects of this
change that I haven't thought of. For the time being, then, I'm considering
this a beta test feature, so I'm not uploading this update (2.5.14) to the
IF Archive yet. For now, you can get the update from the tads 2 patch page
at http://www.tads.org/t2_patch.htm. The change only affects the compiler.
Issue History
Date Modified Username Field Change
======================================================================
2009-05-01 00:42 GrAnd New Issue
2009-05-06 16:54 Michael RobertsFixed In Version => 2.5.14
2009-05-06 16:54 Michael RobertsNote Added: 0000098
2009-05-06 16:54 Michael RobertsStatus new => resolved
2009-05-06 16:54 Michael RobertsResolution open => fixed
======================================================================
Неактивен
http://www.rtads.org/libr26pre.rar - обновленная версия библиотеки с патчем для старых версий (генератор запускается заново при рестарте).
http://www.rtads.org/vkkpuzl.zip - исправленный туториал
Просьба ко всем авторам скачать и установить бета-версию нового компилятора:
http://www.tads.org/patch/aksetupd.exe
Как я понял, компилируемый код будет читаться старыми интерпретаторами, причем проблема с исчезновением лексем будет устранена.
Только что проверил - работает.
П.С. Только-что подправил патч, срабатывает на версию интерпретатора 2.5.14, потому как компилятор не выдает такой подробной инфы о своей версии. Компилировал из командной строки, сообщаемая версия интерпретатора соответствует компилятору, так что все должно работать правильно.
Отредактировано GrAndrey (07.05.2009 14:04)
Неактивен