Canto temp. Шаблонный движок написанный на С++
Было время, когда не было библиотек и фреймворков, программистам приходилось самостоятельно разрабатывать решения для различных задач. Это был одновременно и способ выполнения работы, и возможность получить неоценимый опыт. В то время важным навыком для программиста считалось умение быть первопроходцем — браться за задачи, которые ещё никто не решал. Так появилось множество опытных профессионалов, которые создали правила программирования.
Сегодня, когда уже решены многие задачи, а количество фреймворков и библиотек огромно, ценным навыком становится умение разбираться во всём этом многообразии (хотя и не всегда качественном). Из-за этого практика написания кода становится менее распространённой. Чтобы компенсировать недостаток практического опыта, программистам иногда приходится браться за задачи, которые уже неоднократно решались другими. Это можно сравнить с попыткой изобрести велосипед. Одной из таких задач может стать создание собственного шаблонизатора.
Зачем нужен шаблонизатор? Чтобы сэкономить время, которое можно потратить на более полезные дела. С помощью шаблонизатора разметка страницы делится на компоненты, которые можно использовать как в текущем, так и в последующих проектах. Это позволяет избежать многократного написания повторяющегося кода. Он является важным инструментом в веб-разработке, который позволяет создавать HTML-шаблоны с динамическим содержимым, минимизируя необходимость в повторении кода. Незаменимый инструмент для современных веб-разработчиков, который помогает создавать качественные, поддерживаемые и масштабируемые проекты.
Впервые я узнал о шаблонизаторах, написанных на языке C++, когда увидел на GitHub шаблонный движок. В процессе его использования понял, что мне не хватает некоторых функций, и решил их добавить. Однако вскоре осознал, что доработка существующего кода может быть такой же сложной, как и разработка нового. Кроме того, синтаксис шаблонизатора был несовременным. По этому появилась задача и повод, лучше узнать язык С++.
Чтобы не заниматься проектом годами, доводя его до совершенства, реализую его базовый функционал, который потребуется для создания самого простого сайта, по необходимости, расширяя его возможности. В будущем, может так получиться, что им могут пользоваться другие программисты. Для этого, в качестве основы для синтаксиса и функциональности, я выбрал популярный и быстрый шаблонизатор, написанный на языке PHP, под названием «Twig», разработанный программистом Армином Ронахером. Синтаксис был основан на движках шаблонов Jinja и Django, первый из которых также был создан Ронахером. Twig получил популярность благодаря своей гибкости и безопасности. Он используется для генерации HTML-кода с помощью шаблонов, которые могут включать переменные, циклы, условия и другие элементы.
Идею этого шаблонизатора развивает и поддерживает Фабьен Потенсье, ведущий разработчик и идеолог фреймворка Symfony, в котором Twig используется по умолчанию. На C++ уже существуют шаблонизаторы с аналогичным синтаксисом, одним из которых является inja, вдохновлённый Jinja для Python. Тем не менее, я осознаю, что мой шаблонизатор может уступать им в некоторых аспектах, таких как производительность и функциональность. Однако, на сегодняшний день, не вижу других доступных вариантов, которые позволили бы мне получить практические знания и опыт в этой области. Уверен, что, несмотря на возможные ограничения, мой проект будет полезен для сообщества разработчиков и станет моим вкладом в IT.
Цель этого проекта — углубить мои знания в области языка программирования C++. Проект будет считаться завершённым, когда я достигну всех поставленных перед собой задач. В будущем я планирую использовать "canto temp" в более крупных проектах и, при необходимости, вносить в него изменения. Ссылка на проект.
Краткое техническое задание будет следующим:
- поддержка чтения шаблонов из строки, передаваемой в качестве аргумента. Возможность чтения шаблонов из файлов. Для файлов, которые не существуют, должна быть предусмотрена обработка ошибок.;
- основные элементы Twig. Должна быть предусмотрена проверка синтаксиса шаблонов для корректного отображения ошибок.;
- чтение шаблона, должно происходить за один цикл чтения файла или строки;
- возможность добавления пользовательских функций и инструкций в шаблоны;
- оддержка наследования шаблонов. Шаблон-наследник может включать в себя все содержимое шаблона-родителя, а также добавлять свои собственные элементы..
Если у вас возникнут вопросы или предложения, пишите на мою электронную почту. Буду рад обсудить с вами все детали.