EmbeddedRuCodeGen

Path: docs/EmbeddedRuCodeGen
Last Update: Mon Jun 04 14:34:35 +0400 2007

Встраиваемый RuCodeGen

В версии 0.2.0 в RuCodeGen была добавлена возможность встраивать RuCodeGen описания внутрь других файлов (в версии 0.1.0 RuCodeGen описание должно было располагаться в самостоятельном и самодостаточном Ruby-файле, который и запускался на обработку).

Встроенный RuCodeGen должен начинаться со строки, в которой есть подстрока RuCodeGen::Embedded::begin, затем должен идти код RuCodeGen описания, затем строка с построкой RuCodeGen::Embedded::end. Например, в C++ встраивание RuCodeGen может выглядеть, например, так:

  #if 0 /* RuCodeGen::Embedded::begin */
  ... # RuCodeGen описания...
  #endif /* RuCodeGen::Embedded::end */

или же:

  /* RuCodeGen::Embedded::begin
  ... # RuCodeGen описания...
  RuCodeGen::Embedded::end */

Для обработки встраиваемых RuCodeGen описаний добавлен метод process_embedded_rucodegen, который получает на вход имя файла со встроенными описаниями и режим кодогенерации (:build или :clean). Запустить кодогенерацию для встраиваемого описания можно, например, следующей командной строкой:

  ruby -e"require 'rubygems'; require_gem 'RuCodeGen'; process_embedded_rucodegen('test.cpp',:build)"

Однако, предполагается, что встраиваемый RuCodeGen будет использоваться вместе со специальными инструментами, которые сами будут инициировать кодогенерацию (например, такими как Mxx_ru.

Принцип работы встраиваемого RuCodeGen

Когда process_embedded_rucodegen получает имя исходного файла, он считывает его содержимое и выделяет оттуда все RuCodeGen-фрагменты. Эти фрагменты объединяются в один временный Ruby-файл с именем src_file-embedded-rucodegen (где src_file — это имя исходного файла). В начало временного файла помещаются инструкции:

  require 'rubygems'
  require_gem 'RuCodeGen'

Т.о. process_embedded_rucodegen формирует автономный файл со всеми RuCodeGen описаниями, которые были встроенны в исходный файл. После этого запускается ruby с именем временного файла в качестве аргумента и кодогенерация сводится к обычной процедуре кодогенерации RuCodeGen. После завершения кодогенерации временный файл удаляется.

process_embedded_rucodegen удаляет временный файл, но в режиме :build оставляет файл с md5-хэшем. Этот md5-файл используется при последующих кодогенерациях для того, чтобы проверить необходимость перегенерации. Ведь может оказаться, что исходный файл изменяется, а встроенные в него RuCodeGen описания — нет. В таких случаях md5-хеш для временного файла будет оставаться неизменным. md5-файл уничтожается как обычно при запуске RuCodeGen в режиме :clean.

Пример использования встраиваемого RuCodeGen

[Validate]

Hosted by uCoz