макросы - план

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

макросы - план

Сообщение БудДен » 11.11.21 19:32

  • ✓ добавление в лексер символа макро вызова §
  • ✓ добавление в дерево узла "вызов макроса", подобно вызову процедуры
  • ✓ перелисовать интерпретатор
  • ✓ спец.версия парсера, к-рая делает разбор только макро-вызовов, а остальное оставляет двусвязным списком лексем (макро вызовы начинаются со спец.буквы)
  • ✓ печать лексем обратно - вроде у нас уже есть - текст выводится во всяком случае.
  • ✓ добавление макроса в компилятор - решено пока через интерпретатор
  • ✓ реализация макроса unless - сделан без sourcemaps
  • текст после end. - например, с помощью закладок на уровне потока.
  • что-то делать с тем, что интерпретатор не работает в кооперативной версии
Последний раз редактировалось БудДен 16.11.21 22:30, всего редактировалось 1 раз.

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

Re: макросы - план

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

Простроил большую часть цепочки для макросов, но:
  • ✓ литералы цепочек из цитат в тексте, подлежащем макрорасширению
  • ✓ литералы цепочек из цитат в тексте реализации макроса - решил через вынос шаблона в отдельный файл
  • ✓ в списке фрагментов нужно хранить не только макровызовы, но и находящееся между ними
  • ✓ находящееся между макровызовами нужно уметь выводить туда же, куда выводятся и результаты макрорасширения
  • ✓ нужен спец. костыль в интерпретатор, чтобы передавать туда и обратно наши данные из внешнего мира - он описан в MacroИПП.Mod - сделал TLS - КлючЛХА_данныеМакрорасширителя
  • gensym - перезапускать от начала файла, хотя это наверняка не сработает. Можно также требовать, чтобы вызовы макросов, требующих gensym, были именованными.
  • ✓ замена идентификатора на лексему или выражение
  • инфраструктура для вывода карты мест - частично готова
  • ✓ место в тексте должны быть способно указывать не только на поток чтения, но и на имя файла
  • ✓ выражения должны содержать ссылки на лексемы, с которых они начинаются и заканчиваются
  • ✓ перевод карты мест в юникод
  • переход от сгенерированного кода к исходному - попробовать в раздвоенном редакторе.
  • в дополнение к "цит_" сделать "предписание_", чтобы можно было передавать в код разобранные предписания (увы, начался ползучий фичуризм, и НЕЛЬЗЯ будет потом это сократить через систему типов в макровызовах, поскольку текст должен парситься без знания о смысле макросов). Либо нужно добавить в интерпретатор выражения для создания новых переменных.
Последний раз редактировалось БудДен 31.12.21 00:41, всего редактировалось 3 раза.

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

Re: макросы - план

Сообщение БудДен » 20.11.21 13:09

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

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

Re: макросы - план

Сообщение БудДен » 20.11.21 14:03

Итого, приостанавливаем. Задачи:
  • интегрировать макропарсер
  • чтоб работал обычный компилятор
  • перелисовать фокс
  • починить перевод

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

Re: макросы - план

Сообщение БудДен » 29.12.21 02:46

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

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

Re: макросы - план

Сообщение Лис [Вежливый] » 29.12.21 12:53

Всё сложно, контекст потерян
Ну так новым людям тоже сложно, по этой же причине. Контекста нет изначально, то есть не просто потеряли, но и небыло никогда.
А чтобы контекст не терялся, нужно лучше документировать. Как известно, документировать, как страна, мы не умеем. Даже ленинская библиотека использует PDF/A, т.е. стандарт на латинском алфавите.

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

Re: макросы - план

Сообщение БудДен » 29.12.21 20:50

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

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

Re: макросы - план

Сообщение Лис [Вежливый] » 30.12.21 00:04

Общие указания на то, что "что-то не в порядке", не слишком полезны
Но это ты говорил о том, что что-то не в порядке (а именно - какой-то там контекст, вроде бы он был потерян). Если такие заявления не слишком полезны, то просто не делай их. А меня не надо за хвост.

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

Re: макросы - план

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

Не в порядке в контексте данной задачи. А что, она кого-то интересует?

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

Re: макросы - план

Сообщение БудДен » 31.12.21 12:55

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

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

Re: макросы - план

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

Теперь две задачи - переход к мультиопределению и двухоконный просмотр. С чего начать? Видимо, с перехода
к мультиопределению - он давно уже нужен.

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

Re: макросы - план

Сообщение БудДен » 03.01.22 21:48

Сделал заготовку окошка для перехода к определению. Хотя можно сказать, что в основном буксовал.
✓ Теперь надо прочесть карту мест и сделать переход от мршм к ярм/Mod.

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

Re: макросы - план

Сообщение БудДен » 13.01.22 21:52

В общем, проект макросов пока призакрывается, то ли мне надо отдохнуть, то ли он зашёл в тупик.
Однако нужно сделать (уже давно напрашивается):

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

вырТип(массив 5 из симв32)
вырИмпорт(Потоки)
вырСсылкаНаПроцедуру(ЛогЯдра.пСтроку8)
со ссылкой на процедуру всё понятно - это то же, что и просто написать ЛогЯдра.пСтроку8.
вырТип может быть похож на SYSTEM.TYPECODE, но иметь смысл для всех типов, а не только для избранных.
Для неизбранных типов он может возвращать что угодно, например, какую-то особую запись, а в записи два поля - имя для печати и размер.
Короче, что-то вроде рефлексии. Важнее не начинка, а протянуть через тулчейн, чтобы можно было как-то оперировать с такими сущностями.
вырИмпорт соответственно тоже может возвращать какую-нибудь бесполезную или условно полезную запись, относящуюся к модулю. Главное, чтобы
можно было такие записи передавать как параметры, иметь переменную типа "ссылка на модуль" и т.п.

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

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

Re: макросы - план

Сообщение БудДен » 15.01.22 00:46

Наверное, ещё недельку помучаюсь с макросами, чтобы придать им хоть сколько-то осмысленную форму (до полезности всё же ещё далеко - не дотяну). Осталось:

* ✓ файлы мсм автоматически (без флагов) расширяются в мршм и затем компилируются - сделал в ИСР, в сборщике пока не буду
* ✓ их мы НЕ переводим на английский, они вообще могут компилироваться только в русском режиме - не будем их включать в сборку, вот и всё
* ✓ в режиме --английскиеИмена попытка компиляции мсм выдаёт ошибку
* (✓ не требует действий) зато мы добавляем файлы мршм в гит и переводим их
* ✓ также можно компилировать файлы мршм из ИСР
* ✓ сделать реальное, а не фиктивное имя мршм в ИСР (извлекать из имени текущего файла)
* сделать любой пример, хотя бы пузырёк
* ✓ сделать, чтобы вызов макроса не был красным
* ✓ (сделано на 2 с плюсом) синхронизация в направлении от мсм к мршм (сейчас есть только от мршм к мсм)


Может быть, это за неделю осилю, дальше надо будет записать видео и отложить их.

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

Поэтому мы не реализуем:
* идею про разбиение макрорасширения на чистое и грязное
* не будем доводить до ума навигацию (переход к любому исходнику макроса, а не только скачки между мсм и мршм) (сделал переход к
месту ошибки, даже если это не мршм, хотя это ещё не всё, что надо).
* не будем делать пример, похожий на A2-шный - хватит и пузырька пока что
* более красивое определение макросов - хватит и такого пока что уродливого (скажем про то, что надо допилить интерпретатор).
* расширения АО (описатели типов, литералы импортов, литералы цитат с навигацией для включения их в модули с определениями макросов)
Последний раз редактировалось БудДен 18.01.22 20:05, всего редактировалось 2 раза.

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

Re: макросы - план

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

Делаю пример. Остановился на том, что надо выводить инфу о том, какая или где процедура не найдена, а то как-то совсем уныло.

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

Re: макросы - план

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

В общем, прототип макросов готов, только они будут называться метапроцедурами. По идее ещё нужно отшлифовать показ, но это не к спеху. Переходим к виртуализации.

Ответить