Метапроцедуры vs (движок перевода и двухкомпиляторность)
Добавлено: 13.01.22 20:33
Жаль, что сообщество куда-то рассосалось, настал момент, когда нужен коллективный разум. Спустя примерно 2 месяца после начала работы над макросами Зоркий Глаз обнаружил, что в сарае нет одной стены, т.е. выяснилось, что текст с макросами не переводится движком перевода.
Подходы утром написал в телеграме:
* сделать двухъязычность в самом компиляторе, т.е. разрешать в любом месте писать Потоки.Писарь наравне со Streams.Writer.
- минус в том, что для поиска нужно будет искать и русский, и английский варианты.
* переводить макросы во время макрорасширения.
- минус в том, что вообще непонятно, что имеется в виду, это просто смутная идея
* ограничить вызовы макросов, чтобы они были похожи на вызовы функций, и воспринимать их так же при анализе кода.
- минус в сочетании усложнения и ослабления. Прежде всего, становится ясно, что не получится заменить макросами конструкции #если (препроцессор). Утешает то, что и в лиспе это не получается, т.к. там, кроме макросов, есть директивы препроцессора #+ . А раз в лиспе это нельзя, то нефиг и лезть. Здесь внезапно выясняется, что макросы в Си элегантны!
* ограничить _вызовы_ макросов, чтобы они были похожи на _определения_ классов, и так их воспринимать.
- выглядит более-менее жизнеспособным
* в модуле одинаковое слово переводится одинаково независимо от контекста.
- тоже выглядит жизнеспособным, хотя и не решает вопрос о составных именах (то, что в Си есть ##). Хотя тут можно выкрутиться несколькими способами. однако такие модули потребуют значительного рефакторинга, в худшем случае он будет нелокальным, а затронет и ИПП других модулей (поскольку это правило должно соблюдаться в модуле тотально). Особенно плохо, что если в нашем модуле "Клиент" используется "Модуль1.Имя" и "Модуль2.Имя", то возникает ограничение, требующее одинаковости перевода "Имя" в этих модулях и всё начинает сливаться в одну единую общую помойку. С другой стороны, конечно же, это может быть и большим плюсом, поскольку именование в коде становится более чётким. Но всё же это подрывает идею пространств имён.
Подходы утром написал в телеграме:
* сделать двухъязычность в самом компиляторе, т.е. разрешать в любом месте писать Потоки.Писарь наравне со Streams.Writer.
- минус в том, что для поиска нужно будет искать и русский, и английский варианты.
* переводить макросы во время макрорасширения.
- минус в том, что вообще непонятно, что имеется в виду, это просто смутная идея
* ограничить вызовы макросов, чтобы они были похожи на вызовы функций, и воспринимать их так же при анализе кода.
- минус в сочетании усложнения и ослабления. Прежде всего, становится ясно, что не получится заменить макросами конструкции #если (препроцессор). Утешает то, что и в лиспе это не получается, т.к. там, кроме макросов, есть директивы препроцессора #+ . А раз в лиспе это нельзя, то нефиг и лезть. Здесь внезапно выясняется, что макросы в Си элегантны!
* ограничить _вызовы_ макросов, чтобы они были похожи на _определения_ классов, и так их воспринимать.
- выглядит более-менее жизнеспособным
* в модуле одинаковое слово переводится одинаково независимо от контекста.
- тоже выглядит жизнеспособным, хотя и не решает вопрос о составных именах (то, что в Си есть ##). Хотя тут можно выкрутиться несколькими способами. однако такие модули потребуют значительного рефакторинга, в худшем случае он будет нелокальным, а затронет и ИПП других модулей (поскольку это правило должно соблюдаться в модуле тотально). Особенно плохо, что если в нашем модуле "Клиент" используется "Модуль1.Имя" и "Модуль2.Имя", то возникает ограничение, требующее одинаковости перевода "Имя" в этих модулях и всё начинает сливаться в одну единую общую помойку. С другой стороны, конечно же, это может быть и большим плюсом, поскольку именование в коде становится более чётким. Но всё же это подрывает идею пространств имён.