Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум разработчиков электроники ELECTRONIX.ru _ Программирование _ Макрогенератор и исходник

Автор: _Pasha Sep 27 2016, 05:24

Привет.
Всем известна такая штучка как http://electronix.ru/redirect.php?https://www.python.org/about/success/cog/
С другой стороны, люди могут не жаловать такой подход и обходиться автогенерируемыми файлами, которые потом инклюдятся в файл исходника.
С третьей стороны, этот cog-подобный подход может не ограничиваться одним языком(питон), может обладать полной настройкой всех своих служебных комбинаций символов.
Вот собсна, интересно мнение ув. ALL за/против.
Есть ли смысл увлечься макрогенераторами прямо в тексте исходника?

Автор: AHTOXA Sep 27 2016, 05:46

А зачем? В чём их фишка?
Я каждый раз, когда заходит разговор о таких генераторах, думаю для себя - "О, интересная штука! Надо будет применить". И ещё ни разу не применил - как-то не возникает необходимости.
Можете привести пример, когда использование такого генератора полезно/удобно? Я пока представил только какой-то многоязыковой проект, с едиными структурами данных. Ну, типа, дельфи и си.

Автор: AlexandrY Sep 27 2016, 07:02

Цитата(_Pasha @ Sep 27 2016, 08:24) *
Есть ли смысл увлечься макрогенераторами прямо в тексте исходника?


Двойная работа.
Сначала скрипт отладить отдельно, потом вставить в файл. При этом в самом скрипте быть ограниченным текстовым представлением.

Для WEB-а и облаков наверно это вариант. Поскольку там нет свободы выбора среды и надо приспосабливаться к тому что есть.

Для embedded где вся работа может делаться под Windows есть более производительные варианты.

Автор: _Pasha Sep 27 2016, 08:29

Цитата(AlexandrY @ Sep 27 2016, 10:02) *
Двойная работа.
Сначала скрипт отладить отдельно, потом вставить в файл. При этом в самом скрипте быть ограниченным текстовым представлением.

10 строк на питоне могут делать такую работу, что разница в представлении будет всегда в пользу текстового.
Цитата
Для embedded где вся работа может делаться под Windows есть более производительные варианты.

например?

Цитата(AHTOXA @ Sep 27 2016, 08:46) *
А зачем? В чём их фишка?
Я каждый раз, когда заходит разговор о таких генераторах, думаю для себя - "О, интересная штука! Надо будет применить". И ещё ни разу не применил - как-то не возникает необходимости.
Можете привести пример, когда использование такого генератора полезно/удобно? Я пока представил только какой-то многоязыковой проект, с едиными структурами данных. Ну, типа, дельфи и си.

я тоже ни разу не применял. я делаю #include "autogenerated.c"
и все что нужно генерить - генерится отдельно

дельфи + Си - использовал утилиту, ptoc


Автор: AlexandrY Sep 27 2016, 08:38

Цитата(_Pasha @ Sep 27 2016, 11:29) *
дельфи + Си - использовал утилиту, ptoc


Правильно. Чего ешё надо.
У ребят узкие web задачи. Они и обходятся питоном.
А в embedded надо и модель из Matlab-а сгенерить, и в ProcessorExpert сгенерить инициализацию, и базу параметров преобразовать сразу и в C-и, и в JSON и в MIB, и в HTML и в GUI.
Туча генераторов всяких. И на кой еще COG грузить на себя?

Автор: _Pasha Sep 27 2016, 10:05

Наверное, ближе всего к методу раскрутки такой инструмент

Автор: _Pasha Sep 28 2016, 10:26

вот например

Код
/*++(input)
u-set "u" parameter
d-set "d" parameter
k-set "k" parameter
--*/

/*++
#!/usr/bin/python
from Macro_For_C import *
with Source("input") as f:
    txt = f.readlines()
    f.close()
out=Source("out1")
out2=Source("out2")
for x in txt:
    out.print("printf(""{0} \n\r"")".format(x))
    out2.print("case '{0}': <do something>; break;//{1}\n\r".format(x[0],x[1:]))
--*/

void help(void)
{
//++(out1)
//--
}
void console(char c){
    switch(c)
    {
    //++(out2)
    //--
        default:
            break;
    }
}

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

ps поправил, заменил /*++(тэг)... --*/ на соответственно //++ и --//
а то нелогично как-то

Автор: AlexandrY Sep 28 2016, 10:43

Цитата(_Pasha @ Sep 28 2016, 13:26) *
вот например


Чё, интересно, парсер будет делать с таким исходником.
Скорее всего ничего, просто проигнорирует.
Для парсинга и анализа такой исходник потерян.

Автор: _Pasha Sep 28 2016, 11:08

Чуть поправлю фрагмент кода.

Цитата(AlexandrY @ Sep 28 2016, 13:43) *
Чё, интересно, парсер будет делать с таким исходником.
Скорее всего ничего, просто проигнорирует.
Для парсинга и анализа такой исходник потерян.

А, так здесь подразумевается, что прогон через макрогенератор, - это отдельный этап, результаты генерации пишутся в места, отмеченные соотв. тэгами.
Далее, я так думаю, напечатанный в исходнике результат - помечается CRC32 и если юзер внес правки в уже сгенеренный код - обновлений при автогенерации не будет.
да и тэги можно удалить, "присвоив" результат
либо скомандовать clean самому макрогенератору - он удалит то что получил ранее
т.е. метод раскрутки чистой воды

Автор: AlexandrY Sep 28 2016, 12:32

Цитата(_Pasha @ Sep 28 2016, 14:08) *
т.е. метод раскрутки чистой воды


Что-то мне это словосочетание ни о чем не говорит.
А почему не метод закрутки? biggrin.gif

Автор: _Pasha Sep 28 2016, 13:37

Цитата(AlexandrY @ Sep 28 2016, 15:32) *
Что-то мне это словосочетание ни о чем не говорит.
А почему не метод закрутки? biggrin.gif

то меня занесло rolleyes.gif это метод только для постоения компиляторов применялся и там входной язык и выходной суть один и тот же.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)