Часто Задаваемые Вопросы
-
-
-
- Вы сумасшедший или мазохист?
- Зачем создавать веб-сайты на C++?
- CppCMS — это такая же готовая система управления контентом (CMS), как Drupal?
- Если CppCMS не CMS, откуда пришло это название?
- Зачем делать веб-сайты на C++? Это опасный язык!
- Разве главным узким местом любого веб-приложения не является SQL-движок, а не язык серверной части?
- Как я могу помочь?
- Какова политика лицензирования?
- Какие из текущих фреймворков на Вас повлияли?
- Это кроссплатформенный проект?
- Зачем откомпилированные темплейты? Почему не использовать систему интерпретации темплейтов или XSLT?
-
-
Вы сумасшедший или мазохист?
Насколько мне известно — нет.
Зачем создавать веб-сайты на C++?
Есть много причин, смотрите Обоснование CppCMS.
CppCMS — это такая же готовая система управления контентом (CMS), как Drupal?
Нет, CppCMS не является системой управления контентом (CMS) аналогичной Drupal, это фреймворк веб-разработки, такой как Django или RoR.
Если CppCMS не CMS, откуда пришло это название?
Оригинальная идея — «Напиши собственную CMS на C++»
Ведущий разработчик задал вопрос в 2008 году, как лучше назвать проект, но лучших ответов не было и поэтому было принято решение оставить название как есть.
Позднее было решено оставить это название, т.к. оно уже было широко известно и все окружающее ПО уже использовало cppcms
в качестве пространства имен.
Зачем делать веб-сайты на C++? Это опасный язык!
Современный C++ — безусловно сложный язык и требует гораздо больше времени для ознакомления, по сравнению с динамическими языками вроде Python или PHP, или статическими вроде C#/Java, которые очень популярны в веб-разработке.
Однако если Вы в нем разберетесь, у Вас есть огромный набор средств, позволяющих писать приложения быстро и безопасно, без утечек памяти и случайных падений. Если Вы придерживаетесь принципов RAII, пишете защищенный код с использованием исключений и понимаете, как работает STL, для вас всё будет простым и вполне ясным.
Разве главным узким местом любого веб-приложения не является SQL-движок, а не язык серверной части?
Это весьма распространенное заблуждение. И его весьма легко проверить. Запустив простые тесты производительности типичной CMS вы обнаружите, что она может создавать около 5-50 страниц в секунду.
Если Вы возьмете лог SQL-запросов к базе данных и запустите их аналогично тому, как если бы они были запросами от движка CMS, то обнаружите, что можете достичь 1000 запросов в секунду (запросов, не SQL-запросов)... Таким образом, SQL создает около 5% от Вашей общей проблемы производительности.
Фактически, если взять действительно большие проекты вроде Википедии, можно обнаружить, что гораздо больше вычислительных ресурсов тратится на обработку PHP, чем на обработку SQL-запросов. См.: "Является ли база данных узким местом веб-сервиса?"
Как я могу помочь?
Прочитайте это руководство
Какова политика лицензирования?
CppCMS 1.2 и выше лицензируется под лицензией MIT. Предыдущие версии лицензируются на условиях LGPLv3 и коммерческой лицензий.
Прочитайте это, чтобы выяснить разницу и руководствоваться в выборе подходящей для Вас лицензии.
Какие из текущих фреймворков на Вас повлияли?
В основном Django. Иногда, когда я хочу добавить какое-нибудь новшество в CppCMS, я читаю документацию Django и пытаюсь понять, как они это сделали.
Хорошие примеры: наследование темплейтов и форм.
Это кроссплатформенный проект?
Да.
Поддерживается: Linux, Windows, Solaris, FreeBSD и Mac OS X
Зачем откомпилированные темплейты? Почему не использовать систему интерпретации темплейтов или XSLT?
Давайте начнем с истории. Первая система темплейтов CppCMS (CppCMS 0.0.1b) была интерпретируемой и динамически типизируемой. Она требовала от пользователя обеспечения некоторой склейки между используемыми ими данными и системой рендеринга.
Но эта система темплейтов была отброшена в пользу статически типизируемых компилируемых темплейтов по следующим причинам:
C++ нерефлективный, статически типизируемый язык, поэтому выполнение проверок типов времени компиляции потребовал бы реализации C++ парсера, что почти невозможно.
В компилируемых темплейтах множество проверок может осуществляться самим C++ компилятором.
Это очень важно для генерации HTML, потому что Модульное Тестирование пользовательских интерфейсов крайне сложно и потому статическая типизация дает значительное преимуществом, перенося большую часть тестирования в этап компиляции.
Гораздо более сложные типы данных могут поддерживаться всего лишь введением оператора
<<
надstd::ostream
.Введение наследования темплейтов, поддержка стандартных структур данных (контейнеров), таких как list, map, hash-таблиц и даже типов определенных пользователем - становится тривиальным.
Есть несколько недостатков компилируемых темплейтов:
- Обновление темплейта требует перекомпиляцию и перелинковку отображения или даже самого приложения.
- Такие обновления требуют перезапуск приложения.
Первое еще не так критично, потому что при использовании темплейтов, компилируемых в совместно используемые объекты или dlls, время компиляции значительно сокращается и пользователю не требуется ждать долго. Например, компиляция и линковка темплейтов wikipp, занимает около 1.5 секунд.
Второе относится к CppCMS 1.x.x, в котором темплейты могут автоматически перезагружаться как совместно используемые объекты отображения или dll, обновляемые без рестарта всего приложения.
Доп. примечание: Ничто не запрещает Вам использовать любую другую систему темплейтов. Если Вы находите это удобным, можете всегда писать вывод напрямую без темплейтов.