Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I'd like to get into web development using C++ as the "scripting language" on the server-side. My server infrastructure is *nix based, so doing web development in C++ on Azure is not applicable and C++/CLI ASP.NET is also not applicable.

Separate from legacy CGI applications, can web development be done using C++ ?

Thanks,

Scott

share|improve this question
28  
Of course it's possible, the question is; is it practical? –  Ed S. Mar 1 '11 at 22:44
    
See this question on stackoverflow.com. –  kevin cline Mar 1 '11 at 22:50
21  
You could use assembly as a server-side language if you were so inclined. –  Channel72 Mar 2 '11 at 1:00
7  
Or even Brainf*ck if , are . are redirected to a socket. –  dan04 Mar 2 '11 at 1:07
3  
This brings back horrible memories of the first web project I was involved in. CGI gateways to C code. I still shudder when I think about it! :-) –  Brian Knoblauch Mar 2 '11 at 17:42

7 Answers 7

up vote 52 down vote accepted

Absolutely.

There are even several frameworks for developing them, including Wt, cppcms, CSP, and others. FastCGI's mainline implementation is in C, and directly supports several languages, including C++.

Any programming language that can parse strings can be used in CGI or a servlet. Any language that can implement bindings with C libraries can also be used to develop modules for ISAPI- or Apache-compatible servers.

It's not particularly easy in C++, and good templating engines are few and far between, but it can be done.

Of course, the question of whether this is a good idea is another matter entirely. :)

Do note: Major websites like Amazon.com, eBay, and Google do use C++ for parts of their infrastructure. Realize, however, that Google only uses C++ for speed-critical systems, and Amazon.com only relatively recently switched away from Lisp (which angered some of their senior staff :).

Facebook formerly compiled PHP to C++, but their HipHop compiler (written partly in C++) has since been retooled as a bytecode virtual machine.

share|improve this answer
2  
+1 For citing various frameworks. You should add that it's common for (very) big web apps to be powered by c++ (and other languages) : amazon.com, google.com, now facebook.com via hiphop, etc. –  Klaim Mar 1 '11 at 23:15
7  
@Klaim: It's common, but it is by no means the rule. Amazon's architecture was historically Lisp-based and only recently rewritten in C++. Google's architecture involves Java, Python, and others almost as often as C++, all for various reasons. Facebook only uses hiphop now because they found out PHP doesn't scale. :) –  greyfade Mar 2 '11 at 0:22
4  
I agree, but I meant that they still are well-known examples of use of C++ - to answer directly the original question title. –  Klaim Mar 2 '11 at 8:00
1  
@johannes Facebook's scaling problem stems from the fact that they have to maintain an order of magnitude more servers than are otherwise necessary, specifically because of the poor performance of an optimized PHP script. Linear scaling simply isn't good enough for such a large infrastructure. But remember that the "shared nothing" approach is not exclusive to PHP. C and C++ can do that, too. –  greyfade May 17 '13 at 19:33
1  
@amar The thing is there is little return except in the 0.1% of apps that need that raw performance. You could serve in 1/3 of the time in most other languages with good web stack support. Banks, web advertisers, etc all serve massive scale without resorting to C++. Even Facebook. Twitter. StackOverflow. All do it in higher level languages. Its here to stay but it isn't going to become the majority again. Probably ever. –  Rig Dec 16 '13 at 15:26

Why not?

The OkCupid dating site is created with C++. There are probably other examples.

There's also a Qt-inspired toolkit for developing web applications with C++ called Wt.

share|improve this answer
11  
"Why not"? Because it's much easier using a language that has more support for this sort of thing. –  Ed S. Mar 1 '11 at 22:47
5  
@Ed S. As I and greyfade pointed out there are frameworks for developing web applications with C++. –  Vitor Mar 1 '11 at 22:49
2  
Yes, but again, are they as easy to use as more commonly used frameworks? I'm honestly asking, I'm not a web developer and I've never used them, but something tells me they are likely not as mature or widely used as (for example) their ruby/python/PHP counterparts. –  Ed S. Mar 1 '11 at 22:55
3  
@EdS.: Neither Ruby nor Python started with web frameworks. In fact it took a decade for those to appear. The frameworks are the mere consequence of enough people wanting to use language X for problem Y. The same could happen for C++. Main reasons why it didn't: C++ is not managed, takes ages to compile and has a higher entrance barrier in general. –  back2dos Nov 21 '13 at 20:20
1  
@back2dos: Who said either language was developed with the web in mind? I certainly did not. I used the term "support". –  Ed S. Nov 21 '13 at 23:33

If you're planning to write your web application in C++, it would be total waste to then interface it as CGI.

My suggestion would be to build it asynchronous using ASIO (Asynchronous I/O). With that you can build blazing fast web service (combine with nginx as a reverse-proxy and statics server for best effects); Combine that with template library like Wt and you're ready to serve tens of thousands request per second from a single server.

Whether this is practical alternative to dynamic language web framework is another issue.

share|improve this answer

The short answer is, ANYTHING can be used to write a webpage provide it can read the input, write interpretable output, and is executable by the webserver.

Technically, any language can be used as a CGI script provided it:

  1. Interprets all the inputs and environment as presented by the server
  2. Outputs in a known markup language (generally html)
  3. Can be ran by the server

There are also other ways too. Perl has the ability to be built as a wrapper around c/c++ code, acting as an interpreting layer between the two (and this is not including perl modules that are flat out compiled as C).

share|improve this answer

in the beginning, it was quite common - the first web sites I worked on in the late 1990s were ISAPI extensions written in C++, and they worked quite well.

share|improve this answer
3  
isapi.dll anyone? –  red-dirt Mar 5 '11 at 23:10
    
or ATLServer - atlserver.codeplex.com –  gbjbaanb Apr 27 '12 at 23:41

It appears Microsoft thinks it can too. Check out Casablanca which is a new set of tooling for (it appears) Azure using C++.

Casablanca is a project to start exploring how to best support C++ developers who want to take advantage of the radical shift in software architecture that cloud computing represents.

Here’s what you get with Casablanca:

  • Support for accessing REST services from native code on Windows Vista, Windows 7, and Windows 8 Consumer Preview by providing asynchronous C++ bindings to HTTP, JSON, and URIs
  • A Visual Studio extension SDK to help you write C++ HTTP client side code in your Windows 8 Metro style app
  • Support for writing native-code REST for Azure, including Visual Studio integration
  • Convenient libraries for accessing Azure blob and queue storage from native clients as a first class Platform-as-a-Service (PaaS) feature
  • A consistent and powerful model for composing asynchronous operations based on C++ 11 features
  • A C++ implementation of the Erlang actor-based programming model
  • A set of samples and documentation
share|improve this answer

For PHP you can write your own C/C++ extensions and get good performance benefits that way. If I had a really CPU intensive part of my web application I would probably make a small C++ library that offloaded that processing to the extension and then returned the result back to the PHP and then the PHP outputs it to the browser.

The other thing people don't often consider is offloading certain CPU processing to the client side e.g. JavaScript/jQuery. If I've got a web server, I might need a a 3Ghz CPU to do CPU intensive processing for a particular function (maybe some data processing). My company is paying money for that server each month to keep it running. If I want to scale up operations for a 100 concurrent users running that CPU intensive task at the same time then maybe I need multiple CPUs and servers, increasing the cost to my business. If I offload that CPU intensive task to the client side, then each user that visits the website can do their own processing on the data and I don't have to increase my server capability therefore saving me money.

After all with all with the collective power of 100+ desktops/tablets/mobiles doing the processing for you that's a lot more power than your server sitting in a datacenter somewhere costing your business money each month to keep running. Potentially then all your server would be doing would be retrieving data from the database, serving content and a bit of pre/post processing and validation of the data before storing back in the database. Obviously you wouldn't make the client side code too CPU intensive which might block/freeze the web browser UI, you might fire off an AJAX request to the server, retrieve the data and then process the data asynchronously client-side, leaving the web-browser UI completely usable.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.