дневник Яос

Операционная система, написанная на языке Оберон и проект её перевода на русский язык. Только технические вопросы.
БудДен
Сообщения: 1071
Зарегистрирован: 07.10.18 14:01

Re: дневник Яос

Сообщение БудДен » 14.11.20 21:04

Ндя, оказывается, чтобы переводить код, надо его сначала, вообще говоря, понять. Это не очень здорово, поскольку задача становится нелинейной по сложности, а в случае неправильного понимания качество переведённого кода становится хуже, чем исходного. Как вариант, можно для начала переводить только то, что сразу понятно. Но ценность такого перевода значительно ниже.

БудДен
Сообщения: 1071
Зарегистрирован: 07.10.18 14:01

Re: дневник Яос

Сообщение БудДен » 15.11.20 01:19

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

БудДен
Сообщения: 1071
Зарегистрирован: 07.10.18 14:01

Re: дневник Яос

Сообщение БудДен » 15.11.20 23:59

Попытался скомпилировать переведённый модуль, сразу две ошибки:
  • ✓ & придётся расщепить на два смысла так же, как to
  • ✓ неправильная логика определения символа по идентификатору - считается, что в русском варианте слова только русские, но DIV ломает это предположение
Есть что чинить при следующем подходе к штанге.

БудДен
Сообщения: 1071
Зарегистрирован: 07.10.18 14:01

Re: дневник Яос

Сообщение БудДен » 17.11.20 20:36

  • ✓ не переведено NEW (переводится как "нов", но в таком виде не распознаётся)
  • ✓ при печати "и" (And1, Scanner.ВариантыПеревода.Русский) нужно отделать "и" пробелом, если рядом с ним идентификатор.
  • ✓ не переводится {EXCLUSIVE}
  • ✓ в одном месте SIGNED32(что-то) SIGNED32 не переводится, хотя в других местах оно переводится
  • ✓ 0CCX выводится как CCX
Последний раз редактировалось БудДен 20.11.20 23:48, всего редактировалось 2 раза.

БудДен
Сообщения: 1071
Зарегистрирован: 07.10.18 14:01

Re: дневник Яос

Сообщение БудДен » 19.11.20 23:53

Минимизировал пример с SIGNED32 до

Код: Выделить всё

MODULE RuTest2;

VAR i : SIGNED32;
BEGIN i := SIGNED32(i) END RuTest2.

LisCompiler.Compile --perevediNaRusskijj --info RuTest2.Mod ~
Копать дальше в ResolveParameterDesignator

БудДен
Сообщения: 1071
Зарегистрирован: 07.10.18 14:01

Re: дневник Яос

Сообщение БудДен » 20.11.20 23:55

Переведённый модуль скомпилировался, хотя вопросы ещё есть:
  • ✓ лис не может пересобрать систему
  • ✓ криво показывается структура кода в редакторе
  • (✓ не всё перевёл, но методику придумал) тип цел32 подсвечивается красным (менять в TFAOParserUCS32.Mod)
  • ✓ проверить, что работает динамическое английское имя команды
  • перекрытые виртуальные методы перевести нельзя, т.к. их имена должны совпадать с именами методов в предках. Пока что это выглядит, как большие и опасные грабли.
  • нужно понять, как сделать процесс перевода инкрементным - пока что есть файл английский и файл русский, а процесс добавления перевода в уже переведённый русский не рассматривался. Возможно, что такой процесс и не замышлялся, но я уже не помню. Тут главное не погнаться за чрезмерной гибкостью, чтобы механизм оставался простым и управляемым. (частично ✓ - в рамках одного файла можно добавлять переводы, только нужно после первого же перевода заменить файл во всей системе сборки; также может понадобиться утилита для удаления уже переведённых частей словаря, чтобы словарь сохранял разумный размер; систему из более чем одного файла пока не проверял, но вроде нет причин не работать)
Последний раз редактировалось БудДен 21.11.20 23:33, всего редактировалось 5 раз.

БудДен
Сообщения: 1071
Зарегистрирован: 07.10.18 14:01

Re: дневник Яос

Сообщение БудДен » 21.11.20 00:01

Вот фрагмент кода, показывающий суровую правду жизни:

Код: Выделить всё

    проц ПриБегеДоВозврата*(sender, data : динамически_типизированный_укль);
    перем
      (* adr:ADDRESS; *)
    тело
      если Трассировать то KernelLog.String("!!!OnRunUntilReturn!! "); KernelLog.Ln; кн;
      если activePr#НУЛЬ то
        BtDTraps.brkPnt.AddTmpBP(activePr.смещКон);
        INCL(СостОтл,состОтлБег);
        бегиВнутр();
      кн;
    кн ПриБегеДоВозврата;
Что тут плохого? Переведены не все примитивы библиотеки (KernelLog.String), не все локальные переменные (sender, data), даже не все примитивы языка (INCL). Текст в комментариях не тронут. И так код будет теперь выглядеть долгое время. Однако по-другому не получится сделать - перевод такого большого объёма кода может быть только поэтапным, поэтому смесь языков ещё долго будет присутствовать.

БудДен
Сообщения: 1071
Зарегистрирован: 07.10.18 14:01

Re: дневник Яос

Сообщение БудДен » 22.11.20 00:22

Заменил первый переведённый модуль. Был WMDebugger.Mod, стал ПошаговыйОтладчик.ярм . Уже была в прошлом попытка добавить модуль с русскими ключевыми словами, но пришлось откатить. Посмотрим, что будет теперь. Перевод модуля не полный. Можно посмотреть здесь:

https://gitlab.com/budden/jaos/-/commit ... d9db5cbfe3

После этого оно сразу же не заработало. Один косяк (состоящий из двух) уже поправил, второй, вероятно, уже не сегодня - не заработал как надо вызов процедуры по альтернативному имени.

Для затравки разбирательства,

Modules.GetProcedure - по идее, должна учитывать многоязычность (и, вероятно, делает это),
но BtDTraps.GetProcedure - как-то не очень.

БудДен
Сообщения: 1071
Зарегистрирован: 07.10.18 14:01

Re: дневник Яос

Сообщение БудДен » 22.11.20 16:03

Разобрался так, что поставил ограничения на то, каким может быть имя в процедуре, находящей произвольную процедуру по адресу - английским или русским. Эта процедура мало используется, вряд ли будут дальше большие проблемы. Есть более часто используемая Modules.GetProcedure, она вроде должна понимать многоязычность.

Отладчик, на вид, заработал в прежнем объёме, так что можно считать, что есть определённый успех, здесь:

https://gitlab.com/budden/jaos/-/commit ... 24d7ab4e4b (отладчик требует пересборки).

Теперь придётся заняться модификатором override для перекрываемых в наследниках методов. Сейчас её нет и ничто не защищает от рассогласования методов при наследовании. Это внезапная неприятность, неизвестно, сколько времени она займёт.

БудДен
Сообщения: 1071
Зарегистрирован: 07.10.18 14:01

Re: дневник Яос

Сообщение БудДен » 22.11.20 23:55

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

Ответить