title: What are practical guidelines for evaluating a language's "Turing Completeness"?
body: <p>I've read <a href="https://stackoverflow.com/questions/7284/what-is-turing-complete">&quot;what-is-turing-complete&quot;</a> and the wikipedia page, but I'm less interested in a formal proof than in the practical <strike>implications of</strike> <em>requirements for</em> being Turing Complete.</p>
  <p>What I'm actually trying to decide is if the toy language I've just designed could be used as a general-purpose language.  I know I can prove it is if I can write a Turing machine with it.  But I don't want to go through that exercise until I'm fairly certain of success.</p>
  <p>Is there a minimum set of features without which Turing Completeness is impossible?
  Is there a set of features which virtually guarantees completeness?</p>
  <p><em>(My guess is that conditional branching and a readable/writeable memory store will get me most of the way there)</em></p>
  <hr />
  <p>EDIT:</p>
  <p>I think I've gone off on a tangent by saying &quot;Turing Complete&quot;.   I'm trying to guess with reasonable confidence that a newly invented language with a certain feature set (or alternately, a VM with a certain instruction set) would be able to compute anything worth computing.  I know that proving you can build a Turing machine with it is one way, but not the only way.</p>
  <p>What I was hoping for was a set of guidelines like: &quot;if a language can do X,Y,and Z, it can <em>probably</em> do anything&quot;.</p>