LINUX.ORG.RU

cogen alpha release

 


0

1

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

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

вот как запускать. ./cogenwr.py -iix3=foo -g generator -o dir здесь

  • -iix3 это файл, содержащй описание интерфейса
  • -g это info файл, описывающий что сгенерировать и
  • -o это куда положить результат
  • --help (на всякий) понятно что :)

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

описание формата info. вот пример файла для генерации плюсового интерфейса. еще можно посмотреть мост между плюсами и питоном (я его сделал для теста больше, не думаю что буду использовать).

part
{
        dec {
                tmpl cpp/declarations.jinja
                file declarations.hpp
        }
        header {
                inc_part dec
                tmpl cpp/header.jinja
                file module.hpp
        }
        definition {
                inc_part dec
                inc_part header
                tmpl cpp/definitions.jinja
                file module.cpp
        }
        cmake {
                tmpl cmake/plain.jinja
                file CMakeLists.txt
                project interface
                version "0.0.1.0"
                libraries {
                        interface {
                                part dec
                                part header
                                part definition
                        }
                }
        }
}

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

  • tmpl это шаблон для генерации. если использовать cogenwr.py, то это jinja2
  • file как назвать результирующий файл. в нем могут содержаться переменные, например %{mod}, туда будет подставен модуль, который генерится. так одна часть может сгенерировать несколько файлов, в зависимости от того, что будет на входе (можно посмотреть cpp_py.info там они используются)
  • inc_part это для #include. система увидит, что некоторые узлы ссылаются на другие узлы, и включит файлы с ними, если они указаны с помощью этой директивы
  • у cmake есть специальные директивы, по нему строится некий dsl для систем сборки, поэтому описание несколько отличается. вобще в шаблоне будет доступно то, что написано для него в этом файле, так что тут можно включать разные дополнительные данные

вот как можно это все достать (да да, самоподписанный просроченный)

  • default.nix для nix-build. тут нужно, чтобы в используемом канале был доступен boost.175 ибо в нем есть boost.json
  • export.tar.gz это бинарь и файлы, нужные для его работы

PS: бинарь я собрал никсом и выполнил такие комманды (exporter)

patchelf --set-rpath "/lib/x86_64-linux-gnu/" export/bin/cogen
patchelf --set-interpreter /lib64/ld-linux-x86-64.so.2 export/bin/cogen
возможно это не помогло и надо изменить пути, чтобы запустить.



Последнее исправление: zerhud (всего исправлений: 2)

Хорошо бы в первых строчках поста указать что это за проект и какие цели он преследует.

Жаль, если твой труд останется незамеченным.

EXL ★★★★★
()
Ответ на: комментарий от EXL

да, отредактировал, спасибо. что-то на автомате создал как продолжение предыдущему посту.

да, надеюсь кому-то поможет..

zerhud
() автор топика
Ответ на: комментарий от XoFfiCEr

Я буду юзать в основном для генерации сервера и клиента. Например микро сервис его клиент и например клиент на js.

Еще была мысль сделать dsl для генерации сервисов для базы данных.

zerhud
() автор топика
Ответ на: комментарий от XoFfiCEr

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

zerhud
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.