дневник Яос
Re: дневник Яос
Избавился от одной из работ, теперь будет намного больше времени на ЯОС. Пишу лексер для поиска, индекс кирилличности не меряю.
Re: дневник Яос
Сегодня всё равно занимался чем-то отвлечённым, например, оставшейся работой и семейным отдыхом, поэтому почти ничего не сделал. начал чинить клавиатуру под Linux (при включённой русской раскладке она творит чудеса).
Re: дневник Яос
Один товарищ из Оберон - сообщества попробовал запустить ЯОС под Linux и оно упало. Стал чинить. Вроде починил клавиатуру, хотя полной уверенности нет. Думаю, что надо сборку под Linux починить, но пока не чинится - много наменял.
Re: дневник Яос
Продолжал работу над лексером для поиска по файлам. Лексер в целом готов, тесты проходят. Также сделал режим нормализации лексем (выбрасывание пробелов и приведение к нижнему регистру). Теперь надо сделать самое смачное - обработку метасимвола для сопоставления словоформ и можно будет приступать непосредственно к реализации поиска в файлах. Индекс кирилличности потихоньку ползёт вверх, т.к. код пишется, и равен 21.87%
Хотя вот прямо сейчас понял, что режим нормализации лексем сделал неправильно, потому что для замены он не подойдёт - только для поиска, а это неинтересно. Ну и ладно, переделаем обратно.
Хотя вот прямо сейчас понял, что режим нормализации лексем сделал неправильно, потому что для замены он не подойдёт - только для поиска, а это неинтересно. Ну и ладно, переделаем обратно.
Re: дневник Яос
Внезапно потратил почти весь день на починку крокозябл в буфере обмена под Linux. Теперь, после ряда исправлений, ЯОС как приложение под Linux выглядит более-менее жизнеспособной. Продолжаю заниматься поиском, в простейшем виде поиск заработал, теперь нужно реализовать поиск по шаблонам (чтобы находить слово в разных формах). Индекс кирилличности 21.90%, но часть кода скопирована для ускорения отладки - возможно, что скоро снизится. А тем временем подбирается конец месяца, пора начинать подводить итоги...
Re: дневник Яос
Занимался поиском по словоформам. Сделал сопоставление с образцом, содержащим метасимвол, который может заменяться на ноль, одну или две любых буквы. До реализации поиска по файлам со словоформами осталось две вещи:
- интерфейс пользователя (это относительно несложно на первый взгляд, хотя могут и грабли где-нибудь обнаружиться). Сейчас находки просто выводятся в системных журнал, а надо сделать, чтобы они показывались в виде списка в графическом окошке, и чтобы можно было скакнуть на любую из находок.
- автоматическое превращение слов в шаблоны, для этого нужно уметь отрезать окончания и заменять их метасимволами. Строго говоря, можно и без этого, но очень неудобно.
- интерфейс пользователя (это относительно несложно на первый взгляд, хотя могут и грабли где-нибудь обнаружиться). Сейчас находки просто выводятся в системных журнал, а надо сделать, чтобы они показывались в виде списка в графическом окошке, и чтобы можно было скакнуть на любую из находок.
- автоматическое превращение слов в шаблоны, для этого нужно уметь отрезать окончания и заменять их метасимволами. Строго говоря, можно и без этого, но очень неудобно.
Re: дневник Яос
Сегодня времени особо не было, но смог отобразить список находок в виде колонки строчек. Явно не хватает перехода к находке - это следующее, что нужно сделать. Ещё есть проблема, что поиск работает, наверное, в 1000-10000 раз медленнее, чем в VS Code и для практического применения непригоден. Надо профилировать, искать, почему так.
Re: дневник Яос
Ближайшие планы:
- прочитать все словари и подумать, имеет ли смысл менять соглашение об именовании идентификаторов (может быть проблема
с аббревиатурами)
- Убрать подчёркивания из ключевых слов и глобальных имён в Fox ("системно_зависимое_целое" и "цикл_пока" - две точки входа)
- Пересобрать компилятор Fox компилятором Fox (глобальные имена - общие между Lis и Fox, поэтому
здесь нам не помогает то, что у нас два компилятора)
- Убрать подчёркивания по всему тексту
- Пересобрать новым компилятором весь исходник
- Перевести всё, что переводится, на английский и обратно, убедиться в целостности и идемпотентности перевода
- перевести на английский
- отредактировать словари и изменить в них стиль именования составных слов
- перевести на русский
- доделать поиск по словоформам в новом стиле
- работать над скоростью поиска
- прочитать все словари и подумать, имеет ли смысл менять соглашение об именовании идентификаторов (может быть проблема
с аббревиатурами)
- Убрать подчёркивания из ключевых слов и глобальных имён в Fox ("системно_зависимое_целое" и "цикл_пока" - две точки входа)
- Пересобрать компилятор Fox компилятором Fox (глобальные имена - общие между Lis и Fox, поэтому
здесь нам не помогает то, что у нас два компилятора)
- Убрать подчёркивания по всему тексту
- Пересобрать новым компилятором весь исходник
- Перевести всё, что переводится, на английский и обратно, убедиться в целостности и идемпотентности перевода
- перевести на английский
- отредактировать словари и изменить в них стиль именования составных слов
- перевести на русский
- доделать поиск по словоформам в новом стиле
- работать над скоростью поиска
Re: дневник Яос
Вспомнил, что сейчас нет надёжного поиска и замены по словам, состоящим из букв кириллицы. Поэтому план меняется:
* ✓ сделать, чтобы поиск хоть как-то понимал и новый, и старый способ записи многословных идентификаторов
* реализовать замену (замена нескольких словоформ тоже должна как-то происходить, например, прямым указанием, какую словоформу на какую нужно заменять). При этом поиск должен происходить по шаблону за два прохода. На первом проходе собираются все словоформы данного идентификатора и, если пользователь не указал превращение для всех словоформ, то весь процесс падает. На втором этапе осуществляется собственно замена.
* составить список слов с учётом кумиризации
* ✓ сделать, чтобы поиск хоть как-то понимал и новый, и старый способ записи многословных идентификаторов
* реализовать замену (замена нескольких словоформ тоже должна как-то происходить, например, прямым указанием, какую словоформу на какую нужно заменять). При этом поиск должен происходить по шаблону за два прохода. На первом проходе собираются все словоформы данного идентификатора и, если пользователь не указал превращение для всех словоформ, то весь процесс падает. На втором этапе осуществляется собственно замена.
* составить список слов с учётом кумиризации
Re: дневник Яос
Дичайший отстой, всё ещё занимаюсь поиском. Поправил ошибки и добавил в параметры возможность выбора метода поиска. Ужааасно долго!
Re: дневник Яос
Тяжело работать без удобного формата представления структурированных данных. Взялся сначала за json, но ведь json убогий:
https://habr.com/ru/company/mailru/blog/314014/
И парсер оказался довольно большим. Поэтому начал впиливать вот этот лисп: https://github.com/zick/Oberon2Lisp - оказалось, что в A2 есть ограниченная поддержка процедур в стиле Оберона-2. Но разница между ограниченной и работающей в данном случае состояла в том, что компилятор падал. Потратил немало времени, чтобы это поправить, но в итоге понял, что слишком сложно и не стоит требуемых усилий. Завёл ошибку и оставил это как есть: https://gitlab.com/budden/ja-o-s/-/issues/67
https://habr.com/ru/company/mailru/blog/314014/
И парсер оказался довольно большим. Поэтому начал впиливать вот этот лисп: https://github.com/zick/Oberon2Lisp - оказалось, что в A2 есть ограниченная поддержка процедур в стиле Оберона-2. Но разница между ограниченной и работающей в данном случае состояла в том, что компилятор падал. Потратил немало времени, чтобы это поправить, но в итоге понял, что слишком сложно и не стоит требуемых усилий. Завёл ошибку и оставил это как есть: https://gitlab.com/budden/ja-o-s/-/issues/67
Re: дневник Яос
Лисп вроде интегрировал, он способен читать данные из строки. Как он вычисляет - не проверял, но это и не нужно. Меньше нужно интерпретаторов, а один интерпретатор в ЯОС уже есть (жаль, я не умею им пользоваться). Надо теперь, чтобы научился читать из потока и тогда можно будет передавать командам ЯОС в качестве параметров структурированные данные, ради чего, собственно, всё и затевалось.
Также поправил документацию: добавил общее оглавление описания языка, добавил непереведённую главу о средствах поддержки параллельности и написал документ о командах ЯОС и особенно о формате их аргументов. Это создаёт предпосылки для интеграции чтеца s-выражений в механизм команд.
Очевидно, что я не успею сделать инструмент замены по файлам, придётся радоваться тому, что есть инструмент поиска, способный, хоть и костыльно, искать слова в разных словоформах. Хотя он и кривой, но с научной точки зрения интересный результат уже получен. Такого инструмента я не видел ни в одной IDE (хотя я не такой уж знаток IDE).
До создания инструмента поиска с заменой нельзя говорить о наличии поддержки в ЯОС словоформ русского языка, а при том такие идентификаторы в ЯОС уже есть и работа с ними будет создавать неудобство.
В общем, нужно составить план заморозки проекта (или его перевода в режим сверхнизкой интенсивности).
Также поправил документацию: добавил общее оглавление описания языка, добавил непереведённую главу о средствах поддержки параллельности и написал документ о командах ЯОС и особенно о формате их аргументов. Это создаёт предпосылки для интеграции чтеца s-выражений в механизм команд.
Очевидно, что я не успею сделать инструмент замены по файлам, придётся радоваться тому, что есть инструмент поиска, способный, хоть и костыльно, искать слова в разных словоформах. Хотя он и кривой, но с научной точки зрения интересный результат уже получен. Такого инструмента я не видел ни в одной IDE (хотя я не такой уж знаток IDE).
До создания инструмента поиска с заменой нельзя говорить о наличии поддержки в ЯОС словоформ русского языка, а при том такие идентификаторы в ЯОС уже есть и работа с ними будет создавать неудобство.
В общем, нужно составить план заморозки проекта (или его перевода в режим сверхнизкой интенсивности).
Re: дневник Яос
Начал впиливать в закрытую версию ввод s-выражений, а точнее, их слегка инновационного аналога.
Re: дневник Яос
Доделал в закрытой ветке опции в виде s-выражений. Забросил в пару мест удочку про программиста вместо себя.
Re: дневник Яос
В закрытой ветке сделал кривокостыльную команду "вернись назад". Без неё ад был, теперь будет полегче. Правда, при редактировании файла история в нём съезжает. Но это всё равно лучше, чем ничего.
Re: дневник Яос
За последнее время ещё ряд изменений в закрытой ветке, в т.ч. переиспользование уже открытого редактора при запросе на открытие файла в ИСР, поиск по словам. Теперь нужно сделать поиск/замену во многих файлах, в т.ч. интерактивную. Задача выглядит масштабной, страшно браться. Не могу понять, как быть с закрытостью ветки. По идее проект в целом никому не нужен, а идеи, которые можно из него выдернуть украсть, уже начали появляться в коде, их уже две появилось за последний месяц. Предыдущие идеи касались исключительно русскоязычности и их наоборот хотелось раздать (правда, 1С их не взял, к примеру). А то, что появилось в последнее время - не является специфически русскоязычным. В этом случае имеет смысл развивать проект закрытым. С другой стороны, те, кто высказывал недоверие и опасения, что я закрою проект, и не помогали якобы по этой причине, получат подтверждения своих опасений. Поэтому говорю так: будете помогать делом - открою. Будете стоять и наблюдать - наблюдайте за анонсами. На самом деле не помогали не потому, что боялись закрытия, а по каким-то иным причинам (например, на свои проекты времени не хватало и много других причин). Поэтому проблемы с закрытостью не вижу пока что. С другой стороны, в закрытом формате даже предпосылки к получению добровольческой помощи исчезают. Хотя какая разница, предпосылки-не предпосылки, реальную помощь делом за последние два года задаром мне оказали только два раза.
Re: дневник Яос
Пытаюсь добить поиск c заменой. Невзирая на имеющееся временное окно, делать ещё довольно много:
* нужно сделать скоординированный интерфейс из двух разных окон, чтобы был список файлов с находками и открывался в редакторе в особом режиме конкретный файл. Получается вообще кривовато во многих отношениях, но работать будет можно
* обеспечить сбор всех найденных словоформ и формирование команды замены
* доделать Б-выражения, потому что они используются для ввода параметров. Переписал чтение б-выражений, чтобы никто не придрался, что я что-то украл у японца (впрочем, понятно, что и так никому дела нет).
* нужно сделать скоординированный интерфейс из двух разных окон, чтобы был список файлов с находками и открывался в редакторе в особом режиме конкретный файл. Получается вообще кривовато во многих отношениях, но работать будет можно
* обеспечить сбор всех найденных словоформ и формирование команды замены
* доделать Б-выражения, потому что они используются для ввода параметров. Переписал чтение б-выражений, чтобы никто не придрался, что я что-то украл у японца (впрочем, понятно, что и так никому дела нет).
Re: дневник Яос
Неожиданно, в этом чудовищном манипулировании окошками появился какой-то просвет и можно сказать, что поиск по файлам почти готов. Но поскольку я не умею писать UI приложения вообще, а уж на ЯОС - и подавно, то, результат, видимо, не раз ещё заставит выругаться.
Теперь нужно доделать поиск и сделать замену.
Теперь нужно доделать поиск и сделать замену.
Re: дневник Яос
Поиск и замена в файлах близится к завершению. Похоже, самое страшное позади, если, конечно, не выползут каке-то трудноуловимые баги.
Re: дневник Яос
Продвинул Б-выражения, теперь передавать данные из списка находок в редактор. Остаётся 2-3 дня до завершения функционала поиска и замены в файлах. Т.е. похоже успеваю до выхода на новую работу закончить эту часть, и можно будет приступать к кумиризации.
Re: дневник Яос
Вроде заработал поиск с заменой в файлах с учётом словоформ. Проблем и недоделок ещё вполне хватает, но можно сказать, есть "минимально жизнеспособный продукт", который можно применять для решения реальных задач.
https://www.youtube.com/watch?v=iT64Z_OU3Mc
Исходники выложил в публичную ветку.
Также пополнил документацию информацией о найденных аналогах типа Variant из Дельфи. Их нашлось немало, но все с каким-то уклоном, в итоге подобрать для моей конкретной задачи не вышло. См.
https://gitlab.com/budden/ja-o-s/-/blob ... ые-типы.md
https://www.youtube.com/watch?v=iT64Z_OU3Mc
Исходники выложил в публичную ветку.
Также пополнил документацию информацией о найденных аналогах типа Variant из Дельфи. Их нашлось немало, но все с каким-то уклоном, в итоге подобрать для моей конкретной задачи не вышло. См.
https://gitlab.com/budden/ja-o-s/-/blob ... ые-типы.md
Re: дневник Яос
В связи с наличием интересующегося, описал 4 задачи по доработке:
https://www.youtube.com/watch?v=dOEnfAezRlQ
https://www.youtube.com/watch?v=qjtFB6jwDD0
https://www.youtube.com/watch?v=dOEnfAezRlQ
https://www.youtube.com/watch?v=qjtFB6jwDD0
Re: дневник Яос
Запущен пилотный проект по привлечению фрилансеров, тенденции более-менее обнадёживающие, о результатах говорить рано. Посмотрел видео про билингвизм и мозг, существенных аргументов против билингвизма не нашёл.
Re: дневник Яос
Начал допиливать Б-выражения до чуть более законченного вида, и по ходу дела пришлось допилить уже работающий поиск в файлах - теперь можно передавать в него несколько масок для поиска - одной явно не хватает, т.к. часть модулей имеет расширение "ярм" , а большинство - "Mod".
Re: дневник Яос
Ещё немного улучшил поиск и замену по файлам - теперь там можно открыть файл не только для продолжения поиска, а и просто для работы.
Также по F1 выводится минимальная справка.
Также по F1 выводится минимальная справка.
Re: дневник Яос
Кумиризируем потихоньку. Исходник в экспериментном виде выглядит так:
Код: Выделить всё
модуль Проба;
алг Проверка():цел32;
перем й: цел32;
нач
нцДля й := 0 до 7 делай
если й = 2 то
УТВ(й = 2);
й := й;
иначе
й := 100;
всё
кц;
неважно Проверка();
кон Проверка;
кон Проба.
Re: дневник Яос
В системном меню, пункт справка/документация открывает директорию с документацией в формате markdown. Никакой поддержки формата пока нет - файлы открываются просто как текст.
Re: дневник Яос
Не понял. В ЯОС нет javascript, а html едва есть. В этой ситуации данный метод приемлем?
P.S. и чтобы два раза не писать, что нового в ЯОС:
P.S. и чтобы два раза не писать, что нового в ЯОС:
- Идёт непростая работа по переводу встроенных имён
- В проработке уже не один, а два варианта использования ЯОС для школьников
- Сделали "диск" ЯОС:, указывающий на корень ЯОС - пока только Win32, но цена вопроса - одна строчка в конфиге
- Убрал ограничения в процедуре переименования символов, затеняющих более глобальные одноимённые - теперь оно должно срабатывать за один проход
Re: дневник Яос
Сделал в компиляторе режим --переименуйИдентификаторыПоИменам, который переименовывает идентификаторы с данным именем в другое имя (не работает для модулей). Он нужен, чтобы превратить MOD в mod и понизить регистр некоторых других встроенных функций. Прямо в лоб это сделать не получается, потому что в коде довольно много переменных с именем "mod". Описание
В отличие от него, старый решим переименования (он теперь называется --переименуйИдентификаторыПоПутям) переименовывал только конкретные идентификаторы, определяемые по пути вложенности синтаксических конструкций. Например, им можно переименовать МодульА.ОобъектБ.Поле1 в Поле2 и все его использования, и при этом не трогать Модуль1.ОбъектВ.Поле1 (т.к. к нему ведёт другой путь).
Рано говорить о том, что всё теперь будет хорошо, но есть определённая надежда, что теперь удастся переименовать встроенные функции так, чтобы у них были более-менее человечные имена, и в будущем, если вдруг понадобится ввести что-то новое глобальное, будет доступен инструмент, позволяющий за одно действие устранить конфликты.
В отличие от него, старый решим переименования (он теперь называется --переименуйИдентификаторыПоПутям) переименовывал только конкретные идентификаторы, определяемые по пути вложенности синтаксических конструкций. Например, им можно переименовать МодульА.ОобъектБ.Поле1 в Поле2 и все его использования, и при этом не трогать Модуль1.ОбъектВ.Поле1 (т.к. к нему ведёт другой путь).
Рано говорить о том, что всё теперь будет хорошо, но есть определённая надежда, что теперь удастся переименовать встроенные функции так, чтобы у них были более-менее человечные имена, и в будущем, если вдруг понадобится ввести что-то новое глобальное, будет доступен инструмент, позволяющий за одно действие устранить конфликты.
Re: дневник Яос
Меня тошнит от этого:
Код: Выделить всё
DeclareTypeR(system.characterType,"CHAR","сим8",system.globalScope);
DeclareTypeR(system.rangeType,"RANGE","отрезокЦелых",system.globalScope);
DeclareTypeR(system.integerType,"INTEGER","системноЗависимоеЦел",system.globalScope);
DeclareTypeR(system.longIntegerType,"LONGINTEGER","длинноеСистемноЗависимоеЦел",system.globalScope);
DeclareTypeR(system.integerSetType,"INTEGERSET","мнвоНаБитахРазмераСистЗавЦел",system.globalScope);
DeclareTypeR(Signed8, "SIGNED8", "цел8", system.globalScope);
DeclareTypeR(Signed16, "SIGNED16", "цел16", system.globalScope);
DeclareTypeR(Signed32, "SIGNED32", "цел32", system.globalScope);
DeclareTypeR(Signed64, "SIGNED64", "цел64", system.globalScope);
DeclareTypeR(Unsigned8, "UNSIGNED8", "бцел8", system.globalScope);
DeclareTypeR(Unsigned16, "UNSIGNED16", "бцел16", system.globalScope);
DeclareTypeR(Unsigned32, "UNSIGNED32", "бцел32", system.globalScope);
DeclareTypeR(Unsigned64, "UNSIGNED64", "бцел64", system.globalScope);
DeclareTypeR(Float32, "FLOAT32", "вещ32",system.globalScope);
DeclareTypeR(Float64, "FLOAT64", "вещ64",system.globalScope);
DeclareTypeR(Complex32, "COMPLEX32", "компл32", system.globalScope);
DeclareTypeR(Complex64, "COMPLEX64", "компл64", system.globalScope);
DeclareTypeR(system.realType,"REAL","машинноЗависимоеВещ", system.globalScope);
DeclareTypeR(system.complexType,"COMPLEX","машинноЗависимоеКомпл", system.globalScope);
DeclareTypeR(system.booleanType,"BOOLEAN","лог",system.globalScope);
DeclareTypeR(system.setTypeA,"SET","мнвоНаБитахРазмеромСАдрес",system.globalScope);
DeclareTypeR(system.anyType,"ANY","динамическиТипизированныйУкль",system.globalScope);
DeclareTypeR(system.objectType,"OBJECT","окласс",system.globalScope);
DeclareTypeR(Set8, "SET8", "мнвоНаБитах8", system.globalScope);
DeclareTypeR(Set16, "SET16", "мнвоНаБитах16", system.globalScope);
DeclareTypeR(Set32, "SET32", "мнвоНаБитах32", system.globalScope);
DeclareTypeR(Set64, "SET64", "мнвоНаБитах64", system.globalScope);
(* глобальные функции. Если меняешь тут, ищи в другом месте вызовы NewBuiltinIdentifier *)
NewBuiltinR(Abs,"ABS","abs",system.globalScope,TRUE); (* prospero78/Oberon07ru. в КуМире - abs *)
NewBuiltinR(Ash,"ASH","арифмСдвиг",system.globalScope,TRUE);
NewBuiltinR(Cap,"CAP","ASCII_вЗаглавную", system.globalScope,TRUE);
NewBuiltinR(Chr,"CHR","Сим8ИзКода",system.globalScope,TRUE); (* И21 - нет, Глагол - ВЗНАК, 1С - Симв, Oberon07ru = ВЛИТ *)
NewBuiltinR(Entier,"ENTIER","округлиВниз",system.globalScope,TRUE); (* 1С - Цел, КуМир - int, Русская википедия - "пол", Excel - ОКРВНИЗ *)
(* NewBuiltin(Entier,"FLOOR","",system.globalScope,TRUE); (* дублирует ENTIER и не входит в стандарт *) *)
NewBuiltinR(EntierH,"ENTIERH","округлиВниз64",system.globalScope,TRUE); (* в A2 рекомендуется цел64(плавающееЗначение) *)
NewBuiltinR(Len,"LEN","длина",system.globalScope,TRUE); (* из Глагола; переделать в псевдо-метод *)
NewBuiltinR(Long,"LONG","устарПреобразуйКБолееШирокомуЦел",system.globalScope,TRUE);
NewBuiltinR(Max,"MAX","max",system.globalScope,TRUE);
NewBuiltinR(Min,"MIN","min",system.globalScope,TRUE);
NewBuiltinR(Odd,"ODD","нечётноеЛи¿",system.globalScope,TRUE); (* Глагол *)
NewBuiltinR(Ord,"ORD","КодСим8",system.globalScope,TRUE); (* И21 - НОМЕР, Глагол - ВЦЕЛ, Oberon07ru - НЛИТ, 1С - КодСимвола. Не забываем про перечисления! Сейчас они получаются
преобразованием типов! *)
(* нигде не используется
NewBuiltin(Ord32,"ORD32",system.globalScope,TRUE);
*)
NewBuiltinR(Lsh,"LSH","логСдвиг",system.globalScope,TRUE);
NewBuiltinR(Rot,"ROT","вращБит",system.globalScope,TRUE);
NewBuiltinR(Ror,"ROR","вращВправоБит", system.globalScope,TRUE);
NewBuiltin(Rol,"ROL","вращВлевоБит", system.globalScope,TRUE);
NewBuiltinR(Shl,"SHL","логИлиАрифмСдвигВлево", system.globalScope,TRUE);
NewBuiltinR(Shr,"SHR","логИлиАрифмСдвигВправо", system.globalScope,TRUE);
NewBuiltinR(Incr,"INCR","увел",system.globalScope,TRUE);
NewBuiltinR(Short,"SHORT","устарПреобразуйКБолееУзкомуЦел",system.globalScope,TRUE);
NewBuiltin(Sum,"SUM",system.globalScope,TRUE);
NewBuiltin(Dim,"DIM",system.globalScope,TRUE);
NewBuiltin(Cas,"CAS",system.globalScope,TRUE);
NewBuiltin(First,"FIRST",system.globalScope,TRUE);
NewBuiltin(Last,"LAST",system.globalScope,TRUE);
NewBuiltin(Step,"STEP",system.globalScope,TRUE);
NewBuiltinR(Re,"RE","Re",system.globalScope,TRUE); (* КуМир - переделать в псевдо-метод *)
NewBuiltinR(Im,"IM","Im",system.globalScope,TRUE);
NewBuiltin(systemAdr,"ADDRESSOF",system.globalScope,TRUE);
NewBuiltin(systemSize,"SIZEOF",system.globalScope,TRUE);
(* global proper procedures *)
NewBuiltinR(Assert,"ASSERT","утв",system.globalScope,TRUE); (* КуМир *)
NewBuiltin(Copy,"COPY",system.globalScope,TRUE);
NewBuiltinR(Dec,"DEC","умень",system.globalScope,TRUE);
NewBuiltin(Excl,"EXCL",system.globalScope,TRUE);
NewBuiltin(Halt,"HALT",system.globalScope,TRUE);
NewBuiltinR(Inc,"INC","увел",system.globalScope,TRUE);
NewBuiltin(Incl,"INCL",system.globalScope,TRUE);
NewBuiltinR(New,"NEW","нов",system.globalScope,FALSE);
Re: дневник Яос
Воют между собой КуМир, 1С, Excel, Глагол, школьная сборка, школьная и не школьная алгебра. При этом они все заточены совершенно под разное, и получается "коня и трепетную лань".
В КуМире все встроенные слова очень короткие, т.к. он учебный и нарочито убогий. В Обероне - ещё хуже. Встроенные идентификаторы совершенно неравномерно распределены по частоте применения, однако все они сделаны короткими, т.к. это было в те давние времена, когда памяти не хватало даже на идентификаторы. Но все уже привыкли и удлиннение вызовет протест!
Но в современной идеологии "чистого кода" слова должны быть подробными. А по моей идеологии, частые слова должны быть короткими, а редкие - подробными. Да ещё и на русском, в котором, ессно, сроду не было никаких ASH и ROT.
И кроме того, есть слова (например, "длина"), которые было бы неплохо не занимать и оставить пользователю.
В общем, утешает только то, что теперь есть технология, позволяющая относительно безболезненно делать массовые замены.
В КуМире все встроенные слова очень короткие, т.к. он учебный и нарочито убогий. В Обероне - ещё хуже. Встроенные идентификаторы совершенно неравномерно распределены по частоте применения, однако все они сделаны короткими, т.к. это было в те давние времена, когда памяти не хватало даже на идентификаторы. Но все уже привыкли и удлиннение вызовет протест!
Но в современной идеологии "чистого кода" слова должны быть подробными. А по моей идеологии, частые слова должны быть короткими, а редкие - подробными. Да ещё и на русском, в котором, ессно, сроду не было никаких ASH и ROT.
И кроме того, есть слова (например, "длина"), которые было бы неплохо не занимать и оставить пользователю.
В общем, утешает только то, что теперь есть технология, позволяющая относительно безболезненно делать массовые замены.
Re: дневник Яос
- Поспешил я... (но в будущем, авось, сгодится)))
А вот эти строки могут спокойно попасть под сокращения:
А если "идентуйИменами", или "идентуйПутями"... (?)
Учитывая, что идентификатор — это и есть некий "суррогат имени", то налицо - тавтология (переименуйИменаторы).
У резидента и президента - один корень идентификации; — "идент", который и идентифицирует их представительство в соответствующих кругах.
Re: дневник Яос
Про маркдаун - понял.
Эти ключи компилятора редко используются, их необязательно сокращать.
Эти ключи компилятора редко используются, их необязательно сокращать.
Re: дневник Яос
Кумиризация языка отменена. Причина - она никуда не попала. Есть спрос на две вещи:
* переходный язык от программирования блоками к текстовому, близкий к Паскалю и пригодный для работы с исполнителями
В этом случае образцом, от к-рого нужно не отстать, является Scratch, где слова в командах - полные и без сокращений, либо PascalABC, а это богатый язык, в котором сокращение до 3 букв узкого набора понятий, нужных в КуМире (очевидно, в ущерб остальным) не имеет значения. Кроме того, переход происходит не от КуМира и совместимость с КуМиром не имеет значения.
* роботы Лего
В этом случае краткость отдельного набора ключевых вообще никакого значения не имеет.
Делать конкурента КуМиру нет большого смысла. Мы уже выяснили, что язык существенно другой, по удобству именно для совсем базового уровня КуМир превосходить будет дорого, т.к. там много сделано для удобства.
* переходный язык от программирования блоками к текстовому, близкий к Паскалю и пригодный для работы с исполнителями
В этом случае образцом, от к-рого нужно не отстать, является Scratch, где слова в командах - полные и без сокращений, либо PascalABC, а это богатый язык, в котором сокращение до 3 букв узкого набора понятий, нужных в КуМире (очевидно, в ущерб остальным) не имеет значения. Кроме того, переход происходит не от КуМира и совместимость с КуМиром не имеет значения.
* роботы Лего
В этом случае краткость отдельного набора ключевых вообще никакого значения не имеет.
Делать конкурента КуМиру нет большого смысла. Мы уже выяснили, что язык существенно другой, по удобству именно для совсем базового уровня КуМир превосходить будет дорого, т.к. там много сделано для удобства.
Re: дневник Яос
Что-то я себя сам пока не очень убедил и слегка выпал из контекста... Т.е. кумиризация отменяется не полностью, потому что циклы, "нач", "кон" и "всё" выглядят вполне разумно.
Re: дневник Яос
Немного попереводил встроенные имена. Смирился с их ужасным видом.
Re: дневник Яос
Вчера пытался собрать переведённый ЯОС, правлю вновь всплывшие проблемы, появившиеся из-за того, что движок перевода не всё правильно обрабатывает. Попутно немного добавлял/менял переводы.
Re: дневник Яос
Правлю дичайшую багу, связанную с кешированием результатов работы компилятора и переводчика. По сути дела, на это ушла вся последняя неделя (т.е. свободное от работы время, к-рого оставалось маловато). При этом перевёл много встроенных имён (чтобы было проще её локализовать). Мне не нравится, как всё это в итоге выглядит, но "не стреляйте в пианиста". Видимо, скоро будут новые цифры по степени кирилличности.
При этом, названия встроенных конструкций приближены к КуМиру. Обозначение конца конструкции как "кн" почему-то вызывало постоянную критику, хотя я по-прежнему считаю, что это название было лучше любого другого, и замена его на трёхбуквенные "кон" или "всё" на самом деле большая потеря в плотности текста. Но уж тут как получается.
При этом, названия встроенных конструкций приближены к КуМиру. Обозначение конца конструкции как "кн" почему-то вызывало постоянную критику, хотя я по-прежнему считаю, что это название было лучше любого другого, и замена его на трёхбуквенные "кон" или "всё" на самом деле большая потеря в плотности текста. Но уж тут как получается.
Re: дневник Яос
Багу вроде поправил, но прорыв в кириллизации отменяется (или я неправильно померял). Почему-то осталось 22%. Посмотрим потом. Смиряюсь с тем, что машинно-зависимые типы останутся надолго, думаю о более коротких названиях для них. Немного поправил парсер редактора. Пока всё же не перевожу на русский, нужно, чтобы переводы ещё устоялись.
Re: дневник Яос
Заменял "литеру" на "символ", а также начал переводить один из основополагающих модулей - Streams.
Re: дневник Яос
Продолжается перевод модуля Streams. Между тем, я уволился из прекрасного стартапа, где всё было хорошо до того момента, пока меня не попросили приостановить свой проект, чтобы он не мешал работе.
Re: дневник Яос
Модуль Streams вроде доперевёл, правлю ошибки по мелочи. Сделал "переход к определению" для многих (не для всех) встроенных типов и процедур - открывается как бы модуль, но на самом деле это файл справки. Поскольку после перевода встроенных процедур я многое в тексте сам перестал понимать :)
Re: дневник Яос
ЯОС собралась с русскоязычными потоками, индекс кирилличности достиг 26.7%. Однако нашлась ошибка в движке перевода - буду править, а потом придётся, видимо, всё повторить.
Re: дневник Яос
При попытке перевести ещё более фундаментальный модуль KernelLog столкнулся с местом, где двухъязычность ещё не реализована.
Пытаюсь чинить, план действий есть, слегка продвинулся по нему.
Пытаюсь чинить, план действий есть, слегка продвинулся по нему.
Re: дневник Яос
Нет, они заявили своё недовольство, что я занимаюсь своим проектом, и даже то, что это не в рабочее время, их не убедило. Типа я буду уставать и мне не будет хватать сил на работу.
Re: дневник Яос
Перевёл модуль KernelLog, вот он:
https://gitlab.com/budden/ja-o-s/-/blob ... nelLog.Mod
(переведён только интерфейс)
Индекс кирилличности 28,2%, однако движок перевода не совсем работает - приходится пока что кое-что делать руками. Правлю. Данная проблема всплыла по той причине, что вызовы процедуры из этого модуля подставляются компилятором в генерируемый код особым образом, а сами процедуры при этом ищутся по имени модуля и процедуры. Ранее не было учтено, что эти случаи требуют перевода.
https://gitlab.com/budden/ja-o-s/-/blob ... nelLog.Mod
(переведён только интерфейс)
Индекс кирилличности 28,2%, однако движок перевода не совсем работает - приходится пока что кое-что делать руками. Правлю. Данная проблема всплыла по той причине, что вызовы процедуры из этого модуля подставляются компилятором в генерируемый код особым образом, а сами процедуры при этом ищутся по имени модуля и процедуры. Ранее не было учтено, что эти случаи требуют перевода.
Re: дневник Яос
Вроде починил движок перевода, теперь, поскольку явных идей нет, хочу сделать что-то типа лиспового отладчика. Естественно, полностью такой же не выйдет ввиду ограничений языка и рантайма, но хотя бы инспектировать стек должно стать намного легче. А также нужно доехать до места, где лежит RPi и ещё раз, более вдумчиво, попробовать на ней оживить существующую сборку A2.
Re: дневник Яос
Внезапно сделал минимальный инспектор и даже интегрировал с чем-нибудь, и даже завёл встроенную процедуру для его вызова. Теперь можно остановить (почти) любую активность и изучить её стек, вставив в код вызов встроенной процедуры "Инспекция". Конечно, не хватает ещё вычисления выражений в текущем кадре стека, как в нормальных отладчиках, но это уже проект. Нужно доделать тягомотные переводы для модулей Reflection, PodrobnajaPechatq и Trace и, видимо, заниматься портированием на ARM вплотную. Неделю я уже без работы отдохнул, много отдыхать не выйдет.
Ещё думаю, не сделать ли виртуальную машину, чтобы можно было внутри A2 запускать A2. В т.ч. решить проблему хранения больших баз данных в своих отдельных кучах, чтобы большой размер кучи не мешал остальным приложениям.
Ещё думаю, не сделать ли виртуальную машину, чтобы можно было внутри A2 запускать A2. В т.ч. решить проблему хранения больших баз данных в своих отдельных кучах, чтобы большой размер кучи не мешал остальным приложениям.
Re: дневник Яос
Перевёл ещё один фундаментальный модуль, Trace. Индекс кирилличности 28.3%. Видимо, жирные куски теперь не так скоро попадутся. Потоки и логЯдра - это были очень жирные модули с массой клиентов. Так или иначе, индекс кирилличности за этот год вырос на 10%. Если и дальше продолжать в том же темпе, то через каких-нибудь 10 лет перевод ЯОС на русский язык будет завершён. Хотя понятно, что дальше будет медленнее, поскольку богатые месторождения вырабатыватся первыми, а потом порода становится более тощей. В нашем случае основные богатства уже извлечены на-гора.
Re: дневник Яос
Есть определённые успехи с RPi2, см. соседние темы.
Re: дневник Яос
Версия под RPi частично запустилось в qemu. Хотя похоже, что она падает в QEMU иначе, чем на настоящей плате, это, конечно же, плохо.
Re: дневник Яос
Добился идентичного поведения.
Re: дневник Яос
Описана работа с Raspberry Pi 2 b v 1.1 : https://gitlab.com/budden/ja-o-s/-/comm ... d611bc58a0
Re: дневник Яос
Запустил ЯОС на Zybo (по-прежнему без периферийных устройств).
https://gitlab.com/budden/ja-o-s/-/tree/Zybo-Z710-ЯОС-2
https://gitlab.com/budden/ja-o-s/-/tree/Zybo-Z710-ЯОС-2
Re: дневник Яос
Тяжкую работу с железом отложил, теперь - макросы. А для них нужен интерпретатор. Занялся его оживлением, успехи пока скромные.
Re: дневник Яос
Начал добавлять предупреждение об опасном преобразовании между типами адресВПамяти и размерМЗ и как-то завяз в этом. Компилятор с моими изменения падает в самых неприятных местах. А уже 10-е... Видимо, надо прогнать только те файлы, которые надо, этим компилятором, найти проблемное место и откатить все эти изменения. В другой раз, когда будет больше времени и сил. Единственное, в одном месте локализовалось, что типы не преобразовались, хотя должны были. Может через это как-то удастся раскрутить цепочку того, где я что сломал.
Re: дневник Яос
Ну вот, по макросам, казалось бы, всё сделано, а на самом деле ещё пахать и пахать, и время заканчивается.
Re: дневник Яос
Макросы очередной раз почти сделаны, т.е. имеется пример, который мог бы быть реально полезным, если в нём ещё исправить какое-то количество багов... Однако всё ещё есть куча проблем.
Re: дневник Яос
Код почти стабилизирован после возмущений, внесённых в него макросами. В значительной степени, хотя не до конца, привёл в порядок описание языка после переименований последней пары месяцев. Заодно поправил одну ошибку в отладчике, из-за которой он падал, и сделал одно улучшение. Однако отладчик всё равно постоянно зависает и это отвратительно.
Re: дневник Яос
Существенно поменял отладчик, можно сказать, совершил прорыв в контролируемости того, что там происходит. Не проверял в реальном бою, но на тестовом файлике кардинальные улучшения. Теперь есть предпосылки для того, чтобы реализовать удалённую отладку. Хотя тут будет немало работы по моделированию метаданных целевой системы - ведь в настоящее время отладчик берёт модули прямо из той системы, которую мы изучаем. А если мы с Win32 будем отлаживать систему, работающую на RPi, то метаданные у этих систем будут совсем разные. Так что этот проект ещё, можно сказать, далеко впереди. Ну и соответственно нужно разделить отладчик на слои - командный интерфейс отдельно, гуй отдельно. Пока что там всё смешано.
Ну и в целом план подготовки к выступлению практически выполнен. Остаётся сделать выпуск и, собственно, подготовить само выступление.
Ну и в целом план подготовки к выступлению практически выполнен. Остаётся сделать выпуск и, собственно, подготовить само выступление.
Re: дневник Яос
Вроде сделал, чтобы в распечатке стека и в отладчике показывался "сам" объект для методов объектов. Беэ этого было изрядно неудобно.
Изменения, внесённые в компилятор, явно за пределами моего понимания. Система этим компилятором дважды пересобралась и работает, но кто знает, какие грабли ещё ждут впереди...
Отладчик проверен в бою, периодически что-то происходит нехорошее, но в целом более-менее работоспособен.
Изменения, внесённые в компилятор, явно за пределами моего понимания. Система этим компилятором дважды пересобралась и работает, но кто знает, какие грабли ещё ждут впереди...
Отладчик проверен в бою, периодически что-то происходит нехорошее, но в целом более-менее работоспособен.
Re: дневник Яос
По Alt-Enter открывается "меню окна", подобно тому, как работает Alt-пробел в Windows. Дальше можно нажать 4 (на левую половину экрана), 5 (на ввесь экран) или 6 (на правую). Наверное, для полноты картины нужно все новые окна сразу ставить на левую половину экрана, а там дальше пользователь уже пусть сам размещает. И, конечно, в это меню нужно ещё несколько вариантов, но там получились ужасные повторы кода, и кроме того, меню будет слишком длинным. Не знаю, как быть пока что. Но уже большой шаг вперёд - я мечтал о возможности делать окно на полэкрана с самого начала проекта и вот наконец-то. Посмотрим, какие подводные камни всплывут...
Re: дневник Яос
Движемся в направлении симв32
Re: дневник Яос
Всё ещё недоехали. Казалось бы, успех вот он, но в самом конце, как это часто бывает, возникает последовательность ошибок всё возрастающей сложности. Надеюсь, не бесконечная. Во всяком случае, починил под это дело отладчик - он теперь работает лучше, чем когда либо, поскольку исправлена ошибка в логике работы с точками останова. Хотя падает всё равно с хорошей частотой. Также улучшена отладочная печать узлов синт.дерева. Ошибки в компиляторе постепенно правлю, хотя сейчас нашёл весьма странный кусок кода из старого (A2-шного) - теперь надо посмотреть, что он означает.
Re: дневник Яос
Начал внедрять симв32 в модуль Texts - уже не уверен, что стоило начинать. Нужно перешагнуть пропасть с тысячами изменений в более чем 10 модулях. Достаточно одной ошибки - и система просто не заработает. Сегодня, наверное, уже изменений 500 сделал и неизвестно сколько ещё впереди.
Re: дневник Яос
Сделал встроенную процедуру пПиши, которая выводит в любом месте любой указатель на запись вместе с полями. Раньше такая процедура была в модуле "к", неудобство состояло в том, что нужно было подключать/отключать этот модуль и сигнатура исследуемого модуля менялась. Теперь необходимость в подключении модуля "к" отпала.
Помимо этого, в прошлый день (кажется, это была пятница), перенёс из A2 возможность определять переменные в теле кода, как это принято в современных языка, а не только в начале процедуры, как это принято в языках Паскаль-семейства. Теперь можно писать так:
Помимо этого, в прошлый день (кажется, это была пятница), перенёс из A2 возможность определять переменные в теле кода, как это принято в современных языка, а не только в начале процедуры, как это принято в языках Паскаль-семейства. Теперь можно писать так:
Код: Выделить всё
модуль Proba;
(* Proba.Дей ~ *)
использует Strings, StringsUCS32;
тип з = окласс
перем пп : цел32;
вв : Strings.String кон з;
проц Дей*;
нач
перем Строка8 := Strings.NewString("2") : Strings.String;
Строка8 := Строка8 + 2;
перем Строка := StringsUCS32.NewString(Лит32("2")) : StringsUCS32.String;
Строка := Строка + 2;
копируйСтрокуДо0(Строка^,Строка^);
перем эз : з;
нов(эз);
эз.пп := 4;
эз.вв := Strings.NewString("Куку");
пПиши(эз,Строка^);
кон Дей;
кон Proba.
Re: дневник Яос
Стоило починить парсер среды, чтобы он понимал макросы, исчез с экрана красный цвет и настроение сразу улучшилось. Возникло ощущение, что я победил макросы, хотя ещё час назад было такое полууныние. Может и красный экран со стектрейсом нужно сделать другого цвета? А то как его вижу, сразу противно. Никогда, честно сказать, не думал, что цветовая гамма на меня как-то влияет.
А может быть, дело в другом, не знаю.
А может быть, дело в другом, не знаю.
Re: дневник Яос
Вроде доделал метапроцедуры в минимально пригодном для показа виде. Не лучший час для принятия решений, но похоже, что надо теперь попереводить, хотя бы уж до конца месяца. А то перевод совсем просел.
Re: дневник Яос
Начал делать команду, показывающую перевод имени, на котором стоит курсор в ИСР. Не придумал, как интегрировать - можно сделать по-разному,
а также неплохо бы к этой команде ещё прилепить показ всех (пере)определений данного метода по иерархии с возможностью перехода к любому из них (то, что раньше не знал, как сделать, вроде так получается сделать). Соответственно, самое простое здесь - это выводить в лог ядра в виде команд.
а также неплохо бы к этой команде ещё прилепить показ всех (пере)определений данного метода по иерархии с возможностью перехода к любому из них (то, что раньше не знал, как сделать, вроде так получается сделать). Соответственно, самое простое здесь - это выводить в лог ядра в виде команд.
Re: дневник Яос
Немного попереводил.
Re: дневник Яос
Перевёл (не полностью) модуль Builtins - самый первый по порядку модуль.
Правда, он мало используется.
Индекс кирилличности - 29.03%, а на графике последний раз был 28.88% - негусто.
Надо дописать программку для замера доли слов и эту цифру тоже на график вывести - теперь
доля русских букв будет расти всё медленнее, а доля русских слов ещё долго будет
расти с одинаковой скоростью.
Правда, он мало используется.
Индекс кирилличности - 29.03%, а на графике последний раз был 28.88% - негусто.
Надо дописать программку для замера доли слов и эту цифру тоже на график вывести - теперь
доля русских букв будет расти всё медленнее, а доля русских слов ещё долго будет
расти с одинаковой скоростью.
Re: дневник Яос
Начал переводить модуль Machine. Улучшил работу веб-браузера (всё ещё только http).
Re: дневник Яос
Кое-как доделал переводы модуля Machine/ЭВМ для версии Windows, открыл версию для BIOS32, а там, оказывается, есть ещё объём работы...
Re: дневник Яос
Написал письмо в МЦСТ, где предлагаю им взять меня на работу и дать мне 10 человек подчинённых. Ха-ха.
Перевод модуля ЭВМ/Machine упёрся в то, что переводчик не заходит внутрь машинного кода, соответственно, после перевода всё ломается.
Перевод модуля ЭВМ/Machine упёрся в то, что переводчик не заходит внутрь машинного кода, соответственно, после перевода всё ломается.
Re: дневник Яос
С грехом на 9/10 перевёл модуль Machine - скорее можно сказать "показал присутствие", чем "перевёл". Хотя если посмотреть на использование в модуле Heaps - то вроде всё выглядит переведённым. Проблема с этим модулем была в двух вещах:
* во-первых, модулей много для разной платформы и архитектуры
* во-вторых, там есть машкод, а мы его не умеем переводить. Это сильно замедлило дело, но в итоге
теперь компилятор ругается, когда в машкоде упоминается что-то, имеющее перевод. В итоге, правда, пришлось
стереть какое-то количество уже готовых переводов, в основном это были переводы имён параметров.
* во-первых, модулей много для разной платформы и архитектуры
* во-вторых, там есть машкод, а мы его не умеем переводить. Это сильно замедлило дело, но в итоге
теперь компилятор ругается, когда в машкоде упоминается что-то, имеющее перевод. В итоге, правда, пришлось
стереть какое-то количество уже готовых переводов, в основном это были переводы имён параметров.
Re: дневник Яос
Реализовал "тернарное если", если3(условие, выражениеПриИстине, выражениеПриЛжи) - пока только для одного компилятора и только в англоязычной ветке.
Re: дневник Яос
Починил загрузку с LiveCD.
Re: дневник Яос
Начал переводить модуль UCS32
Re: дневник Яос
Продолжил.
Re: дневник Яос
Вроде доделал UCS2 = Ю16, начал String = Строки8.
Клонировал проект на git.org.ru и отправил последние изменения туда.
Клонировал проект на git.org.ru и отправил последние изменения туда.
Re: дневник Яос
Перевёл 4 модуля, индекс кирилличности - 30.43%
Re: дневник Яос
Дочитал код загрузки кооп.версии и выделил все куски, написанные на ассемблере.
Re: дневник Яос
Продолжаю чтение загрузки Zynq. Что-то там много всего...
Re: дневник Яос
Похоже, что зависаем в ReadMemoryLayout, хотя казалось бы, где там зависать?
Надо сделать именованные процедуры Breakpoint1, BreakpointN и по ним размечать трассу с целью
поиска, где зависли. Ы?
Надо сделать именованные процедуры Breakpoint1, BreakpointN и по ним размечать трассу с целью
поиска, где зависли. Ы?
Re: дневник Яос
По RPi ещё с тех пор продвинулся, теперь падаем на утверждении где-то в чтении памяти (уже не помню, но надеюсь, что где-то записано).
Сегодня перешёл в другую ветку и сделал, чтобы подробная печать работала на 64-разрядах, в сборках Linux64 и Win64.
См. https://tvoygit.ru/budden/ja-o-s/src/br ... ная-печать
Сегодня перешёл в другую ветку и сделал, чтобы подробная печать работала на 64-разрядах, в сборках Linux64 и Win64.
См. https://tvoygit.ru/budden/ja-o-s/src/br ... ная-печать
Re: дневник Яос
Выложил новую сборку под Линукс.
Re: дневник Яос
На форуме можно подсвечивать код на языке ЯОС, с помощью кнопочке "JAOS". Вот так:
Код: Выделить всё
модуль ааа;
проц бб(); (* комментарий *)
(* вложенный
(* комментарий *) *)
нач
возврат 4 кон бб;
кон ааа.
Re: дневник Яос
Пытаюсь запустить переводчик всего под линуксом, и он спонтанно зависает. Место, где зависает, всегда одно и то же. Но плохо это всё выглядит, т.к. он зависает через значительное время.
Re: дневник Яос
Ура, повезло - с помощью диспетчера задач удалось неплохо локализовать проблему. В общем-то это во многом случайность, что именно этот процесс оказался в первой строчке и я обратил на него внимание. Команда СборщикВыпускаЯОС.Скомпилируй:
Код: Выделить всё
Unix.CondWait:72 pc=134581358 [0000000008058C6EH] = 134581286 + 72 crc=72910ABE
con= [@24] 00007FF470001F40
mtx= [@16] 00007FF46C000C00
Objects.Await:522 pc=134821788 [000000000809379CH] = 134821266 + 522 crc=55A1660C
cond= [@40] UnixFiles.WaitClose.@AwaitProcedure0
slink= [@32] 00007FF44FAA6A98
obj= [@24] 000000000810B0F0 (Modules.Module)
flags= [@16] {}
hdr= [@-16] 000000000810B070 (Heaps.ProtRecBlockDesc)
p= [@-24] 00007FF4039C0940 (Objects.Process)
c= [@-32] 0000000000000000 NIL
lock= [@-40] 00007FF48958B200 (Objects.LockT)
UnixFiles.WaitClose:121 pc=135308883 [000000000810A653H] = 135308762 + 121 crc=F85F95DA
no= [@16] -1816
UnixFiles.UnixOpen:239 pc=135288446 [000000000810567EH] = 135288207 + 239 crc=F85F95DA
path= [@32] 00007FF44FAA6B08
flags= [@24] {1}
permissions= [@16] 0
fd= [@-12] -1
fo= [@-16] -1816
errno= [@-20] 24
failure= [@-21] ложь
UnixFiles.UnixFileSystem.Old0:698 pc=135286270 [0000000008104DFEH] = 135285572 + 698 crc=F85F95DA
name= [@16] "FractalDemo.Mod"#00""
RESULT=00007FF44FAA6DD8-> [@56] 0000000000000000 NIL
@Self= [@40] 00007FF489545A50 (UnixFiles.UnixFileSystem)
f= [@-16] 0000000000000000 NIL
stat= [@-160] ...(Unix.Status)
fd= [@-164] 0
r= [@-168] 0
pos= [@-172] 82
oflags= [@-176] {38, 36, 33, 1}
nextdir= [@-432] "/y/jaos/Linux64/xym-i-Dpi"#00""
path= [@-688] "/y/jaos/source/FractalDemo.Mod"#00""
@hiddenIRVar0= [@-696] 0000000000000000 NIL
UnixFiles.AliasFileSystem.Old0:59 pc=135281146 [00000000081039FAH] = 135281087 + 59 crc=F85F95DA
name= [@16] "FractalDemo.Mod"#00""
RESULT=00007FF44FAA6E20-> [@64] 0000000000000000 NIL
@Self= [@40] 00007FF489545B00 (UnixFiles.AliasFileSystem)
f= [@-16] 0000000000000000 NIL
Files.OpenOld:221 pc=135204539 [00000000080F0EBBH] = 135204318 + 221 crc=8F46417A
enum= [@40] 00007FF4895451C0 (Files.FileSearcher)
fs= [@32] 00007FF489545B00 (UnixFiles.AliasFileSystem)
fname= [@16] "FractalDemo.Mod"#00""
RESULT=00007FF44FAA6E80-> [@360] 0000000000000000 NIL
f= [@-16] 0000000000000000 NIL
key= [@-20] 0
Files.Old:345 pc=135205245 [00000000080F117DH] = 135204900 + 345 crc=8F46417A
name= [@16] "FractalDemo.Mod"#00""
RESULT=00007FF44FAA6FF0-> [@-837622864] 0000000000000000 NIL
fs= [@-16] 00007FF489545B00 (UnixFiles.AliasFileSystem)
f= [@-24] 0000000000000000 NIL
prefix= [@-40] ""#00""
fname= [@-312] "FractalDemo.Mod"#00""
@hiddenIRVar0= [@-320] 0000000000000000 NIL
СборщикВыпускаЯОС.ДанныеОб1Конфигурации.ПроверьНаличиеФайловИПрочтиОбъявленияИспользования:273 pc=140687342532721 [00007FF453137871H] = 140687342532448 + 273 crc=ECEE17A0
Re: дневник Яос
В чём точно дело - не совсем ясно, но похоже, что мы упираемся в предел числа открытых файлов. "Прекрасная" идея закрывать файлы в финализаторах нас подвела. Ищем, как закрыть файлы явно и засунем это в компилятор.
Код: Выделить всё
(** Close files -- paradox: open (old) file and call Close method. Intended for systems in a host environment to explicitely release a file handle. *)
проц CloseFiles*(context : Commands.Context); (** [Options] {file} ~ *)
перем
filelist : СписокИмёнФайлов;
nofFiles, n : цел64; ndone : цел32;
file: Files.File;
нач
nofFiles := GetFileList(context, filelist);
ndone := 0;
нцДля n := 0 до filelist.разм - 1 делай
file := Files.Old(filelist.э[n]^);
если file # НУЛЬ то file.Close всё;
увел(n);
кц;
кон CloseFiles;
Последний раз редактировалось БудДен 07.08.22 12:42, всего редактировалось 1 раз.
Re: дневник Яос
Похоже, что дело было в вызове GC посреди перебора файлов - там есть специальная оговорка. В общем, закрытие файлов вроде помогает. Всё-таки A2 - божественная игрушка. Я думал, что только на локализацию проблемы могут уйти дни, потому что нужно будет тупо всё утыкивать трассировкой (и ошибка может от этого уехать в другое место) а внезапно всё решилось за час.
- Лис [Вежливый]
- Сообщения: 561
- Зарегистрирован: 08.10.18 13:32
Re: дневник Яос
Хотел тебе на твоём форуме в личку написать, но не нашел, как.
В общем, вот:
http://plana.mybb.ru/viewtopic.php?id=1249#p8255
В общем, вот:
http://plana.mybb.ru/viewtopic.php?id=1249#p8255
Re: дневник Яос
Тут есть темы про Эльбрус, их вроде поиском можно найти. Коротко ситуация с Эльбрусом такова, что я под него починил загрузочный iso-образ, и загрузочную флешку. Нашлись добрые люди, которые попробовали запустить на железке. Однако ничего не заработало. Сейчас знания о загрузке несколько расширились, можно ещё раз попробовать (бывают легко решаемые проблемы с видеорежимом).
Но это всё x86/x64. Портировать на собственно Эльбрус - я пока не понимаю, как. Насколько я понял, информации о системе команд было недостаточно, потом ситуация улучшалась, но насколько она улучшилась - я не отследил. В любом случае, я бы начал с порта на MIPS, который можно забесплатно гонять в эмуляторе.
Доступ по ssh к серверам недостаточен, т.к. там нет контроля над железкой. Максимум, что можно тут сделать - это портировать в режиме приложения (сделать кодогенератор под Эльбрус и тогда будет ЯОС для Эльбруса, запускаемый под Linux). В принципе это может быть хорошим первым шагом, но доступ нужен всё-таки к какому-нибудь vnc, т.к. в текстовом режиме с ЯОС почти ничего сделать нельзя. По идее, портирование на новую платформу, на которой уже работает Linux, наверное и нужно делать в два этапа - сначала режим приложения, потом режим ОС. Это позволит разделить разработку бекенда компилятора и разработку слоя совместимости с железом
У меня нет ресурсов этим заниматься - у меня пока в планах только продолжение перевода и дальше развитие управления памятью.
Но это всё x86/x64. Портировать на собственно Эльбрус - я пока не понимаю, как. Насколько я понял, информации о системе команд было недостаточно, потом ситуация улучшалась, но насколько она улучшилась - я не отследил. В любом случае, я бы начал с порта на MIPS, который можно забесплатно гонять в эмуляторе.
Доступ по ssh к серверам недостаточен, т.к. там нет контроля над железкой. Максимум, что можно тут сделать - это портировать в режиме приложения (сделать кодогенератор под Эльбрус и тогда будет ЯОС для Эльбруса, запускаемый под Linux). В принципе это может быть хорошим первым шагом, но доступ нужен всё-таки к какому-нибудь vnc, т.к. в текстовом режиме с ЯОС почти ничего сделать нельзя. По идее, портирование на новую платформу, на которой уже работает Linux, наверное и нужно делать в два этапа - сначала режим приложения, потом режим ОС. Это позволит разделить разработку бекенда компилятора и разработку слоя совместимости с железом
У меня нет ресурсов этим заниматься - у меня пока в планах только продолжение перевода и дальше развитие управления памятью.
Re: дневник Яос
Перевёл модуль Heaps/Кучи (только интерфейс, да и то не весь). Индекс кирилличности - 30.62% (а неплохо!)
Re: дневник Яос
Немного подправил парсер редактора. Теперь он не падает на объявлении переменных внутри блока.
Однако и не разбирает их должным образом - переменная, определённая внутри блока, показывается красной.
Хотя цель была в другом - научиться замерять потребление CPU отдельными процессами. Сейчас под Linux показывается
какая-то чушь (потребление cpu показывается одинаковым для всех тредов). Треды в юникс-версии сделаны на базе pthreads, и по
идее оно должно работать как-то так:
https://stackoverflow.com/questions/449 ... of-threads
Если это удастся, можно будет отличать активно вычисляющие треды от прочих - это часто нужно.
Неплохо бы ещё сделать, чтобы работало убийство тредов в unix-версии. В win оно нормально работает, а в линуксе ЯОС падает.
Однако и не разбирает их должным образом - переменная, определённая внутри блока, показывается красной.
Хотя цель была в другом - научиться замерять потребление CPU отдельными процессами. Сейчас под Linux показывается
какая-то чушь (потребление cpu показывается одинаковым для всех тредов). Треды в юникс-версии сделаны на базе pthreads, и по
идее оно должно работать как-то так:
https://stackoverflow.com/questions/449 ... of-threads
Если это удастся, можно будет отличать активно вычисляющие треды от прочих - это часто нужно.
Неплохо бы ещё сделать, чтобы работало убийство тредов в unix-версии. В win оно нормально работает, а в линуксе ЯОС падает.
Re: дневник Яос
Потихоньку продолжаю работу над обычной версией RPI. Я постепенно узнаю (того не желая) всё больше деталей об устройстве ARM и A2/ЯОС в ней, но успеха пока нет. Проблема на данный момент в устройстве виртуальной памяти. Раскладка памяти в RPI и Zynq разная, и похоже, что правильный способ работы - разный, в частности, отличаются значения флагов. Кроме того, реализаци для Zynq - кратно сложнее, чем кооперативная. В сумме, получается, что сложный код, аналогичный работающему для Zynq, у меня в наличии не имеется. Нужно либо упрощать версию Zynq до уровня RPi, либо добывать недостающее. Пока, естественно, пытаюсь пойти первым путём.
Re: дневник Яос
Продолжаю работу над RPi, всё плохо, но таймер вроде бы запустился. Хотя кто его знает.
Re: дневник Яос
Дошла до конца инициализация ядра с вытесняющей многозадачностью для RPi 2. Конечно, это мало о чём говорит - надо теперь сделать, чтобы оно действительно работало, т.е. чтобы работали и переключались процессы, далее нужно доделать интерфейс таймеров, функцию Sleep хотя бы и ввод с клавиатуры. Перспективы, наверное, есть, поскольку и трассировка, и отладчик работают достаточно неплохо. Я решил ограничиться только одним ядром и не писать драйвер SD-карты. Также я попытался (не знаю, насколько успешно) отключить все возможные виды кеширования. Для тестов работоспособности компилятора этого должно в какой-то степени хватить.