Is Dynamo "Turing Complete"


#1

Quick Question for the Dynamo development team: Is Dynamo, and I guess by extension DesignScript, Turing complete? I had a college tell me that Dynamo is not a real computer language, and I want to get some feedback form those in the know. My understanding is that Turing Completeness is one measure of being a real or powerful computer language.

BTW Great work on Dynamo so far!

Thanks!


#2

I had to google that!

To show that something is Turing complete, it is enough to show that it can be used to simulate some Turing complete system. For example, an imperative language is Turing complete if it has conditional branching (<i>e.g.</i>, “if” and “goto” statements, or a “branch if zero” instruction. See OISC) and the ability to change an arbitrary amount of memory locations (<i>e.g.</i>, the ability to maintain an arbitrary number of variables). Since this is almost always the case, most (if not all) imperative languages are Turing complete if the limitations of finite memory are ignored.

 

So, yes?


#3

Thanks Ekko. Yes I did Google that and found the same Wikipedia article. I was looking for feedback from the development team. Not being a programmer myself, I am trying to determine why visual programming tools might not be considered real programming languages. From what I can tell, Dynamo is a real and full featured language, especially when one considers the ability to use DesignScript in line.


#4

Design Script is the language which underlies Dynamo. Everything you do in the visual programming environment in Dynamo gets converted to Design Script for execution by the Design Script virtual machine. The nodes and connectors in the graphical programming environment of Dynamo do not comprise a programming language. They are a graphical mechanism for writing Design Script code. This is why the graph and the code can interact seamlessly in Dynamo. It is also why we have the ability (coming soon to the daily builds) to grab a bunch of the graph and convert it to a code. You can write, compile, and execute Design Script code without Dynamo, and this is what Design Script was before it became part of Dynamo - a stand alone programming language for design.

This does not answer the original question regarding Turing completeness. I don’t have the technical credibility to say definitely if Design Script is or is not Turing complete. But I will raise this issue with some of my colleagues who work on the virtual machine and try to elicit a more thorough response.

 


#5

Thanks Ian. I know its an esoteric topic, but I am trying to defend the use of Dynamo on projects. Some people still think its not as capable as “real programming.”


#6

Ian, looking forward to see graph to code conversion. What would be even more exciting, because it plays to the strength of Dynamo as a graphical interface, would be if the reverse is also possible. Failing that, if the action to convert a specific graph to code could be reversed, possibly by storing the original graph with the code somehow. Any plans in that direction?


#7

DesignScript is turing-complete; you have arrays, loops, and branching conditionals, which is essentially all you need to implement your own turing machine interpreter.

Dynamo’s node/wire graph is turing-complete in theory; you have lists, recursion, and branching conditionals. Unfortunately, the latter two are somewhat cumbersome to use, but it’s still possible to hack together a turing machine interpreter using nothing but nodes and wires and lots of custom nodes.


#8

Stephen, I really appreciate your response. This is a very informative distinction which will help when deciding when to use which method and why. I suppose I need to dive into DesignScript a little more. Will the documentation get updated on the Dynamo Primer site, or will that just be a graphical node reference?


#9

I miss seeing you every day in standup meetings, Stephen! Thanks for your answer–I knew you had this one.


#10

RecursiveImperative DesignScript is turing complete as mentioned. What I would want to add is that we do support imperative constructs, and as such you are able to write ‘if’ statements ‘while’ loops and recursive functions as you would in any other language.

I’ve attached a simple example of a recursive function that simply computes the sum of the input=5 where 1+2+3+4+5 =15

Notice the presence of an [Imperative] keyword which allows you to do this. The syntax is a bit quirky and we are thinking of ways of introducing this. However, the DesignScript engine has supported this from the get go.

Shoot a reply if you’d like to learn more about this,

-Jun

 


#11

I see others have got the technical answers well covered here.

I’ll add one more thing - Turing powerful turns out to be a really really low bar for talking about programming. You would be surprised as to how little you need to make something meet it. It’s useful for working out whether you can express things that might accidentally run forever and where you can’t reasonably hope to predict the outcome, but beyond that it doesn’t really have much to add to the language design conversation.

I think it’s important when discussing whether something is programming or not to think about what the person engaging with the system is doing. There are two basic groups of thing here:

  • Doing something when the person isn’t there

  • Doing something repeatedly on behalf of the user

Doing these in a formal language corresponds to a ‘programming-like’ activity. Dynamo certainly meets both cases, so what the people are doing is going to be cognitively ‘programming-like’.

Luke

 


#12

Jun

I have looked at the Dynamo Language Manual PDF, but after trying some of the loop statements I realized that some of the syntax has changed and could not go much further. We definitely need a more detailed “manual” that works with the current Dynamo. I will definitely ask questions here as they come up.

Luke

Thanks for the additional information. Not being a programmer myself (ok, I’m a visual programmer) I was just looking for an objective barometer to judge whether or not Dynamo was a “real” programming language. Something that others would recognize. I realize that ultimately if it serves the purpose, and allows me to program an algorithm that helps in the design and documentation process, the rest is just technicalities.

There are some dynamics that I would rather not go into (that I have to deal with) that prompted me to research this a little more so that I could defend this technology and its use vis-à-vis straight programming technology. The information gathered so far will help immensely in making my argument.

Thanks.


#13

@Ian Keough - “You can write, compile, and execute Design Script code without Dynamo”

A quick demonstration/sample of the process would be helpful.

Is it something Design Script enthusiasts can explore or is it too technical a process?

Thanks.

Regards,

Vikram Subbaiah


#14

Hello.

Where can i find more information about Resursion in DesignScript? Thanks.

Regards,

CADesigner


#15

Hi Rafael - great question and lots of good response from our development team! You said this:

> I am trying to defend the use of Dynamo on projects

 

It may help to understand more about the type of projects where you want to use Dynamo. Then we can help you make your case to use Dynamo. I think it’s clear from this forum that there are many people doing varied and useful things with Dynamo.

 

As Luke says, it’s not that difficult to build a programming language that is Turing complete. I think a more important measure is how useful it really is for the types of things you’re trying to do. On that measure, Dynamo really shines for our users.

 

Also, it is useful to remind people that Dynamo is extensible via zero-touch and other mechanisms that allow it to be used with traditional programming languages when needed.