LINUX.ORG.RU

Сообщения zerhud

 

hpp vs cpp

Привет! Вот вброс. какие есть за и против писать все в заголовочных файлах, с шаблонами и без, и писать, использую *.cpp файлы. (ну я хочу поднять эту тему у себя, вот готовлюсь.)

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

hpp подход

  • + ускоряет компиляцию
  • + дает возможность компилятору проверять код
  • + не нужна система сборки

cpp подход

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

 ,

zerhud
()

cogen alpha release

как обещал, выкладываю 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
()

название кодогенератора

привет всем :)

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

  • g3io
  • modegen
  • mdg или mdg2
  • multigen
  • mambino
  • mombiz
  • ingom

 ,

zerhud
()

RSS подписка на новые темы