How to Create a Web App to Compile and Run Java/C/PHP Code Online?

sushil bharwani picture sushil bharwani · Sep 22, 2014 · Viewed 27.4k times · Source

Though this is a question with broader scope, I want to write a Online Test Code for my company where people can be given questions to write code in java/php/c etc and the code run and compiles online. I have seen this happening in site like codeacademy, Udacity etc. Just want to understand the architecture behind it. I have searched a lot along the similiar lines a lot on Google but couldnt find a concrete answer. Though after reading bits and pieces here and there i understood that the code is sent to compiler on server and then the results are sent back. Not sure how exactly that happens. Can somebody point me to a starting point of it.

Answer

Manu picture Manu · Sep 22, 2014

What you can basically have, according to a MVC pattern applied to a web architecture, is something like this:

  • A web application client-side, which allows the user to insert some code, possibly leveraging Javascript for early syntactic check
  • A server endpoint, receiving the inserted code as input from the client

The sequence of operations could be:

  1. Server-side, the input is transformed into the appropriate structure for the target programming language, e.g. a Java class or a C module.
  2. Possibly, more context is defined (e.g. a classpath).
  3. Then, if the language is compiled, the compiler is invoked (e.g. javac or gcc). This can happen in several ways, e.g. exec in C or Runtime.getRuntime().exec in Java. Otherwise the code can be deployed on a server or some simulators can be run and passed the code.
  4. Subsequently, the code is executed and output is intercepted (e.g. by directioning the console output to a file or just leveraging the target language infrastructure, like in this example). The execution can happen through command line (e.g. java) or via other tools (e.g. curl for running a deployed php code as it was a client browser accessing it)
  5. Last step for the server is to send back the intercepted output to the client in a readable format, e.g. HTML. As an alternative, if you used Java, you could go for Applet, which doesn't change the basic architecture.

However, more in general, the point is that compilers and interpreters are base software. They are not intended for general users, which can easily live with the Operating System only. Therefore, "on line compiling", at the best of my knowledge, is something different from "posting code, letting it execute on a server, and visualizing the answer". Online compiling would mean distributing the responsibility of compiling across the network, which does make sense, but, in my opinion, it is not meant to use for demonstrative purpose (like you are mentioning).