<!--toc--> |
|
###Are you crazy or a masochist? |
|
As far as I know --- no. |
|
###Why develop web sites in C++? |
|
Many reasons, see [Rationale](/wikipp/en/page/rationale). |
|
###Is CppCMS really a Content Management System, e.g. like Drupal? |
|
No, CppCMS is not a Content Management System (CMS) like Drupal. It is a web development framework like Django or RoR. |
|
###If CppCMS is not a CMS, where does this name come from? |
|
The original idea was: "Write your own _CMS_ in _C++_". |
|
The lead developer [asked in 2008 for a better name](http://art-blog.no-ip.info/cppcms/blog/post/23) but didn't get any suggestions, so the name stuck. |
|
It was decided later to keep this name as it was already well known name and all the software around used `cppcms` as the namespace. |
|
###Why develop web sites in C++? It is a dangerous language! |
|
Modern C++ is indeed a difficult language and it takes much more time to get familiar with it, in comparison to dynamic languages like Python or PHP, or static ones like C#/Java, that are very popular in web development. |
|
However, once you know it well, you have great set of tools that allows you to write applications rapidly and safely, without memory leaks, without random crashes. Once you stick to RAII principles, write exception safe code and _understand_ how STL works, everything becomes simple and quite straightforward. |
|
###Isn't the major bottle neck of any web application the SQL engine and not the server side language? |
|
This is a quite common misconception. And it is quite easy to check. Running simple benchmarks on typical CMS you are going to find that it may create about 5-50 pages per second. |
|
If you log the database queries and run them as if these were requests from the CMS engine, you'll discover that you can reach up to 1000 requests per second (requests, not queries)... So, SQL makes about 5% of your performance problem. |
|
In fact, if you take real big projects like Wikipedia, you |
can see that there are much more computing resources wasted on PHP processing than on processing SQL queries. See: [Is Data Base the Bottle Neck of Web Service?](http://art-blog.no-ip.info/cppcms/blog/post/42) |
|
###How can I contribute? |
|
Read [this guide](/wikipp/en/page/contrib) |
|
###How is CppCMS licensed? |
|
The framework is licensed under the [LGPL](http://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License) and other LGPL compatible licenses. That means (in general): |
|
1. You can create commercial and FOSS application with this framework. |
2. You **must** release changes you did in the framework itself. However, it does not enforce you to release your own application code. |
3. You **must** allow the user to do changes in the CppCMS library - basically this implies dynamic linking with CppCMS library. |
CppCMS is released under [LGPLv3](http://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License) and [commercial](http://commercial.cppcms.com) licenses. |
|
CppCMS based applications that are part of CppCMS Project, like this wiki, are licensed under the GPL. |
Read [this](http://commercial.cppcms.com/faq) to learn the difference and a guide to select |
a suitable license for you. |
|
###Do you plan to change the framework's license in the future? |
|
Unless I become crazy (see Q1), I'm not going to change the license to proprietary or strong copyleft license. Meaning: |
|
1. I will not close the source. |
2. I will not switch to something like GPL and enforce commercial users to purchase licenses. (Like Trolltech or C++ Web Toolkit). |
2. I will not switch to something like GPL. |
|
I may change the license to something more permissive. |
|
|
###What existing frameworks has inspired you? |
|
Mostly Django. Sometimes, when I want to add some feature |
to the CppCMS I read the Django documentation and try to understand how they did it. |
|
Good examples are: templates inheritance and forms. |
|
###Is this project cross platform? |
|
_Short answer:_ Yes |
|
_Longer answer:_ It depends on how do you see cross platform portability. |
|
_Long answer:_ |
|
Version 0.0.x of this framework is written for POSIX compatible/Unix like platform. It is known to run on Linux, FreeBSD, Solaris and Windows/Cygwin. |
|
Windows does not confirms to POSIX standards, thus CppCMS 0.0.x can be build only via POSIX compatibility layer --- Cygwin. |
|
It would not run as native Win32API application nor can it be build and debugged using Microsoft tools. |
|
The upcoming CppCMS release 1.x.x, supports native Windows builds without POSIX compatibility layer, including support of MSVC9 compiler. However, Windows support is second priority support due to nature of CppCMS -- which does not fit "Microsoft development style". |
|
###When CppCMS 1.x.x will be released? |
|
Hopefully soon: |
|
- First beta version was available at the beginning of 2010Q3. |
- First stable release is expected in 2012Q1. |
|
###Is CppCMS 0.99.x is stable? |
|
This branch is officially beta release brunch, however |
|
- It is stable and working version of CppCMS in |
terms bugs, support and so on. |
|
It is significantly better tested then CppCMS 0.0.x, |
as it has much better unit test cover and is tested |
automatically every night on many platforms. |
|
- It is unstable in terms of API that may be changed |
until official 1.x.x release which is going to keep |
backward compatible API and ABI till next major release. |
|
So some of CppCMS's API still may change in backward |
incompatible way, that is why it is called "beta-version" |
and currently numbered as 0.99.x. |
Yes |
|
This version is the recommended version and |
it is actually used by most of CppCMS framework users |
(if not all of them). |
It supports: Linux, Windows, Solaris, FreeBSD and Mac OS X. |
|
###Why HTML templates are compiled? Why don't you use an interpreted template system or XSLT? |
|
Let's start from the history. First CppCMS template system (CppCMS 0.0.1b) was interpreted and dynamically typed. It required from user to provide some glue between the data |
he uses and the rendering system. |
|
But this template system was abandoned in favor of statically typed compiled templates for the following reasons: |
|
- C++ is non-reflective, statically typed language so performing compilation time type checks would require implementation of C++ parser which is quite unfeasible. |
|
- In compiled templates there are many checks that can be performed by C++ compiler itself. |
|
This is very important for HTML generation because Unit Testing of human interfaces is much more complicated and thus static typing gives significant advantage moving more testing to the compilation stage. |
|
- Much more complicated data types may be supported by just implementing operator `<<` over `std::ostream`. |
|
- Implementation of template inheritance, support of standard data structures (containers) like lists, maps, hash tables and even user defined ones becomes trivial. |
|
There are few disadvantages of compiled templates: |
|
- Updating a template requires the recompilation and relinking of the view or even the application itself. |
- Such updates require restart of the application. |
|
The first issue is not so critical because when using templates compiled to shared objects or dlls the compilation time becomes very short and user do not need to wait too much. For example: wikipp templates compilation and linking takes about 1.5 second. |
|
The second issue was addressed in CppCMS 1.x.x where templates can be reloaded automatically as view's shared object or dll is updated without restarting the application at all. |
|
_Also Note:_ Nothing prevents from you using any other template system if you find it suitable, you can always write an output directly without templates. |