-Поиск по дневнику

Поиск сообщений в rss_forum_sources_ru

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.07.2007
Записей:
Комментариев:
Написано: 80


Язык для обучения программированию

Четверг, 13 Августа 2020 г. 21:35 + в цитатник
applegame:
Цитата Qraizer @
Подловил.
Да много на чем можно подловить :) Например в D есть атрибуты, которыми можно декорировать все что угодно, а потом рефлексией разбирать и использовать. Та же сериализация, например:

    struct Packet {
    string name;
    @optional("default_type")
    string type;
    @field("data_info")
    int info;
    }


В D можно на стадии компиляции импортнуть любой файл и благодаря настоящему CTFE, а не убогому плюсовому constexpr, распарсить этот файл в код. Например так сделан http-шаблонизатор Diet.
Дешный CTFE позволяет генерить парсеры на основе грамматики - либка pegged

Цитата Qraizer @
Вообще зачем тебе рефлексия? Любые примеры практического применения мне лично попадались исключительно синтетические.
Это потому что в плюсах нет рефлексии. ;)
А у меня в проде трудится рефлексия не только для сериализации. В частности, при помощи классов у меня описываются, веб-интерфейсы. А библиотечка рефлексией генерит код для обработки HTTP-запросов.
Упрощенно:

    class DataInterface : WebInterface {
    @path("/data") {
    auto getUsers(string p1, int p2) {...} // GET /data/users?p1=a&p2=10
    auto getUserItems() {...} // GET /data/user/items
    auto postUserInfo(string name, uint count) {...} // POST /data/user/info
    }
    @authenticated
    auto getProfile(User user) {...} // GET /profile только для авторизованных пользователей, редирект, если не авторизован
    }

А потом что-то вроде
    auto server = listenHTTP(new DataInterface());

И все. Далее оно само зарефлексит DataInterface вытащит из него имена функций, имена и типы параметров, и сгенерит код, для соответствующего роутинга и валидации параметров.
В реальной либе все гораздо мощнее. Там и автоматическая сериализация/десериализация JSON, сессии, хуки и т.д. и т.п.

Также рефлексия применяется похожим образом для роутинга Remote Procedure Call, с упаковкой параметров функции в MessagePack.

https://forum.sources.ru/index.php?showtopic=419241&view=findpost&p=3836504

Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку