Всем привет! С помощью этой статьи хочу поделиться результатами своей работы по переводу книги Мартина Фаулера "Analysis Patterns". Все оригинальные части книги и диаграммы переведены, всё готово для чтения онлайн. Однако работа не завершена, потому что хочется ещё добавить комментариев, пояснений и примеры кода (которых по сути не было) от себя, после многих лет использования "шаблонов".
Рубрика «метапрограммирование»
«Аналитические шаблоны» на русском
2025-01-10 в 9:00, admin, рубрики: аналитика, Аналитические шаблоны, архитектура, книга на русском, метамодель, метапрограммирование, шаблоныКраткий обзор нововведений C++23: deducing this
2023-03-16 в 14:59, admin, рубрики: c++, c++23, deducing this, метапрограммирование, Программирование, шаблоныДокумент «deducing this», принятый в последний стандарт C++, вводит новый, третий тип методов классов, сочетающий в себе свойства двух уже существующих: нестатических и статических, открывающий перед нами новые горизонты:
-
Дедупликация большого количества кода.
-
Вытеснение CRTP (Curiously Recuring Template Pattern) на свалку истории, его замена более простой и очевидно понятной записью.
-
Рекурсивные лямбды.
И другое.
Но прежде чем рассмотреть само нововведение и его практические применения, углубимся немного в историю и попытаемся понять, почему в нем собственно возникла необходимость.
Читать полностью »
Декораторы, о которых вам не расскажут
2023-01-16 в 10:02, admin, рубрики: decorators, metap, newbie, newbie guide, python, refactoring, tutorial, декораторы, метапрограммирование, Проектирование и рефакторинг, рефакторингОт переводчика: мне понравился подход к объяснению декораторов, описанный в этой статье, а так как других вариантов перевода я не нашёл, я решил поделиться этим с аудиторией Хабра. Надеюсь что этот текст будет полезен как новичкам, так и опытным программистам.
Если вы программируете на языке Python, вы должны были слышать о декораторах, однако существует много людей, которые либо не знакомы с ними, либо, что еще хуже, знакомы с ними (использовали так или иначе), но так и не поняли их суть.
«Оптимизируем» функции на уровне AST
2021-09-07 в 8:59, admin, рубрики: AST, python, python3, Блог компании ДомКлик, декораторы, метапрограммирование, ненормальное программирование, оптимизация хвостовой рекурсииPython предоставляет программисту огромное пространство свободы. Увы, обычно это довольно дорогая в плане производительности свобода, зато при правильном применении иногда она позволяет творить сущую магию. Но сегодня мы поговорим не о таких вот «богоугодных» применениях свободы, а о том, что никогда не стоит использовать в прикладном программировании — о модификациях кода на уровне AST.
Да кто такой этот ваш AST?
Обычно принято говорить, что CPython выполняет код построчно. Это не совсем правда, и прежде, чем идти дальше, я должен сделать небольшую паузу и кратко описать схему его работы.Читать полностью »
Stm32 + USB на шаблонах C++. Продолжение. Делаем HID
2021-03-27 в 15:24, admin, рубрики: c++, stm32, usb, USB-HID, метапрограммирование, программирование микроконтроллеровВ прошлый раз показал один из способов распределение ресурсов между конечными точками, а именно регистров EPnR, памяти под дескрипторы буферов и под сами буферы. Предлагаю продолжить начатое и рассмотреть написанную библиотеку на примере создания простого HID-устройства, позволяющего управлять светодиодом.
Разделение прерывания
Роль логического программирования, и стоит ли планировать его изучение на 2021-й
2020-12-21 в 20:13, admin, рубрики: natural language processing, Prolog, анализ текста, декларативное программирование, искусственный интеллект, логическое программирование, метапрограммирование, обработка естественного языка, поиск решений, ПрограммированиеНачну, пожалуй, с представления читателя этой статьи, так как ничто не приковывает внимание к тексту более, чем сопереживание главному герою, тем более, в его роли сейчас выступаете Вы. Вероятно, услышав или прочитав однажды словосочетание "логическое программирование" и преисполнившись интересом, Вы как настоящий или будущий программист направились в Google. Первая ссылка, разумеется, ведёт на Википедию - читаем определение:
Валидация данных в C++ с использованием библиотеки cpp-validator
2020-10-27 в 8:31, admin, рубрики: c++, c++ библиотеки, C++14, c++17, validation, валидация данных, метапрограммирование, Программирование, Проектирование и рефакторинг, Совершенный кодКазалось бы, валидация данных — это одна из базовых задач в программировании, которая встретится и в начале изучения языка вместе с "Hello world!", и в том или ином виде будет присутствовать в множестве зрелых проектов. Тем не менее, Google до сих пор выдает ноль релевантных результатов при попытке найти универсальную библиотеку валидации данных с открытым исходным кодом на C++.
Металингвистический совратитель Си. Опус I: Предварительные ласки
2020-10-14 в 6:12, admin, рубрики: ansi c, boost, C, c++, c11, C99, алгебраические типы данных, кодогенерация, Компьютерная лингвистика, макросы, метапрограммирование, метасинтаксис, метаязык, ненормальное программирование, препроцессор, Программирование, Си, Совершенный код, шаблоны c++, язык программирования си>> Осторожно, модерн! 2 — 0.1. Спор на баксы и девчонок
Предисловие
Система макросов добавлена в язык программирования Си с целью абстрагирования часто повторяющихся синтаксических конструкций, и как следствие — снижения ментальной нагрузки при чтении и написании исходного кода.
Но не всё так радужно… после моих экспериментов в написании нетривиальных метапрограмм на связке Boost/Preprocessor + Boost/VMD я осознал, что с текущими ограничениями удобное и предсказуемое метапрограммирование препроцессора — нечто недостижимое (вы сами в этом убедитесь). И это не решается только бережностью по отношению к коду, это решается обёрткой над стандартным языком препроцессора в виде встроенного метаязыка.
Такой метаязык я создал, и назвал его agony-pp. Его цель — сделать встроенное в Си метапрограммирование удобоваримым (по сравнению с тем, что было). Это высокоуровневый язык программирования сам по себе, ведь он поставляет управляющие конструкции, типы данных (примитивные и пользовательские), коллекции и другие вещи, свойственные ЯВУ.
В этой серии статей, юмористически именуемых опусами ввиду витиеватого характера предметной области, я подробно объясняю подноготную agony-pp. В конце концов, я надеюсь, что данный материал повысит уважаемым читателям навык владения языком Си, преподнесёт программирование с совершенно иного ракурса.
Сегодняшняя программа:
- Уточним терминологию из CS.
- Рассмотрим базовые техники, без которых макросоводство на базе стандартного языка препроцессора невозможно.
- Разработаем предметно-ориентированный язык для тестирования ПО.
В общем говоря, в этой вводной статье я попытался продемонстрировать практическую выгоду от метапрограммирования времени компиляции и предметной ориентации.
Первое впечатление от концептов
2020-04-02 в 20:36, admin, рубрики: c++, C++20, концепты, метапрограммирование, Программирование, шаблоны c++Решил разобраться с новой возможностью С++20 — концептами.
Концепты (или концепции, как пишет русскоязычная Вики) — очень интересная и полезная фича, которой давно не хватало.
По сути это типизация для аргументов шаблонов.
Основная проблема шаблонов до С++20 — в них можно было подставить все что угодно, в том числе то, на что они совершенно не рассчитаны. То есть система шаблонов была совершенно нетипизирована. В результате, при передаче в шаблон неверного параметра возникали невероятно длинные и совершенно нечитаемые сообщения об ошибках. С этим пытались бороться с помощью разных языковых хаков, которые я даже упоминать не хочу (хотя приходилось сталкиваться).
Концепты призваны исправить это недоразумение. Они добавляют в шаблоны систему типизации, причем весьма мощную. И вот, разбираясь с особенностями этой системы, я стал изучать доступные материалы в интернете.
Скажу честно, я немножко в шоке:) С++ и без того сложный язык, но тут хотя-бы есть оправдание: так получилось. Метапрограммирование на шаблонах именно открыли, а не заложили при проектировании языка. А дальше, при разработке следующих версий языка, были вынуждены подстраиваться под это «открытие», так как в мире было написано очень много кода. Концепты же — принципиально новая возможность. И, как мне кажется, в их реализации уже присутствует некоторая непрозрачность. Возможно, это следствие необходимости учесть огромный объем унаследованных возможностей? Попробуем разобраться…
Читать полностью »
Как заставить машину написать тесты из кода за тебя
2020-03-03 в 7:09, admin, рубрики: AST, moscowpython, python, Блог компании Конференции Олега Бунина (Онтико), метапрограммирование, Программирование, синтаксический анализ, тестирование, Тестирование IT-систем, Тестирование веб-сервисов, тестыМы живем в неидеальном мире. Здесь код пишут люди, а люди по своей природе склонны совершать ошибки. Все бы ничего, ошибки можно отловить на этапе тестирования и не дать им никому навредить. Можно, если писать тесты. Чего люди делать почему-то не любят. Но возможно, есть надежда — автогенерация тестов из написанного кода.
Юлия Волкова хочет проверить идею в реальности и пробует переложить на машину создание тестов на основе кода, причем без использования дополнительных инструкций или контрактов. О том, какие открытия приносит путешествие в мир метапрограммирования, AST, синтаксического анализа и токенизации, и чего это все позволило добиться в автогенерации тестов, Юлия расскажет на Moscow Python Conf++. А пока я расспросил, откуда появилась сама идея — автоматизировать тестирование, что лежит в основе прототипа и с чем еще предстоит справиться.Читать полностью »