четверг, 15 октября 2009 г.

[comp.prog] Интересная фича новой версии DMD – вывод информации о программе в формате JSON

Свежая версия компилятора DMD, 1.050 и 2.035, содержит ключ –X – генерация JSON-файла вместе с компиляцией объектного кода.

Допустим, у нас есть простая программка:

module hello_world;

import std.c.stdio;

class HelloWorld {
  public void sayHello() {
    printf( "Hello, World!\n" );
  }
}

int main() {
  auto greeter = new HelloWorld();
  greeter.sayHello();
  return 0;
}

Запускаем dmd с ключиком –X и получаем JSON-файл следующего содержания:

{
  "name" : "hello_world",
  "kind" : "module",
  "file" : "my_hello_world.d",
  "members" :
  [
    {
      "name" : "HelloWorld",
      "kind" : "class",
      "line" : 5,
      "base" : "Object",
      "members" :
      [
        {
          "name" : "sayHello",
          "kind" : "function",
          "type" : "void()",
          "line" : 6
        }
      ]
    },
    {
      "name" : "main",
      "kind" : "function",
      "type" : "int()",
      "line" : 11
    }
  ]
}

(форматирование я чуть подправил, чтобы лучше воспринималось).

Имхо, очень полезная штука для разных инструментов – начиная от IDE и заканчивая всякими анализаторами и генераторами кода (например, для сериализации/десериализации). Штука эта пока не законченная, сам Брайт признается, что пока не знает точно, что именно нужно помещать в JSON описание. Плюс есть маленький баг – компилятор с ключом –X падает, если в файле нет директивы module. Но это явно временные недостатки.

В общем, в очередной раз возникает вопрос – неужели из D так ничего хорошего и не получится?

Отправить комментарий