дневник Яос

Только технические вопросы по ЯОС и MINOS. Терминология и прочее - в других форумах.
БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

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

Сообщение БудДен » 29.08.20 11:44

И последние 6 страниц: https://gitlab.com/budden/jaos/-/commit ... 380067bc80

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

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

Сообщение БудДен » 30.08.20 15:11

Заблудился в лесу деревьев разбора. Начал рисовать схему на бумажке, но и в ней запутался. Очевидно, назрела доработка модуля отладочной печати...

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

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

Сообщение БудДен » 03.09.20 01:22

Уже и в отладочной печати почти запутался, но вроде выпутываюсь. Завтра посмотрим...

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

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

Сообщение БудДен » 04.09.20 23:37

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

Записал видео с описанием проделанной за 2 месяца работы:

https://youtu.be/CkDxtdxPx5g

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

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

Сообщение БудДен » 06.09.20 01:39

Вернулся к движку перевода. С помощью отладочной печати быстро исправил ошибку, которую до этого не мог осилить. Теперь буду думать, надо ли выделить перевод в отдельный шаг обработки, или и так сойдёт.

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

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

Сообщение БудДен » 07.09.20 13:40

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

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

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

Сообщение БудДен » 09.09.20 23:35

Собрал систему компилятором Лис, который мало отличается от компилятора Fox, но всё же.
Система запускается и компилятор Лис в ней опять же работает. Дальше пока не смотрел.
Если всё будет ок, заменю компилятор Fox на компилятор Лис и продолжу копать перевод.

До успеха с переводом пока непонятное расстояние.

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

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

Сообщение БудДен » 13.09.20 01:26

Сделал тестовый режим для того, чтобы проверять, не упущен ли где-то перевод. Он действует дуболомно: если перевод в таблицах не нашёлся, то переводит "тилорей", см. https://www.linux.org.ru/forum/talks/14525807

Можно поржать:

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

    (* simple case can be utilized when endString does not contain first character, which is the case for our string convention *)
    проц ЦонсумеСтрингУнтил(конст ендСтринг: ряд из литера8; усеЦонтрол: булево);
    перем есцапеПос: цел32; ецш: литера8; и: цел32; стартПоситион: Стреамс.Поситион;
    конст
      Цонтрол = '\';
      Делимитер = '"';

        проц Аппенд(цш :литера8);
        тело
          если цш = 370 то
            ЕррорС("Unexpected end of text in string"); еррор := правда;
          иначе
            стрингЮритер.Цшар(цш)
          кн;
        кн Аппенд;

    тело
      (* traverse *)
      есцапеПос := 0; ецш := ендСтринг[0]; стартПоситион := поситион.старт;
      ГетНехтЦшарацтер;
      цикл_до
        если цш = ецш то
          ИНЦ(есцапеПос); ецш := ендСтринг[есцапеПос];
          ГетНехтЦшарацтер;
        аесли усеЦонтрол и (цш = Цонтрол) то
          ГетНехтЦшарацтер;
          если (цш = Цонтрол) или (цш = Делимитер) то
            Аппенд(цш)
          аесли цш = 'n' то
            Аппенд(ЦР); Аппенд(ЛФ);
          аесли цш = 't' то
            Аппенд(ТАБ)
          иначе
            ЕррорС("Unknown control sequence")
          кн;
          ГетНехтЦшарацтер
        аесли есцапеПос = 0 то (* frequent case *)
          Аппенд(цш); ГетНехтЦшарацтер;
        иначе
          (* account for "forgotten" characters *)
          цикл_для и := 0 до есцапеПос-1 делай
            Аппенд(ендСтринг[и]);
          кн;
          (* restart *)
          ецш := ендСтринг[0]; есцапеПос := 0;
        кн;
      кн_цикла_до_если (цш = ЕОТ) или (ецш = 370) или еррор;
      если цш = ЕОТ то поситион.старт := стартПоситион; ЕррорС("Unexpected end of text in string") кн;
    кн ЦонсумеСтрингУнтил;
https://gitlab.com/budden/jaos/-/commit ... a691097b05

А в целом уже пора подумать о том, как же переводить. Вероятно, нужно сначала читать файл, генерировать
заготовку переводов (т.е. писать, какие в нём в принципе имена подлежат переводу). Затем пытаться
их перевести из какого-то пополняемого словаря. Допустим, i можно всегда переводить как "ии", или вообще не переводить:
просто "и" занято под ключевое слово., логическое "и", а j - как "j". "Error" можно всегда переводить как "Ошибка" и т.п.

Такой простой словарь наверняка покроет большую долю случаев.
И уже то, что он не осилит, то надо вручную переводить.

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

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

Сообщение БудДен » 14.09.20 23:51

Потихоньку продвигаюсь в переводе атрибутов (UNTRACED и т.п). Один перевёл. Но зато на одном модуле теперь стала компиляция падать, причём вроде место было про другое.

Поскольку меня угораздило сделать одно изменение, которое утащили из ЯОС в A2, и с ним возникли проблемы у них, мне теперь придётся и на это время тратить. Однако разработчики A2 хорошо помогают, придётся поработать на них. Вероятно, где-то неделю потрачу (календарную).

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

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

Сообщение БудДен » 18.09.20 16:09

Ещё немного продвинулся с движком перевода.

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

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

Сообщение БудДен » 21.09.20 00:11

Вроде переводятся флаги (такие, как ACTIVE и т.п.).

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

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

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

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

Сообщение БудДен » 21.09.20 23:58

Кое-что ещё по мелочи поправил, теперь оказывается, что никто не научил лексер и парсер понимать русские переводы флагов. Что ж, это задача простая. Менее приятно, что с русскими ключевыми словами ошибки синтаксиса опять стали мазать мимо цели. А я уже забыл, как это было сделано. Но ничего, это мы исправим.

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

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

Сообщение БудДен » 26.09.20 01:46

Вроде сделал флаги, поменял опции компилятора. Вскрылось, что странно ведёт себя ORD для перечислений, нужно исправлять.

Также напрашивается, что при нажатии буква-пробел происходил бы переход в режим ввода русских букв.

Павиа
Сообщения: 136
Зарегистрирован: 23.05.19 21:28

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

Сообщение Павиа » 26.09.20 19:02

БудДен писал(а):
26.09.20 01:46
Вроде сделал флаги, поменял опции компилятора. Вскрылось, что странно ведёт себя ORD для перечислений, нужно исправлять.

Также напрашивается, что при нажатии буква-пробел происходил бы переход в режим ввода русских букв.
ord она для счетных типов, а не для множеств.

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

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

Сообщение БудДен » 26.09.20 21:16

Перечисление - это и есть счётный тип, ENUM. Во:

https://gitlab.com/budden/jaos/-/blob/и ... речисление

Там просто баг в компиляторе.

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

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

Сообщение БудДен » 28.09.20 00:29

Ох, нелёгкая это работа, из болота тащить бегемота... По ходу дела в языке обнаружилось порядка 20 различных флагов-модификаторов, из серии тех, что в Си были бы cdecl, extern и проч. Т.е. язык совсем не такой уж простой. Среди них есть и вкусняшки для системного программирования, и просто нечто, чего я не понимаю.

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

Остались ещё не локализованными встроенные функции, но вроде движок для этого есть.

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

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

Сообщение БудДен » 02.10.20 21:57

Вроде заработал (снова) перевод флагов. Встроенные функции не начинал, но решил заняться сценарием перевода всех исходников. Тут тоже работы немало. Пока получается так, что перевод нельзя сделать помодульно, а нужно переводить сразу целиком. Это не слишком хорошо. От этого можно избавиться, усложнив реализацию динамической двухъязычности. Тогда переводить станет проще, но пользоваться полупереведёнными исходниками - сложнее. Пока надеюсь без этого обойтись.

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

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

Сообщение БудДен » 06.10.20 21:18

Процесс перевода всех исходников по структуре - такой же, как сборка всех платформ. Поэтому копаюсь в ЦИ (CI), которое есть на официальном сайте A2 и которое даёт данные для вот этой страницы http://builds.cas.inf.ethz.ch/

Кое-что удалось сделать, но до полного успеха пока далеко. Под полным успехом понимаю способность сгенерировать такую же страницу (или хотя бы вывести такие же данные в любой форме) для ЯОС.

Заодно задумался о возврате ARM.

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

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

Сообщение БудДен » 07.10.20 23:30

ARM вернул в репозиторий, он плюс-минус собирается. Вопрос - как тестировать.

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

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

Сообщение БудДен » 11.10.20 03:04

Заказал для тестирования плату, на которой А2 вроде бы несложно запускается, а также списался с людьми, которые это делали.
Немного покопался в системе сборки. В A2 есть автосборка скриптом и автотесты. Нужно всё это задействовать и починить для ЯОС.

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

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

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

Упёрся в кириллицу в консоли, которая уже давно нормально печатается, но всё ещё криво читается.

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

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

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

НЕ ЗАБЫТЬ!!!! Описать AOSPATH - можно забывать, т.к. завёл задачу https://gitlab.com/budden/jaos/-/issues/51

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

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

Сообщение БудДен » 16.10.20 23:13

Задачи по "девопсу" - самые занудные. Потихоньку автоматизирую сборку и тесты, см. соседнюю тему http://вече.программирование-по-русски. ... ?f=5&t=300

На данный момент написал скрипт, который запускает тесты от A2. Приятно, что все тесты проходят в ЯОС. Правда, пока реализовано только для Windows и нет выдачи кода возврата (прошли/не прошли/тестовый стенд упал). Но не факт, что это и нужно. Главное, чтобы их можно было запускать хотя бы руками.

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

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

Сообщение БудДен » 17.10.20 16:27

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

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

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

Сообщение БудДен » 18.10.20 23:57

Потихоньку ползу в направлении перевода всех конфигураций сразу. Сделал команду сборки релиза с помощью компилятора Lis. Неприятное открытие сегодняшнего дня состоит в том, что компилятор Лис в 7 раз медленнее компилятора Fox, так что ЯОС собирается им целых 15 минут. Вероятно, поиск переводов не слишком-то быстр.

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

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

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

Сделал шаг в развитии компилятора - заменил содержимое компилятора Fox содержимым компилятора Lis. Шаг в общем-то формальный, но всплыл ряд несовместимостей, вроде их залатал, но с тестированием у нас понятно как, поэтому что-то могло и отвалиться. Будущее покажет.

Теперь можно продолжить доделывание SET64 в 32-разрядных платформах, где они, по сути, недоделаны.

http://вече.программирование-по-русски. ... =302#p1804

Это откроет дорогу (точнее, уберёт один камень с дороги, а сколько их там будет дальше?) к кросс-компиляции 64-разрядных версий из 32-разрядных, да и вообще, тип SET64 должен работать. А если подумать, то должен работать тип SET(n) для любого положительного n. Хотя это на самом деле не SET, а массив битов длины n.

Коммит, где всё собиралось - здесь: https://gitlab.com/budden/jaos/-/commit ... 92270fbae5
Следующий коммит опять всё ломает - буду смотреть, как реализованы множества и пытаться их доделать. С одной стороны, вроде кажется простым, с другой - я до конца не досмотрел, так что может быть там только начало простое.

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

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

Сообщение БудДен » 25.10.20 01:48

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

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

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

Сообщение БудДен » 29.10.20 00:05

Лис компилируется фоксом,
тесты проходят, но после перекомпиляции лиса этим лисом (проходящей успешно)
полученный в результате лис уже ничего не компилирует.
Первоисточник:

https://gitlab.com/budden/jaos/-/commit ... 09b73a5ff7

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

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

Сообщение БудДен » 30.10.20 00:27

Не в добрый час я решил попробовать починить сборку 64-разрядного приложения из 32-разрядного... Уже несколько дней героических усилий, а всего лишь более-менее заработал тип SET64. Сколько ещё грабель впереди... Может, ну его?

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

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

Сообщение БудДен » 31.10.20 00:52

Скоро месяц, как понесла меня нелёгкая расширить список платформ. Карточка с ARM застряла на таможне.
Собрался и запустился Win64? кросскомпилированный из Win32, но работает как-то не очень. И явно ещё не всё правильно в обработке множеств.
Даже не только SET64, а вообще.

Печально, но похоже, что к НГ не будет существенного куска кода, переведённого на РЯ. А планы такие были.

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

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

Сообщение БудДен » 01.11.20 02:41

Win64, собранный из Win32, заработал удовлетворительно (веб-браузер запускается, IDE работает).
Также собрал Linux64 из того же Win32. Он запускается, гуй показывает, веб-браузер работает.

Тесты пока неясно (вот прямо сейчас запускаю, а спать уж пора давненько)... да, прошли уж.

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

Теперь нужно небольшое "дело техники", чтобы запустить автотестирование трёх сборок под Intel - Win32, Win64, Linux64.

Надо бы и для сборки под qemu тоже их научиться запускать... Как нибудь потом...

Аватара пользователя
Лис [Вежливый]
Сообщения: 561
Зарегистрирован: 08.10.18 13:32

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

Сообщение Лис [Вежливый] » 01.11.20 13:36

«собрал Linux64 ... запускается, гуй показывает, веб-браузер работает»

Но зачем, если таких готовых (уже собранных) дистрибутивов полно?
Может ты не Linux собрал, а какое-то окружение поверх ядра Linux?
Или компилятор "Лис" для работы в Linux64, но тогда непонятно, при чём тут ГУЙ (ГИП?) и веб-браузер.
(твой предыдущий/предшествующий моему пост написан не для землян, твой текст непонятен)

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

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

Сообщение БудДен » 01.11.20 13:52

Так я тут всё равно по большей части сам с собой общаюсь, потому и пишу в основном для себя. Я собрал не Linux64, конечно, а ЯОС как приложение под Linux64. ЯОС содержит в себе своё "ядро", гуй, компилятор.

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

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

Сообщение БудДен » 01.11.20 14:00

https://www.youtube.com/watch?v=9e0hJjz64Tw - вот видео, где показано, как A2 может работать в трёх режимах - как приложение под Linux, как приложение под Windows и как настоящая операционная система на "железе" в QEMU. Это - три разных сборки A2. Моё текущее достижение - всего лишь в том, что я починил кросс-компиляцию, чтобы 64-разрядную ЯОС можно было собрать 32-разрядным компилятором. Таковая кросс-компиляция раньше работала, но потом сломалась.

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

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

Сообщение БудДен » 01.11.20 17:04

Перекомпилировал три платформы, тесты запускаются, порядка 20 тестов на двух платформах не проходят. Борюсь за собираемость ОС под железо. Тесты прогонять не буду. По ходу дела избавился от.gitattributes - теперь все файлы будут с юниксовыми концами строк всегда, даже под Win

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

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

Сообщение БудДен » 04.11.20 00:36

При всём уважении к прекрасному языку Оберон, программировать почему-то больше хочется не на нём, а на лиспе. Поэтому я сделал выгрузку лексем в виде s-выражений, где-то тут 2f2cd2c9dcf26bac98aace6bd5ece6c5db8bd2be. Теперь надо написать программку на лиспе, которая будет обрабатывать разные случаи препроцессирования.

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

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

Сообщение БудДен » 06.11.20 00:37

Сделано. Что осталось теперь? Видимо, генерировать заготовки словарей перевода и заполнять их общей лексикой.

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

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

Сообщение БудДен » 06.11.20 23:48

Начал делать генератор заготовки словаря, но похоже, что его придётся полностью переделать.

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

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

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

Сообщение БудДен » 08.11.20 23:32

Вроде заготовка для словаря генерируется почти прилично, https://gitlab.com/budden/jaos/-/commit ... 9e8590767a
Правда, объём бедствия ощутимый. В одном только небольшом FoxBasic заготовка словаря содержит порядка 900 слов. Некоторые из них повторяются, но
это не сильно утешает.

Теперь нужно:
  • ✓ обрабатывать случай, когда идентификатор уже переведён. Для этого нужно сначала попытаться определить русскоязычность SyntaxTree.Identifier
  • ✓ создать команду, к-рая генерирует заготовки словаря. Пока что переводиться будет малая часть всех модулей, можно и вручную их перечислить. Тем более, что для каждого модуля генератор должен запускаться только один раз.
  • ✓ видимо, словари для каждого модуля нужно хранить в отдельных файлах и ещё иметь скрипт, который их склеивает в единый общий словарь
  • попробовать, как оно будет выглядеть - сейчас находимся на этом этапе, т.к. в движке перевода нашлись ещё ошибки.
  • неясно насчёт общей лексики. Например, есть общие x,y,i. Их, вообще-то можно и оставить в латинице, если это координаты. Но если это объект, то тогда x надо переводить как э.

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

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

Сообщение БудДен » 14.11.20 19:31

Поправил очередные ошибки в движке перевода... День ещё не закончился, однако.

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

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

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

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

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

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

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

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

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

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

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

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

БудДен
Сообщения: 2839
Зарегистрирован: 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 раза.

БудДен
Сообщения: 2839
Зарегистрирован: 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

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

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

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

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

БудДен
Сообщения: 2839
Зарегистрирован: 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). Текст в комментариях не тронут. И так код будет теперь выглядеть долгое время. Однако по-другому не получится сделать - перевод такого большого объёма кода может быть только поэтапным, поэтому смесь языков ещё долго будет присутствовать.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Сообщение БудДен » 24.11.20 20:54

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

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

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

Сообщение БудДен » 28.11.20 23:40

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

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

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

Сообщение БудДен » 02.12.20 10:16

Вчера исправил пару ошибок и нашёл ещё пару.

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

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

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

Исправил те две, всплыла одна, исправил, всплыла ещё. Не исправил. Мало времени последние два дня.

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

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

Сообщение БудДен » 04.12.20 01:03

Потратил больше времени, чем хотелось бы. Исправил ещё, наверное, штук 6-8 ошибок, теперь ядро для Linux и Windows успешно переводится на русский и обратно. Ядро - это не более 20 файлов, но я надеюсь, что они покрывают порядка 90% языка. В общем, скоро, скоро будет уже готов движок и начнётся ад - собственно перевод. Правда, есть ещё одна проблема, о которой пока нет идей, что с ней делать - это перекрытые методы. Метод и все его перекрытые надо переводить одновременно, это идёт поперёк того разреза, который я попытался применить, и ломает всю процедуру.

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

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

Сообщение БудДен » 05.12.20 12:26

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

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

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

Сообщение БудДен » 05.12.20 14:10

Хотя можно просто запретить самостоятельный перевод перекрытых методов, а брать для них перевод из корня иерархии.

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

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

Сообщение БудДен » 06.12.20 01:39

Успешно, за исключением одной строки, перевелось 89 файлов. Это уже порядка 10% всей кодовой базы. Правда, перевод пока состоит всего лишь в работоспособности русских ключевых слов, но главное - что движок перевода работает хорошо, т.е. перевод на русские ключевые слова и обратно на английские приводит к идентичным исходным текстам, за исключением одной глючной строки и за исключением необязательного пока {OVERRIDE}, которое добавляется при переводе туда-обратно. Добавление {OVERRIDE} усложняет сравнение, видимо, придётся его на время откатить/отключить. А модули с русскими ключевыми словами успешно компилируются.

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

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

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

Сообщение БудДен » 06.12.20 16:10

Временно отключил вставку {OVERRIDE}, поправил ещё 1-2 ошибки, теперь переводится 101 файл. Дальше пока застопорилось дело на том, что я уже был столь разумен, что назвал поле именем "и".

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

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

Сообщение БудДен » 07.12.20 01:15

Ввиду совпадения имени репозитория jaos с названием ранее существовашего проекта JVM для A2 репозиторий переименован, теперь он будет называться https://gitlab.com/budden/ja-o-s . Старый репозиторий останется, т.к. на него множество ссылок (сейчас его пытаюсь поднять), но с изменённой заглавной страницей.

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

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

Сообщение БудДен » 08.12.20 02:00

Немного ещё продвинулся по движку перевода, теперь засел в FoxArrayBase - файл огромный и куча ошибок высыпалась. Также немного улучшил удобство - теперь на третьей строке файла можно вписать команду, которая будет в редакторе выполняться по сочетанию клавиш CTRL-SHIFT-J, или, говоря по-нанему, Су-Врег-О.

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

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

Сообщение БудДен » 10.12.20 03:21

FoxArrayBase, кажется, победил. Повысил степень автоматизации теста - теперь перевод туда и обратно запускается "одной кнопкой".

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

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

Сообщение БудДен » 11.12.20 03:35

Ещё одну ошибку в переводчике поправил.

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

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

Сообщение БудДен » 12.12.20 00:12

Ещё что-то поправил, прожевал порядка 700 файлов. Поставлю остаток и пойду спать. Заодно замеряю индекс кириллизации при переходе на русские ключевые слова. На данный момент он 0.89%, т.е. в исходниках ЯОС из всех букв примерно 1% русских.

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

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

Сообщение БудДен » 12.12.20 19:34

Переводятся на русские ключевые слова, модификаторы и встроенные типы все файлы, составляющие сборки для Win32 и Linux64. На процесс перевода на английский и обратно обратно уходит 44 минуты, индекс кирилличности в русском переводе - порядка 13%, из примеров хорошо переведённого файла можно привести файл ЗагрузиПереводыЭлементовКода.Mod с индексом кирилличности 73%. Так хорошо получилось по той причине, что файл изначально писался мной и там сразу применены русские идентификаторы.

Запись в журнале изменений кода https://gitlab.com/budden/ja-o-s/-/comm ... c214f46380

Однако говорить о полном успехе и возможности перехода на русские ключевые слова рано: карточка на ARM до сих пор на таможне. Без тестов не хочется делать такое серьёзное изменение, как замена ключевых слов. Даже из доступных четырёх сборок, поддержка которых планируется и которые можно тестировать, пока что переведены только две. Так что пока до перехода на русские ключевые слова ещё есть чем заняться.

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

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

Сообщение БудДен » 12.12.20 20:26

Вот как выглядит модуль ЗагрузиПереводыЭлементовКода в русской версии.

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

модуль ЗагрузиПереводыЭлементовКода;
	использует KernelLog, Strings, Files, Streams, XML, XMLScanner, XMLParser, XMLObjects, ПереводыЭлементовКода;
конст
	ИмяФайлаПереводов = "ПереводыЭлементовКода.XML";
	Trace* = ложь;
тип
	
	СостояниеДелаРазбора = набор (* передавать по VAR *)
		имяФайла : ряд 256 из литера8;
		будущиеМодули : ПереводыЭлементовКода.Модуль;
		гдея : Streams.Position кн;
	
перем
	hasErrors: булево;
	
	проц РазбериПереводыЭлементовКода(перем сдр : СостояниеДелаРазбора; doc: XML.Document) : булево;
	перем
		enum: XMLObjects.Enumerator;
		p: динамически_типизированный_укль;
		у(*узел*): XML.Element;
		s: XML.String;
	тело
		если (doc = НУЛЬ) то возврат ложь кн;
		(* First we just count the number of hot keys defined *)
		у := doc.GetRoot();
		enum := у.GetContents();
		цикл_пока enum.HasMoreElements() делай
			p := enum.GetNext();
			если (p суть XML.Element) то
				у := p(XML.Element);
				сдр.гдея := у.GetPos();
				s := у.GetName();
				если ((s # НУЛЬ) и (s^ = "Module")) то
					если ~РазбериМодуль(сдр, у) то
						возврат ложь кн
				иначе
					ОшибкаСмысла(сдр, Strings.NewString("Ожидался элемент Module, а попался иной элемент"));
					возврат ложь кн
			аесли (p суть XML.Comment) то
				(* ничего не делаем *)
			иначе 
				ОшибкаСмысла(сдр, Strings.NewString("Ожидался элемент Module, а попался вообще не элемент"));
				возврат ложь кн кн;
		ПереводыЭлементовКода.модули := сдр.будущиеМодули;
		возврат правда кн РазбериПереводыЭлементовКода;

	(* ПрочитайОбязательныйСтроковыйАтрибут возвращает успех или неудачу *)
	проц ПрочитайОбязательныйСтроковыйАтрибут(перем сдр: СостояниеДелаРазбора; у: XML.Element; 
		имяАтрибута : ряд из литера8; перем приёмник: Strings.String) : булево;
		перем врем: Strings.String;
	тело
		врем := у.GetAttributeValue(имяАтрибута);
		если (врем = НУЛЬ) или (врем^ = "") то
			ОшибкаСмысла(сдр, Strings.NewString("атрибтут «") + имяАтрибута + "» должен быть задан непустой строкой");
			возврат ложь кн;
		приёмник := врем;
		возврат правда кн ПрочитайОбязательныйСтроковыйАтрибут;


	(* ПрочитайНеобязательныйСтроковыйАтрибут возвращает успех или неудачу *)
	проц ПрочитайНеобязательныйСтроковыйАтрибут(перем сдр: СостояниеДелаРазбора; у: XML.Element; 
		конст имяАтрибута : ряд из литера8; конст умолч: ряд из литера8; перем приёмник: Strings.String) : булево;
		перем врем: Strings.String;
	тело
		врем := у.GetAttributeValue(имяАтрибута);
		если (врем = НУЛЬ) или (врем^ = "") то
			врем := Strings.NewString(умолч) кн;
		приёмник := врем;
		возврат правда кн ПрочитайНеобязательныйСтроковыйАтрибут;


	проц РазбериЧлены(перем сдр: СостояниеДелаРазбора; хозяин : XML.Element; перем приёмник: ПереводыЭлементовКода.ИменованнаяОбластьВидимости): булево;
	перем
		обход: XMLObjects.Enumerator;
		элт: динамически_типизированный_укль;
		у(*узел*): XML.Element;
		врем : ПереводыЭлементовКода.ИменованнаяОбластьВидимости;
		s: XML.String;
	тело
		приёмник := НУЛЬ;
		обход := хозяин.GetContents();
		цикл_пока обход.HasMoreElements() делай
			элт := обход.GetNext();
			если (элт суть XML.Element) то
				у := элт(XML.Element);
				сдр.гдея := у.GetPos();
				s := у.GetName();
				если ((s # НУЛЬ) и (s^ = "Scope")) то
					если ~РазбериИменованнуюОбластьВидимости(сдр, у, врем) то
						возврат ложь кн;
					врем.следующий := приёмник;
					приёмник := врем кн кн кн; 
		возврат правда кн РазбериЧлены;
		

	проц РазбериИменованнуюОбластьВидимости(перем сдр: СостояниеДелаРазбора; у : XML.Element; перем приёмник: ПереводыЭлементовКода.ИменованнаяОбластьВидимости) : булево;
	перем
		ов: ПереводыЭлементовКода.ИменованнаяОбластьВидимости; russianExists : XML.String; 
	тело
		приёмник := НУЛЬ;
		нов(ов);
		если ~ПрочитайОбязательныйСтроковыйАтрибут(сдр, у, "en", ов.en) то возврат ложь кн;
		если ~ПрочитайНеобязательныйСтроковыйАтрибут(сдр, у, "ru", "", ов.ru) то возврат ложь кн;
		если ов.ru^ = "" то ов.ru := ов.en кн;
		если ~ПрочитайНеобязательныйСтроковыйАтрибут(сдр, у, "rx", "1", russianExists) то возврат ложь кн;
		(* также для справки есть атрибут ee = ExportEd, но он нужен только человеку *)
		если russianExists^ = "1" то
			ов.russianExists := 1
		аесли russianExists^ = "0" то
			ов.russianExists := 0
		иначе
			KernelLog.String("russianExists^ = «");
			KernelLog.String(russianExists^);
			KernelLog.String("»"); KernelLog.Ln;
			ОшибкаСмысла(сдр, Strings.NewString("russianExists должно быть 0 или 1"));
			возврат ложь кн;
		если ~РазбериЧлены(сдр,у, ов.члены) то
			возврат ложь кн;
		приёмник := ов;
		возврат правда кн РазбериИменованнуюОбластьВидимости;



	проц РазбериМодуль(перем сдр: СостояниеДелаРазбора; у : XML.Element) : булево;
	перем
		м: ПереводыЭлементовКода.Модуль; russianExists : XML.String; 
	тело
		нов(м);
		если ~ПрочитайОбязательныйСтроковыйАтрибут(сдр, у, "en", м.en) то возврат ложь кн;
		если ~ПрочитайОбязательныйСтроковыйАтрибут(сдр, у, "ru", м.ru) то возврат ложь кн;
		если ~ПрочитайНеобязательныйСтроковыйАтрибут(сдр, у, "rx", "1", russianExists) то возврат ложь кн;
		если russianExists^ = "1" то
			м.russianExists := 1
		аесли russianExists^ = "0" то
			м.russianExists := 0
		иначе
			KernelLog.String("rx^ = «");
			KernelLog.String(russianExists^);
			KernelLog.String("»"); KernelLog.Ln;
			ОшибкаСмысла(сдр, Strings.NewString("rx должно быть 0 или 1"));
			возврат ложь кн;
		если ~(РазбериПопулярныеПсевдонимы(сдр,м,у) и РазбериКонстанты(сдр,м,у)) то
			возврат ложь кн;
		если ~РазбериЧлены(сдр, у, м.члены) то
			возврат ложь кн;
		м.следующий := сдр.будущиеМодули;
		сдр.будущиеМодули := м; возврат правда кн РазбериМодуль;
			
	проц РазбериПопулярныеПсевдонимы(перем сдр: СостояниеДелаРазбора; м: ПереводыЭлементовКода.Модуль; у : XML.Element):булево;
	перем бегунок: XMLObjects.Enumerator; пуб(*подузелбестиповый*) : динамически_типизированный_укль; пу(*подузел*) : XML.Element;
		тег : XML.String; 
	тело
		бегунок := у.GetContents();
		цикл_пока бегунок.HasMoreElements() делай
			пуб := бегунок.GetNext();
			если пуб суть XML.Content то
				сдр.гдея := пуб(XML.Content).GetPos() кн;
			если пуб суть XML.Element то
				пу := пуб(XML.Element);
				тег := пу.GetName();
				если ((тег # НУЛЬ) и (тег^ = "PopularAlias")) то
					если ~РазбериПопулярныйПсевдоним(сдр, м, пу) то 
						возврат ложь кн кн
			аесли пуб суть XML.Content то (* пропускаем *)
			иначе
				ОшибкаСмысла(сдр, Strings.NewString("ожидался элемент, а попалось неведомо что"));
				возврат ложь кн кн;
		возврат правда кн РазбериПопулярныеПсевдонимы;
		
	проц РазбериПопулярныйПсевдоним(перем сдр: СостояниеДелаРазбора; м: ПереводыЭлементовКода.Модуль; у: XML.Element):булево;
	перем пп : ПереводыЭлементовКода.ПопулярныйПсевдоним; en, ru : XML.String; успех : булево;
	тело
		если ~ПрочитайОбязательныйСтроковыйАтрибут(сдр, у, "en", en) то возврат ложь кн;
		если ~ПрочитайОбязательныйСтроковыйАтрибут(сдр, у, "ru", ru) то возврат ложь кн;
		успех := ПроверьНовизнуПопулярногоПсевдонима(сдр, м, en, ru);
		если успех то
			нов(пп);
			пп.en := en; пп.ru := ru;
			пп.следующий := м.популярныеПсевдонимы;
			м.популярныеПсевдонимы := пп кн;
		возврат успех кн РазбериПопулярныйПсевдоним;
		
	проц ПроверьНовизнуПопулярногоПсевдонима(перем сдр: СостояниеДелаРазбора; м: ПереводыЭлементовКода.Модуль; 
		en, ru : XML.String):булево;
	перем пп: ПереводыЭлементовКода.ПопулярныйПсевдоним;
	тело
	пп := м.популярныеПсевдонимы;
	цикл_пока пп # НУЛЬ делай
		если пп.en^ = en^ то
			ОшибкаСмысла(сдр, Strings.NewString("Неуникальное английское имя")); возврат ложь
		аесли 
			пп.ru^ = ru^ то
			ОшибкаСмысла(сдр, Strings.NewString("Неуникальное русское имя")); возврат ложь кн;
		пп := пп.следующий кн;
	возврат правда кн ПроверьНовизнуПопулярногоПсевдонима;

	проц РазбериКонстанты(перем сдр: СостояниеДелаРазбора; м: ПереводыЭлементовКода.Модуль; у : XML.Element):булево;
	тело возврат правда кн РазбериКонстанты;
	
	
	(* Ошибка для парсера XML *)
	проц ОшибкаДляПарсераXML(pos, line, row: Streams.Position; конст msg: ряд из литера8);
	тело
		KernelLog.String("ПереводыЭлементовКода: позиция");
		KernelLog.Int(pos, 5);
		KernelLog.String(", стр ");
		KernelLog.Int(line, 5);
		KernelLog.String(" кол ");
		KernelLog.Int(row, 5);
		KernelLog.String(" - ");
		KernelLog.String(msg);
		KernelLog.Ln();
		hasErrors := правда
	кн ОшибкаДляПарсераXML;
	
	
	проц ОшибкаСмысла(перем сдр : СостояниеДелаРазбора; msg: Strings.String);
	тело
		KernelLog.String("ПереводыЭлементовКода: файл ");
		KernelLog.String(сдр.имяФайла);
		KernelLog.String(", позиция ");
		KernelLog.Int(сдр.гдея, 5);
		KernelLog.String(": ");
		KernelLog.String(msg^);
		KernelLog.Ln();
		HALT(45345); (* не можем позволить себе загрузить ЯОС с битым файлом переводов *)
	кн ОшибкаСмысла;

	проц Read(перем сдр: СостояниеДелаРазбора) : булево;
	перем
		f: Files.File;
		scanner: XMLScanner.Scanner;
		parser: XMLParser.Parser;
		reader: Files.Reader;
		doc: XML.Document;
		успех : булево;
	тело
		hasErrors := ложь;
		f := Files.Old(сдр.имяФайла);
		если (f # НУЛЬ) то
			нов(reader, f, 0);
			нов(scanner, reader);
			scanner.reportError := ОшибкаДляПарсераXML;
			нов(parser, scanner);
			parser.reportError := ОшибкаДляПарсераXML;
			doc := parser.Parse();
			если hasErrors то
				ОшибкаСмысла(сдр,Strings.NewString("есть ошибки XML."));
			иначе
				успех := РазбериПереводыЭлементовКода(сдр, doc);
				если успех то (* иначе ошибку должны были вывести раньше *)
					ПереводыЭлементовКода.модули := сдр.будущиеМодули;
					KernelLog.String("ПереводыЭлементовКода: файл ");
					KernelLog.String(сдр.имяФайла);
					KernelLog.String(" успешно загружен.");
					KernelLog.Ln кн кн		
		иначе
			ОшибкаСмысла(сдр,Strings.NewString("файл не найден.")) кн;
		возврат успех кн Read;

	проц ИзФайла*;
	перем 
		сдр : СостояниеДелаРазбора;
	тело
		сдр.имяФайла := ИмяФайлаПереводов;
		неважно Read(сдр) кн ИзФайла;
		
кн ЗагрузиПереводыЭлементовКода.ИзФайла ~

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

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

Сообщение БудДен » 13.12.20 03:13

Переводятся туда и обратно 4 конфигурации, индекс кирилличности - 14,7% (опять же, это ещё не на гитлабе, нужно ещё что-то сделать с ARM-ом, который, мало того, что не чем запустить, так он ещё похоже и не собирается). Вот чем хорош индекс кирилличности, что он хорошо растёт от такой простой вещи, как перевод ключевых слов и прочей подобной муры. Раз за день он вырос на полтора процента, может возникнуть иллюзия, что через пару месяцев перевод будет закончен. Но, конечно же, скоро он расти перестанет. Тогда будем мерять как-нибудь по-другому, чтобы росло быстро :) Ловкость рук и никакого обмана :)

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

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

Сообщение БудДен » 15.12.20 00:43

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

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

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

Сообщение БудДен » 15.12.20 17:38

Починил собирамость под ARM. Теперь собирается 9 сборок (сборок было больше, но часть я выкинул). 9 сборок собираются примерно 21 минуту. Запускать под ARM по-прежнему непонятно как, но тут уж ясно, что разбираться долго придётся. Качаю всякие эмуляторы - вроде они появились в последнее время, хотя преисполнен пессимизма. Напрашивается оптимизация процесса перевода, т.к >90% исходников не зависят от препроцессора и их достаточно перевести один раз. Что делать - понятно, осталось сделать.

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

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

Сообщение БудДен » 16.12.20 01:02

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

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

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

Сообщение БудДен » 17.12.20 13:37

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

https://gitlab.com/budden/ja-o-s/-/comm ... 80ad3aca6b

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

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

Сообщение БудДен » 18.12.20 01:12

Пытался внедрить директивы {перекрыта}, но они не вставляются в неактивные блоки препроцессора, поэтому слияние конфигураций ломается. Видимо, придётся часть этой работы проделать вручную, поставив сборку с минимальным числом пакетов. Также, наверное, надо включить предупреждение об отсутствии модификатора {перекрыта/override} независимо от языка и проблема всплывёт как можно раньше.

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

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

Сообщение БудДен » 18.12.20 22:09

Впервые выложил исходники с переведёнными ключевыми словами. Заодно добавил модификатор {перекрыта} для унаследованных процедур.
Где-то тут можно смотреть:

https://gitlab.com/budden/ja-o-s/-/blob ... Kernel.Mod

Индекс кирилличности в этой ветке (пока она не основная) - 15.6%

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

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

Сообщение БудДен » 19.12.20 00:57

Начал перевод модулей компилятора на базе словарей. Процесс, надо сказать, весьма спотыкательный.
Результат такой:

https://gitlab.com/budden/ja-o-s/-/blob ... canner.Mod - индекс кирилличности 32%.

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

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

Сообщение БудДен » 20.12.20 01:36

Исправил сегодня 2-3 ошибки, слил две ветки разработки, из двух аналогов Release.Mod и СборщикВыпускаЯОС.Mod оставил только русскоязычный. Мостики за нами постепенно подгорают...

Похоже, что сломался отладчик - его не хватало. Придётся чинить. Также переводчик всё ещё не идеален - пришлось исправлять 24 места вручную. Одну из проблем закрыл, но ясно, что ещё что-то придётся править.

Индекс кирилличности в русскоязычной ветке - 15.92%. Поскольку уже очевидно, что за обычный день он будет, как правило, расти менее, чем на 0.1%, буду его писать с точностью до 0.01%.

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

MihalNik
Сообщения: 244
Зарегистрирован: 05.11.18 11:02

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

Сообщение MihalNik » 20.12.20 15:20

БудДен писал(а):
20.12.20 01:36
ключевые слова я уже перевёл
Отлично. Т.е. можно переводить любой идентификатор? А со встроенными функциями проблем не будет или их нет в A2?

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

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

Сообщение БудДен » 20.12.20 18:33

Встроенные функции не осилил пока - переведены только ключевые слова и модификаторы (такие, как UNTRACED, EXCLUSIVE и проч). Насчёт переводить любой идентификатор пока рано говорить, т.к. в движке пока всплывают проблемы на каждом новом переводе. Пока я его пропустил через 3 файла и вносил много правок.

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

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

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

Сегодня уже времени было немного - последний день отпуска. Починил пошаговый отладчик (теперь он вроде работает не хуже прежнего, хотя раньше он тоже работал плохо, но хоть как-то). Немного ещё попереводил (и немного даже порефакторил), индекс кирилличности поднялся до 15.93%, но на самом деле вряд ли это честная единичка - скорее всего это ближе к неточности округления. 0,01% в день - до 100% дойдём примерно за 85/0.01 = 8500 дней = 23 года. Ну, есть чем занять остаток дней и что передать потомкам (это смотря сколько Бог отведёт). Обновил главную страницу репозитория. Залил кириллические ключевые слова в главную ветку - ломающие совместимость изменения происходят каждый день и, видимо, идти вперёд по бразильской системе уже проще, чем назад.

https://gitlab.com/budden/ja-o-s/-/comm ... 3e969cd619

Приехала Raspberry Pi, но нет адаптера для карточки, нет мыши и клавиатуры, поэтому проверить даже линукс не представляется пока что возможным. Мне не очень нравится ситуация с UART - под Linux его нужно как-то конфигурировать. В общем, немного покопаюсь с этой малиной, но особо ложиться костьми не буду. Zybo прошла таможню, где теперь она шатается - то неведомо. Желания копаться с ней нет вообще.

В целом можно уже подвести итоги года - план почти выполнен, вот он:

http://plana.mybb.ru/viewtopic.php?id=1286

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

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

Сообщение БудДен » 24.12.20 23:14

Слегка пришёл в себя после неудачи с запуском Raspberry Pi (см. тему http://вече.программирование-по-русски. ... ?f=5&t=329 ), особо времени нет из-за работы, но часок вечером всё же уделил переводу.

В движке пока крупные дыры - около 20 мест пришлось доделывать руками (возможно, что я это сделал и криво - в крайнем случае можно будет отступить, переделать и слить новый и старый результат; просто переделать нельзя, т.к. перевёл много комментариев и строковых литералов, естественно, руками без всякого движка). Теперь места с проблемами зафиксированы в виде коммита 06f1c1654 . Индекс кирилличности 15.94%. Думаю установить норму роста индекса кирилличности в 0.01% в неделю - так вся работа будет закончена за 10000 недель = 161 год. Думается, с такой нормой я достаточно ясно покажу, что данная работа не подлежит тому, чтобы быть сделанной одним лицом, но для народа или государства такая задача вполне посильна. Наверное, можно поставить норму и больше, но я не планирую заниматься одним только переводом. Как минимум, придётся править баги в движке перевода и в самой ЯОС, а также писать приложение, к-рое я замыслил. И всё это в сумме называется "хобби-проект", на который особо много времени уделить не выйдет. Поэтому завершить перевод за 161 год - вполне нормальный темп. Этот темп достаточен, чтобы процедура не вылетала из головы и не нужно было каждый раз её заново изучать.

Норма по переводу на эту неделю выполнена.

Аватара пользователя
Лис [Вежливый]
Сообщения: 561
Зарегистрирован: 08.10.18 13:32

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

Сообщение Лис [Вежливый] » 25.12.20 05:38

всё это в сумме называется "хобби-проект"
Но в чём смысл делать проект, который не будет закончен?
Если видно, что он закончен не будет, значит надо менять тактику, т.е.
переходить к непрямым действиям (искать сторонников (финансирование), готовить презентационные материалы).

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

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

Сообщение БудДен » 25.12.20 13:02

Ну, я думаю, что мультимедиа-приложение я всё же осилю. А перевод 100% текста - нет. Не все проекты делаются за жизнь одного человека, иногда нужно хотя бы начать. Русификация медицины длилась примерно 150 лет. Можно посмотреть вообще на развитие любой отрасли - там всегда всё веками делается. Ну не получается у меня сделать так, чтобы моя работа стала ответом на актуальные вызовы. Значит, от этого придётся отступиться. А что мне предлагается, голову об стену разбить?

Аватара пользователя
Лис [Вежливый]
Сообщения: 561
Зарегистрирован: 08.10.18 13:32

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

Сообщение Лис [Вежливый] » 25.12.20 21:50

что мне предлагается, голову об стену разбить?
Нет, сменить специальность с программиста на специальность публичного политика. У них, очевидно, тоже есть цели, которые можно достигать, и показатели, которые можно замерять, исчислять. Оба эти вида деятельности хоббийные, поэтому нет разницы каким из них заниматься. В то же время у "политического" пути есть потенциальный мультипликативный эффект, и этот путь не ведёт в тупик. Никто в коде чужом копаться не будет, останутся только общие идеи. А идеи лучше всего распространять текстами и перформансами (выступать на конференциях, российских аналогах TED, например).

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

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

Сообщение БудДен » 27.12.20 13:50

Программист из меня, смею надеяться, получился неплохой, а публичный политик? Скорее всего - никакой. Да и публичный политик что делает? Только болтает. Даже через 160 лет у него может ничего не получиться, если его не услышат. А тот, кто занимается непосредственным созиданием, может "писать в стол". Это хуже, чем иметь тиражи, но лучше, чем совсем ничего.

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

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

Сообщение БудДен » 28.12.20 19:35

Боюсь, не уложиться мне в 161 год. Только сел, а уже индекс кириллизации 15,96%. При том, что успел починить ошибку в движке перевода, сверить старую и новую версию и исправить конфликты.

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

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

Сообщение БудДен » 29.12.20 16:31

15,97% . Я подумал, что в индекс кирилличности нужно включить и документы, которых было написано вовсе не так уж и мало. Так что придётся начать всё заново. И главное, составить красивый график, как оно растёт.

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

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

Сообщение БудДен » 29.12.20 16:45

Добавил документы - сразу стало 16.64%.

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

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

Сообщение БудДен » 30.12.20 00:24

Попереводил СборщикВыпускаЯОС - стало 16.68% - наверное, в общей сложности часа два.

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

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

Сообщение БудДен » 30.12.20 00:26

Вероятно, что если дальше так пойдёт, то норму можно удесятерять. Но какая разница, 161 год или 16 лет? С трудом представляю, что я ещё 16 лет так буду сидеть и каждый день что-то переводить. В общем-то меня оба срока не устраивают. Так что не буду ничего удесятерять, просто, видимо, буду делать в этой работе перерывы на что-то другое.

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

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

Сообщение БудДен » 31.12.20 14:31

16.69% . Всплыл вопрос про именование контейнеров: https://www.linux.org.ru/forum/development/16082380
Последний раз редактировалось БудДен 01.01.21 22:56, всего редактировалось 1 раз.

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

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

Сообщение БудДен » 01.01.21 22:55

С Новым годом!

16.71%

Никак не могу закончить всего лишь один файл на 3000 строк, отвечающий за сборку системы. У него индекс кирилличности сейчас 49.3% . Порогом, когда становится осмысленным применение Яроклавы, является 50%, но в данном случае я хочу перевести язык описания конфигураций ЯОС на русские ключевые слова, так что придётся, видимо, зайти за эти 50%. Плюс к тому, в начале файла большой комментарий с описанием команд, который тоже надо перевести. Вопрос зацепится, скорее всего, и за ввод кириллицы из "чёрной консоли". А может быть, и нет.

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

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

Сообщение БудДен » 02.01.21 14:57

16.72%

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

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

Сообщение БудДен » 03.01.21 23:46

Слегка подобрал сопли. Надо работать вдолгую - значит будем работать вдолгую. Надо привлекать народ - значит будем привлекать народ.

Новости апокалипсиса бодрят - на ruskline.ru пишут, что папа Римский объединился с мировыми олигархами для создания инклюзивного капитализма, а в других новостях пишут, что в нижней палате американского конгресса демократы предлагают исключить из обращения местоимения "он" и "она".

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

В связи с этим немного попереводил модуль консольного ввода-вывода. В модуле Shell.Mod достигнута КМК рекордная степень кирилличности в 61%, вот он:

https://gitlab.com/budden/ja-o-s/-/blob ... /Shell.Mod

Нашёл таблицу для перевода управляющих символов ASCII, http://вече.программирование-по-русски. ... ?f=6&t=343

Дописал несколько строчек в веб-словарь - теперь в нём 103 ячейки.

Индекс кирилличности 16.75%

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

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

Сообщение БудДен » 04.01.21 15:40

В Shell.mod индекс кирилличности достиг 82%. Поскольку он использует другие модули, которые ещё не переведены, это на данный момент предел возможного. Хотя вот вижу ещё несколько комментариев, которые не переведены - и тогда 86.7%

Общий индекс кирилличности - 16.79%

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

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

Сообщение БудДен » 05.01.21 00:38

Заработала кириллица в командной оболочке, в т.ч. в "чёрной консоли" под Windows. Т.е. глюки ещё остались, но во всяком случае, удалось
выполнить команду в кириллице через чёрную консоль. Индекс кирилличности 16.80% (я ожидал, что он упадёт, т.к .при внедрении UCS32 в Shell.Mod пришло много латиницы; впрочем, в самом Shell.Mod индекс кирилличности упал до 81%).

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

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

Сообщение БудДен » 05.01.21 23:43

Теперь похоже, что и вправду заработала. Ещё вчера сделал двухъязычными некоторые команды консоли:

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

>справка
--- Справка ---
сокращ/alias: Покажи список сокращённых команд
сокращ/alias 'имя'='команда': Создаё новую сокращённую команду
сокращ/alias 'имя': Удали команду
загрсокращ/loadalias имяФайла: Загрузи сокращения команд из файла
рекурс/batch: запусти оболочку рекурсивно
очисэкр/clear: очисть экран
версия/version: покажи версию
справка/help: покажи эту справку
выход/exit: заверши выполнение оболочки
Индекс кирилличности 16.81% (немного перевёл комментариев, плюс кое-что дописал, код сегодня не переводил).
Зато теперь не работает консоль в графике (WMShell.Open)

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

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

Сообщение БудДен » 06.01.21 23:46

Похоже, что слегка подправил ошибку при выводе из потока в объект "Текст", которая возникает, если литера ФПЮ-8 (UTF-8) оказалась на границе буферов. Всё равно WMShell пока не полностью работает - нельзя вводить кириллицу.

Индекс кирилличности 16.82%, за счёт перевода некоторых внутренних идентификаторов (даже не пользовался движком - обошлось просто заменой текста).

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

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

Сообщение БудДен » 07.01.21 23:46

Кириллица в WMShell, похоже, вводится как положено. Индекс кирилличности - 16.83%, на этот раз за счёт создания нового документа.

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

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

Сообщение БудДен » 09.01.21 00:28

Поправил ещё одну проблему в графической версии оболочки (консоли), но сомнения остались. Если вдруг команда будет печатать литеру с кодом 0, то вывод команды будет обрезан. Плюс починка была произведена изменением в довольно популярной функции - могут вылезти побочные эффекты в других местах. Индекс кирилличности не вырос.

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

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

Сообщение БудДен » 09.01.21 16:39

16.86% + пара мелочей в ИСР.

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

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

Сообщение БудДен » 09.01.21 22:42

16.87%. План на январь был 0.04%, а получилось 0.16%. Поскольку план перевыполнен в 4 раза, переключаюсь на что-нибудь иное до конца января. Видимо, нужно будет посмотреть, как пойдёт дело в рабочие дни, когда свободного времени будет меньше... Хотя нет. Квантом перевода является модуль. Поскольку СборщикВыпускаЯОС.Mod недопереведён, нужно продолжать. Ещё далеко...

Ответить