четверг, 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 так ничего хорошего и не получится?

13 комментариев:

  1. Это да, из "новых" ЯП последних лет мне его жаль, хотя от программирования на нативе далек. The TIBE Index History D

    ОтветитьУдалить
  2. Нужно сказать, что такие языки, как Eiffel, OCaml и D -- они ближе к управляемым языкам. Сборка мусора, контроль за границами массивов и пр. Писать на них практически так же безопасно, как и на Java.

    А вот индекс TIOBE для D -- явно незаслужен. Говорят о D много. Гораздо больше, чем реально используют.

    Будем посмотреть, что из него выйдет. Все-таки сейчас порты на LLVM и GCC должны служить сдерживающим фактором развития языка.

    ОтветитьУдалить
  3. Да D скоро со всеми фишками из управляемых языков будет :)

    ОтветитьУдалить
  4. 2Rustam: хочу тебя спросить -- ты сам как думаешь, есть у D перспективы на какое-то время устаканиться или же он таким "перекати поле" и останется?

    ОтветитьУдалить
  5. Тиобовский график вполне повторяет мои настроения по D :(

    Не знаю у меня только надежды уже остались. Но остановится просто необходимо.
    Мне кажется пока у D все еще есть шансы. Но релиз в ближайший год необходим.

    ОтветитьУдалить
  6. У меня в последнее время надежды даже не на DMD, а на его порт на LLVM. Если в течении ближайшего времени выйдут версии D2 на LLVM и DMD (скажем, в течении следующего года), тогда еще можно будет что-нибудь экспериментальное замутить на D (все-таки иммутабельность (пусть даже вирусная) и высокая скорость компиляции -- очень привлекательные штуки).

    ОтветитьУдалить
  7. По моему сначала нужен стабильный релиз двойки. Я вот даже в одиночку ни хочу что-то начинать на D без релиза.

    ОтветитьУдалить
  8. А вот индекс TIOBE для D -- явно незаслужен.
    Ну вот смотрите, свежее:
    OOC для C, — это как Scala для Java
    На момент когда я писал этот пост - ни один из комментаторов не упомянул D. А даже наоборот - "... я все равно в шоке. Почему никто не придумал этого раньше?"

    D -- они ближе к управляемым языкам.
    Того и жалко. Но лично ни появление, ни исчезновение современного ЯП и компилятора к нему в нативный код - не почувствую.

    ОтветитьУдалить
  9. 2Skynin

    На момент когда я писал этот пост - ни один из комментаторов не упомянул D.

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

    На момент когда я писал этот пост - ни один из комментаторов не упомянул D.

    Я поясню почему мне интересен D. Поскольку он очень похож на C и C++. И перенос старого кода из C++ в D, во многом, всего лишь дело техники (если нет извращений на тему Modern C++ Design, а у меня нет такого). Т.е. пару лет назад была у меня надежда, что вот-вот D стабилизируется, я начну процесс портирования имеющегося софта на него и года через три-четыре буду программировать на современном, безопасном языке со сборкой мусора и супербыстрой компиляцией. Но не вышло, к сожалению.

    Смена C++ на D выглядела тогда (да и сейчас) гораздо более простой и дешовой, чем смена C++ на Java или C#. Поскольку в последнем случае возможен только big rewriting, а это самоубийство.

    ОтветитьУдалить
  10. И перенос старого кода из C++ в D, во многом, всего лишь дело техники (если нет извращений на тему Modern C++ Design, а у меня нет такого).

    Наоборот Modern извращения на C++ превращаются на D в красивый читабельный код :)

    ОтветитьУдалить
  11. У D все-таки в отличии от майнстримных управляемых языков присутствует очень мощное (мощнее чем на С++) метапрограммирование на шаблонах.

    ОтветитьУдалить
  12. Наоборот Modern извращения на C++ превращаются на D в красивый читабельный код :)

    Ну это ж еще превращать нужно :) А обычный код чуть ли не 1 в 1 переносится :)

    ОтветитьУдалить