Ясно, что процесс зарулил не туда. Однако я нашёл примерное место, где проблема с падающим преобразованием была исправлена. Правильным решением было бы вообще отказаться от использования и методов записей, и мат. массивов в проекте pw, поскольку они не обязательны. Однако раз уже проделана работа по переводу, то попробуем дотянуть до полного результата.
Задача состоит в том, чтобы научиться эффективно сравнивать более новые версии A2 с текущей ЯОС. Первая часть работы состоит в том, чтобы перевести ЯОС на английский. После того, как это сделано, обнаружилось, что много различий вызвано следующим:
* растенение идентификаторов в ЯОС. Это можно решить, добавив соответствующие переводы (убирать растенение при переводе на английский). К сожалению, похоже, что это придётся делать вручную, но хотя бы перевод можно делать на уровне одного модуля, а не всех конфигураций, перевод одного модуля выполняется примерно в тысячу раз быстрее выполняется, чем перевод всей системы, значит, можно довольно быстро привести разницу к минимальной
* кроме того, некоторые имена переведены на русский простой заменой, без словаря. Это также решается правкой словаря переводов.
* т.к. я выкинул кооперативный backend, возникли ещё различия
* также различия произошли из-за добавленя двуязычности
Проблема ещё и в том, что словаря для LisSemanticChecker вовсе не существует. Было бы славно иметь его синтезировать по diff-у из двух переведённых версий. Но неясно, стоит ли ещё и на это отвлекаться.
Перевод 2024-12-09
-
- Site Admin
- Сообщения: 53
- Зарегистрирован: 25.04.18 15:17
-
- Site Admin
- Сообщения: 53
- Зарегистрирован: 25.04.18 15:17
Re: Перевод 2024-12-09
Поменял генератор словаря, чтобы он генерировал словарь с отменой растенений. Теперь:
* дублируем модуль FoxSemanticChecker.Mod в русской версии как FoxSemanticCheckerРу.Mod (важно, что с русским именем)
* в переведённой на английский ЯОС генерируем словарь для FoxSemanticChecker
* копируем его в русскую ЯОС под именем FoxSemanticCheckerРу.перев.XML и правим русское имя модуля в нём
* делаем костыль в процедуре ДайЯчейкуСимвола:
Здесь считатьВсеВходныеИменаРусскими - это константа в модуле, к-рую мы временно определим в истину. В противном случае имена могут не подцепиться правильно, ведь движок рассчитан на причёсывание имён в сторону русского или английского языка, а у нас при отмене растенения оба имени англоязычные. ХОтя надо было просто заменить l0Name на какое-нибудь л0Name и не понадобились бы костыли. Но уже поздно.
* в русской версии - ЗагрузиПереводыЭлементовКода.ИзВсехФайлов
* переводим в русской ЯОС с его помощью модуль FoxSemanticChecker2.Mod на английский
Сохраняем результат как FoxSemanticCheckerEn.Mod
*
* дублируем модуль FoxSemanticChecker.Mod в русской версии как FoxSemanticCheckerРу.Mod (важно, что с русским именем)
* в переведённой на английский ЯОС генерируем словарь для FoxSemanticChecker
* копируем его в русскую ЯОС под именем FoxSemanticCheckerРу.перев.XML и правим русское имя модуля в нём
* делаем костыль в процедуре ДайЯчейкуСимвола:
Код: Выделить всё
ИмяРусскоеЛи := считатьВсеВходныеИменаРусскими или ПЭК.НеАнглийскийИдентификатор(имя);
* в русской версии - ЗагрузиПереводыЭлементовКода.ИзВсехФайлов
* переводим в русской ЯОС с его помощью модуль FoxSemanticChecker2.Mod на английский
Код: Выделить всё
LisCompiler.Compile --переведиНаАнглийский FoxSemanticCheckerРу.Mod ~
*
Код: Выделить всё
meld /y/a2/source/FoxSemanticChecker.Mod /y/jaos/source/FoxSemanticCheckerEn.Mod
-
- Site Admin
- Сообщения: 53
- Зарегистрирован: 25.04.18 15:17
Re: Перевод 2024-12-09
В общем, ничего не получилось. Слишком далеко отошли ветки исходника друг от друга. Т.е. сам-то перевод получился и ветка main обновлена. Но задача перенести исправления из A2 в ЯОС не решилась. Получился я ССЗБ.