Back to Intrepreter,       About,       Examples      

Specifications

Sub-expression limit :

Only 1000 (at time of writing) sub-expressions for each expression are allowed. For example if expression is "((4-1)+3)*2." then there are three sub-expressions "4-1.", "3+3." and "6*2.". Trace output shows sub-expressions executed for each expression. Refer to it to understand concept of sub-expressions and thereby its limit properly. When sub-expression limit is reached function terminates with trace of sub-expressions executed so far, with exit reason as atom 'too_many_operations'.

Time limit :

If execution of code on server takes more than 1000ms (at time of writing) of wall-time then interpretation process is terminated and tuple {error, timeout} is returned as result. Trace output in such cases would be empty. Please note that this is not really required unless 'receive' is supported as more than 1000 sub-expressions can easily be executed within 1000ms and hence sub-expression limit error would be reached before this.

Expression length limit:

The maximum allowed length of expression (including sub-expressions separated by comma (,)) is 1000 characters. Any expression longer than this would result into reply - "Expression is longer than maximum allowed length of expression."

External functions :

For security reasons not all functions of all modules provided by erlang are provided in the online interpreter. Only a small subset (at least for now) of functions are supported. Although the list of functions is small compared to list of functions available in erlang, it is large enough to write sufficiently sophisticated and useful expressions.

Following functions of erlang module are allowed:

Apart from above exit/1 function of erlang module is also allowed. All functions of lists module (except zipwith3) are allowed. Function io_lib:format is also allowed.

Extra information :

Although understanding / knowledge of internal design of this tool is not required for one to be able to use it. But erlang programmers would be happy to know that entire functionality is implemented using OTP (several gen_server, supervisor and application) and web page simply uses the application for interpretation, remembering usage count for each IP, remembering bindings between successive calls etc.