четверг, 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 комментариев:

Skynin комментирует...

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

eao197 комментирует...

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

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

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

Rustam комментирует...

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

eao197 комментирует...

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

Rustam комментирует...

Тиобовский график вполне повторяет мои настроения по D :(

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

eao197 комментирует...

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

Rustam комментирует...

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

Skynin комментирует...

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

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

eao197 комментирует...

2Skynin

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

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

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

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

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

Rustam комментирует...

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

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

Rustam комментирует...

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

eao197 комментирует...

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

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

Rustam комментирует...

Это да :)