понедельник, 27 июня 2011 г.

Лисп в промышленной разработке #2

Наша лисповая инфраструктура потихоньку развивается, обзаводится всё большим количеством eDSL, DSL и полноценных компиляторов.

Например, сейчас из одного лиспового описания собирается управляющая логика, веб-интерфейс и т.н. топ-левел для vhdl-ядер - своего рода интерфейс, управляющий отображением регистров в адресное пространство embedded-процессора. Идея генерации топ-левела из dsl'ного описания ядер для софтовой логики пришла спонтанно, и её реализация почти ничего не стоила.

Из более крутых вещей: у нас теперь есть универсальный DSL для описания бинарных форматов, который генерирует программу для нашего же компилятора из s-expression в vhdl, который делает параллельно работающий код (если vhdl-описание можно так назвать), автоматически делая всё необходимое для этого самого параллелизма. Например, написали (описали) NASDAQ'овский декодер, работающий в нашей существующей инфраструктуре на полных 10 гбит/с без задержек и буферизаций, т.е. с низкой и детерминированной латентностью. На лиспе получилось 370 строк (с закомментированными блоками, тестами и общими макросами, которые потом будут вынесены в другое место), на vhdl вышло почти 4900 строк или 250 кб. В терминах graphviz'а декодер получился почти на 6 тысяч узлов, построить его граф на втором Core i7 за сутки не удалось :)

Я в вопросах параллельной обработки в vhdl слабо разбираюсь, но не все наши клиенты, что-то сами делавшие на FPGA, сразу поверили, что такое возможно написать ;) А секрет лишь в том, что для сложных задач нужен соответствующий уровень абстракций. Предыдущую одногигабитную версию писали сами наши железячники на vhdl, и за полтора года толком работающего решения не смогли сделать. И они отнюдь не плохие разработчики.

Ещё компилятор подзволяет прогнать через программу тестовый вектор на логическом уровне. Раньше железячники отлаживались в vhdl-симуляторе на сигнальном уровне, что не особо способствовало быстрой и лёгкой отладке  логики. Голый vhdl вообще быстрому темпу разработки не способствует: на весьма мощном железе "прошивка" для современного FPGA собирается часа два с половиной.

Кстати, в синтаксисе компилятора есть нормальные макросы! ;) Поэтому степень накручивания абстракций практически неограничена.

И самое замечательное: всё это добро пишет два человека, которые помимо писательства ещё нагружены управленческой работой, дизайном и разводкой плат, твердотельными моделями корпусов, выездами на презентации, социальными ивентами, залечиванием переломанных костей после падения при даунхилле и т.п.

Надеюсь, что когда поседею и начну носить очки, то буду таким же умным.

4 комментария:

  1. еще самый интересный вопрос.
    а нафига такая скорострельность, если часто выставлять заявки, то брокера засаспендяд все равно..

    ОтветитьУдалить
  2. предыдущий коммент не прошел - а что за декодер? FIX чтоль? на биржах такие "протоколы",что, да, декодировать там нечего. ;-)

    ОтветитьУдалить
  3. Такая скорострельность нужна, например, для формирования консолидированного ордербука в реальном времени с минимумом задержек.

    ОтветитьУдалить
  4. Анонимный7 июля 2011 г., 18:26

    Извините, но это охуительно

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