Tao3D: a New Open-Source Programming Language For Real-Time 3D Animations
descubes (35093) writes "Tao3D is a new open-source programming language designed for real-time 3D animations. With it, you can quickly create interactive, data-rich presentations, small applications, proofs of concept, user interface prototypes, and more. The interactivity of the language, combined with its simplicity and graphical aspects, make it ideal to teach programming.
Tao3D also demonstrates a lot of innovation in programming language design. It makes it very easy to create new control structures. Defining if-then-else is literally a couple of lines of code. The syntax to pass pass blocks of code to functions is completely transparent. And it is fully reactive, meaning that it automatically reacts as necessary to external events such as mouse movements or the passage of time.
The source code was just made available under the GNU General Public License v3 on SourceForge [as linked above], GitHub and Gitorious."
Tao3D also demonstrates a lot of innovation in programming language design. It makes it very easy to create new control structures. Defining if-then-else is literally a couple of lines of code. The syntax to pass pass blocks of code to functions is completely transparent. And it is fully reactive, meaning that it automatically reacts as necessary to external events such as mouse movements or the passage of time.
The source code was just made available under the GNU General Public License v3 on SourceForge [as linked above], GitHub and Gitorious."
It looks like an INI file for describing different layers in windows.
http://michaelsmith.id.au
Defining if-then-else is literally a couple of lines of code.
I'm curious, when is the definition of a content-free if-then-else statement more than a couple of lines? A random line from a .ddd template (end of file) in their source code seems to indicate they're using an if( <condition> ) then block with no attached end statement, with whitespace presumably being meaningful (though in the sample I linked the indenting doesn't seem to be very consistent at the end). This seems like an odd thing to boast.
will never allow this to work so what is the point? When I learned Logo along with three other teachers in my district, they put all of us in prison for over seven months. They so hated the idea of us teaching secondary students that they destroyed our lives. They made on of the other teacher I taught with give her baby up for adoption. While I lost my car and house, they made her give-up her child. I will never forgive them for that. Their kind is so hateful.
More than three clicks to get to example code (excluding one screenshot of something). Too hard to overcome the, "meh, fuck this" barrier.
Fuck this.
If you try it right out of the bat, you'll get tons of error messages like "no form match". Seems to be the good old "Huh?" in Tao3D.
But there are a few interesting video tutorials on the YouTube channel. This one is to build a DNA strand. Another one shows how you can animate 3D objects. And there's an couple of interesting ones about GLSL real-time shaders.
Apparently, it's quite powerful, but it may take quite a bit of learning to master.
Good effort but I really don't see the point. What you have here is a scripting language sitting on top of a 3D engine. It would be more useful to produce a rich interface to a 3D engine that could be used by existing scripting languages, like JS, than to create a whole different one.
This is not going to do your project a lot of good. You author the post, and put it on Slashdot, being lucky that you got on the front page. From that point on, it is *very* counterproductive to interfere with the discussion yourself. As other commenters already pointed out: you appear to have a vested interest in your subject, which - in the minds of many /.ers - influences the discussion in an unwanted, "steering" sort of way. Don't be surprised if your post goes into the history of Slashdot with a low number of comments. Next time, refrain from interfering. Good luck.
Religous speak to God. Insane are spoken to by God. When all shut up, one can finally hear Shostakovich in peace
Drop GPL v3, most everyone I know isn't going to touch you with a 10 foot pole if you use GPLv3. Just like using GPL is a matter of principle, NOT using v3 is a matter of principle for many people. Yes, some people like GPLv3, most don't. Do you really want your entire user base to be composed of rabid fanboys?
Fix your shitty website. You point people to source forge ... which is crappy by modern standards, and then link to your website ... which has basically no useful information what so ever on the front page ... and a link back to sourceforce ... wtf?
Your website uses arrow keys to navigate? Seriously? Not sure how you could make it any less usable. This alone tells me I don't want to bother with your software any further, you clearly have no concept of staying within established design paradigms and think you can do something better than the standard when you clearly can't. I don't have to go any further to know that you are bad at designing something. You're changing things for the sake of change, not because it does something better. Have you actually used the Internet in the last 10 years? This website is a shining example of how to do it wrong ... and you're trying to push technology when you clearly don't know how to use technology? To use words that match your dated website ... epic fail.
You're deriving your template language from XL? No point in bothering to continue this discussion, you ... like the authors of XL ... don't get it. Just stop.
Persistent Volume manager for Kubernetes - https://github.com/dwimsey/openshift-pvmanager
Descubes, did you think of putting up a formal grammar for your "language"? E.g. one in BNF ? Or a grammar readable by a widely-used parser generator tool such as ANTLR ? Seriously... !
Religous speak to God. Insane are spoken to by God. When all shut up, one can finally hear Shostakovich in peace
In my experience, a lot of the best talks I see are the ones with the most simple slides (e.g. little text and little distracting material). Speakers who pull this off are generally the ones who know their shit and are good at conveying it. Talks with too much text, too many images on one slide, or too many effects (ahem) are less likely to be good. These really over-the-top presentations are like excalamation marks after the punchline of jokes. If what you have to say isn't interesting then you won't make it so by embelishing it with irrelevent crap. For this reason I have not motivation whatsoever to invest time in making flashy presentations.
soylentnews.org
I second this. There should be examples on the first page, so can so how the language looks and feels. For example, looks like ALGOL-68 and feels like Logo.
I wonder if the Unity + (JavaScript | Boo | C#) combination would produce better results and in less time. The nice thing about using Unity is that you will eventually be able to run the apps in a browser without a plugin. http://arstechnica.com/gadgets...
ayottesoftware.com
http://en.wikipedia.org/wiki/S...
"Control structures do not have special syntax in Smalltalk. They are instead implemented as messages sent to objects."
Smalltalk still has one of the best programming syntaxes, IMHO because it clearly tags each argument in a complex message like "widget placeAtX: 10 y: 20.". And Smalltalk is gradually being reinvented piece by piece ranging from things like the Java JVM to things like JavaScript's object literals and JSON, e.g. the Smalltalk looking: {x: 10, y: 20}. As another comment pointed out, Forth, Joy, Lisp and other languages also support this in various ways (Lisp very painfully compared to the others via hard-to-write macros).
Also, why do people keep making new languages with new syntax (generally with poor to missing error messages, debuggers, IDEs, documentation, and libraries) when we would so much more benefit from improved FOSS libraries for existing ones? I'd be a lot more excited about Tao if it was a JavaScript library that just supported some special format INI files. It seems like Tao has some impressive libraries for real time graphics that would be nice for anyone to use. Why hide the library for most users behind some new syntax? Most of the hard work must have been creating the library I would guess?
Of course, I know the answer to that. :-) Writing new programming languages is fun, and I have done it before myself more than once. I still have some more ideas I'd like to try out, like to take Smalltalk and have it use C-like comments and string and have a different (hopefully faster) approach to dispatching messages. And to some extent, every major programming problem we solve requires writing a sort of mini-language in terms of function names and such to define a problem space and possible solutions.
It's sad that we got stuck with JavaScript and all its warts just because someone had to rewrite Scheme from scratch with a C syntax in two weeks to stick it in an early browser. Brendan Eich made an unfortunate choice about default variable scope and not including modules from the start based on the idea it would only be for small one page scripts (plus various other warts and complexities like relating to closures and variable scopes, variable hoisting, and so on).
Looking at a bit of the Tao overview video on SourceForge, it looks like variables don't need to be declared (ick!). Also, requiring "locally" seems to imply that it has one of the worst "features/bugs" of JavaScript design for default globals? Or maybe I did not understand "locally". The main aspects of the language (like what is a code block, what is an argument) don't seem clear at first glance to me, perhaps because of various keywords being defined or seeing commas some places and not others?
I find the use of a comma without inner parentheses interesting for functions and arguments, where the comma in a sense is doing what Smalltalk keyword colons are doing. Still, it misses labelling arguments like Smalltalk, and why not drop the commas and just have all arguments separated by spaces and instead require nested expressions to be surrounded by parentheses if you are going in that direction? For example: "translate -500 100 (10 + x)"
I like the clean looking syntax without semicolons at the end of lines. I'm assuming it uses indentation after a comma to define code blocks? Although maybe not, since I only see that at the top level? So, some interesting ideas and I wish it well. It it ran on JavaScript, maybe I'd try it today...
If you're the author, despite any criticism above (just half-baked opinions from watching the video for a few minutes on-and-off while writing this), I'd still encourage you to keep moving forwards with it. Looks like a lot of fun! And it is exploring some new ideas and the library looks amazing. There is no question popular computer languages (Java, JavaScript, C++) have many warts and someday it would be great to have better langua
A 21st century issue: the irony of technologies of abundance in the hands of those still thinking in terms of scarcity.
"Oh darn, you're right! Let me upgrade my trollbot.
$ sudo apt-get upgrade systemd
There we go, much bett
KERNEL PANIC"
LOL!!!
A 21st century issue: the irony of technologies of abundance in the hands of those still thinking in terms of scarcity.
I looked at the link you mentioned in another post: http://www.taodyne.com/shop/de... ..."
"Taodyne's current technology is written in C++. It uses Qt for the user interface, and OpenGL for the drawing code. It also uses other components that might be a bit difficult to adapt to a web environment, notably LLVM. We can think of a few possible strategies to adapt this technology to the web:
For a port to the web, you could try asm.js and emscriptem:
http://en.wikipedia.org/wiki/A...
http://en.wikipedia.org/wiki/E...
Here is an example:
https://blog.mozilla.org/blog/...
"Mozilla and Epic Games have showed the power of the Web as a platform for gaming by porting Unreal Engine 3 to the Web and showcasing Epic Citadel, using asm.js, a supercharged subset of JavaScript pioneered by Mozilla. In less than 12 months, optimizations have increased the performance of Web applications using asm.js from 40% to within 67% of native, and we expect it to get even faster. This performance opens up new opportunities for giving users an astonishing and delightful experience, from within their choice of Web browser. Any modern browser can run asm.js content, but specific optimizations currently present only in Firefox, ensure the most consistent and smooth experience. "This technology has reached a point where games users can jump into via a Web link are now almost indistinguishable from ones they might have had to wait to download and install," said Brendan Eich, CTO and SVP of Engineering at Mozilla. "Using Emscripten to cross-compile C and C++ into asm.js, developers can run their games at near-native speeds, so they can approach the Web as they would any other platform.""
You could also help Chrome improve its asm.js speed and get at least two major browser to have better 3D support, which would help everyone. Why not ask Google for some funding to do that, building on what you have so far? Good luck!!!
A 21st century issue: the irony of technologies of abundance in the hands of those still thinking in terms of scarcity.
http://www.npr.org/blogs/allte...
"He says it was as if "we removed the PowerPoint slide, and like a big glass barrier was removed between the speaker and the audience. "The communication became a lot more two-way instead of just the speaker speaking at length for 15, 20 minutes. The audience really started to come alive, to look up from their laptop computers and actually start participating in the discussion, which is what we were really trying to foster.""
That said, I still think more tools for empowering people to more easily make educational 3D presentations and such is a good thing. I think the long-term potential of something like Tao3D could be along those lines. Of course, there is already Alice and some other similar things:
http://www.alice.org/index.php
"Using an innovative programming environment to support the creation of 3D animations, the Alice Project provides tools and materials for teaching and learning computational thinking, problem solving, and computer programming across a spectrum of ages and grade levels."
Although, I don't think Alice runs in a web browser, and it Tao3D moved to run in a browser that might be interesting (although it does not now).
A 21st century issue: the irony of technologies of abundance in the hands of those still thinking in terms of scarcity.
Your post is long, so I'll only address a few snippets by lack of time.
Also, why do people keep making new languages with new syntax (generally with poor to missing error messages, debuggers, IDEs, documentation, and libraries) when we would so much more benefit from improved FOSS libraries for existing ones? I'd be a lot more excited about Tao if it was a JavaScript library that just supported some special format INI files.
The answer is complex. I try to address it in this article. It's not just for the sake of inventing a new language, it's because what I wanted to do I could not do with JavaScript.
Looking at a bit of the Tao overview video on SourceForge, it looks like variables don't need to be declared (ick!).
Variables need to be declared, but an assignment does declare a variable in that scope.
Also, requiring "locally" seems to imply that it has one of the worst "features/bugs" of JavaScript design for default globals? Or maybe I did not understand "locally".
The 'locally' function does not concern variables, but graphic state. It's a way to say "I don't want this rotation to escape this block". In OpenGL terminology, you can think of it as a PushMatrix/PopMatrix pair (and same for other attributes).
The main aspects of the language (like what is a code block, what is an argument) don't seem clear at first glance to me, perhaps because of various keywords being defined or seeing commas some places and not others?
I find the use of a comma without inner parentheses interesting for functions and arguments, where the comma in a sense is doing what Smalltalk keyword colons are doing. Still, it misses labelling arguments like Smalltalk, and why not drop the commas and just have all arguments separated by spaces and instead require nested expressions to be surrounded by parentheses if you are going in that direction? For example: "translate -500 100 (10 + x)"
If you define something like:
translate X Y Z -> translate X, Y, Z
then you probably are close to what you want. In practice, this forced me to add many parentheses (as you just did), and I found using a low-priority comma to separate arguments was much more practical.
I like the clean looking syntax without semicolons at the end of lines. I'm assuming it uses indentation after a comma to define code blocks?
Yes.
It it ran on JavaScript, maybe I'd try it today...
If someone wants to give Emscripten a try ;-)
If you're the author, despite any criticism above (just half-baked opinions from watching the video for a few minutes on-and-off while writing this), I'd still encourage you to keep moving forwards with it. Looks like a lot of fun! And it is exploring some new ideas and the library looks amazing. There is no question popular computer languages (Java, JavaScript, C++) have many warts and someday it would be great to have better languages (again though, Smalltalk and message passing is my favorite, even as I move to JavaScript now for various reasons).
Thanks for the encouragements.
Still, if you haven't already, you might want to make an ANTLR ( http://www.antlr.org/ ) grammar for Tao3D and generate JavaScript for a backend to the animations which uses asm.js for speed and so it can run easily in a web browser. Then people with a compatible recent browser could just click on a link and be up and running with Tao.
I have other plans to achieve that same effect. What out for Buddda ;-)
-- Did you try Tao3D? http://tao3d.sourceforge.net
http://xlr.sourceforge.net/
I like expandable languages (although they can suffer from developer confusion reading new constructs and now knowing what they do, depending on how easy it is to go to the source of the new construct, which is why I like Smalltalk's keyword approach integrated with its code browser). When I made another comment above about creating an ANTLR grammar for Tao3D to make it more portable, I did not realize you had created XL and it underlies much of the Tao3D language. So, I'd suggest instead you could add a new backend for XL so it can output JavaScript (ideally in asm.js format). Then, if you could compile your C++ to asm.js with emscripten, with a little bit of JavaScript framework magic, you might quickly have a version of TaoJS that runs in a web browser.
A 21st century issue: the irony of technologies of abundance in the hands of those still thinking in terms of scarcity.
A thread started by me in 2000 to comp.lang.lisp: https://groups.google.com/foru...
A site on indentational Lisp by someone else: http://readable.sourceforge.ne...
A 21st century issue: the irony of technologies of abundance in the hands of those still thinking in terms of scarcity.
Thanks for the reply, especially explaining "locally" (I was starting to wonder afterwards if it indeed was about 3D transformations not variables). Interesting point on commas vs. parens for clarity; I'll have to think about that.
Could not easily find a Google ref for "Buddda". :-)
On JavaScript, it is a frustrating language to work with, with several major design flaws. I'm using it right now for a mid-size project (dozens of pages in a single-page app, collecting 500+ different pieces of data, using Dojo) and it is painful and dragging on (even in just Java, it would have been done much faster). But, inspired in part by Dan Ingall's work on the Lively Kernel, plus what many other peopel say and do who all agree how badly JavaScript sucks, the fact that it runs (in theory) everywhere with one click is the big win. The URL is the biggest innovation there. As I've said before, if it does not have (or run from) a URL it is broken.
Everyone agrees JavaScript sucks:
https://www.google.com/search?...
There are many such things on the web:
"Why JavaScript Sucks And You Should Use It Everywhere"
http://www.youtube.com/watch?v...
It mentions asm.js, BTW.
Check out where the implementer of Smalltalk (Dan Ingalls) is doing now (very dynamic JavaScript): http://www.lively-kernel.org/
Perhaps the fairest thing to say about JavaScript though is:
https://news.ycombinator.com/i...
"[JavaScript] is actually a very strong language with a few very well known warts (like every other language on the planet has). The problem is that people try to use it as if it were Ruby, PHP, Python, Java. One can do that, but just know that it is an exercise in futility. It will cause frustration and one will come to the conclusion that JavaScript sucks when in fact, it is just that most people don't really take the time to _understand_ JavaScript."
A big issue with JavaScript in practice for simulation (typical to go with 3D) though is that, by default, it is essentially single-threaded (yes, other things are possible with webworkers and separate processes and such, but not in practice for most users). Having spent years debugging subtle issues with Java threading in a huge real-time-ish high-visibility high-availability app, I'm not fully sure that's a bad thing though. :-)
BTW, I think there are lots of value to making a big project FOSS, but rapidly getting contributors to do major changes right away (like a move to a web browser via JavaScript and emscripten) is generally not one of them. The big win is often when being free and available brings in small polishing changes and add-ons and also, if the software is written in a modular way to begin with, getting major new modules as part of an ecosystem -- as well as getting broader adoption by being free and open to increase demand for the core developers' other services and related books and training and other addons and so on. In practice, the learning curve for any major project is just too high for a casual use to make a significant core change, and even if they do, the core maintainers may reject the change or make other changes separately that cause bitrot in the change. If emscripten would just run on the core code, maybe someone would try it. But my guess is it require some code changes to the C++, changes to XL as mentioned elsewhere to output JavaScript, other changes to work with OpenGL as you mention on the page, and some JavaScript glue code to have an app, so non-trivial enough that few people will try it as a first thing (unless maybe they already have used emscripten several times). With an expected big effort, then the question is, what is the payoff for taking the risk? That payoff is going to be much bigger for the original authors probably than for some ra
A 21st century issue: the irony of technologies of abundance in the hands of those still thinking in terms of scarcity.
What kind of people are these that use vulgar, profane language in these posts. Personally, such people's critiques should be ignored and consigned to the local sewage inlet. A very sad comment on contemporary society.
I'm just considering "Responsive Design," maybe someone could demonstrate?
Application Specific Information:
dyld: launch, loading dependent libraries
Dyld Error Message:
Library not loaded: @rpath/QtWebKitWidgets.framework/Versions/5/QtWebKitWidgets
Referenced from: /Applications/Tao3D.app/Contents/MacOS/Tao3D
Reason: image not found
Really? You want to go back to re-inventing the wheel just because you can?
From reading the specification, it is less useful, slower, and require more bizarre "features" of the host than existing languages.
So, this is basically an open core version of Elm but with an emphasis on 3D and presentations.
"No man's life, liberty, or property are safe while the legislature is in session." -- Judge Gideon J. Tucker
Also, requiring "locally" seems to imply that it has one of the worst "features/bugs" of JavaScript design for default globals? Or maybe I did not understand "locally".
The 'locally' function does not concern variables, but graphic state. It's a way to say "I don't want this rotation to escape this block". In OpenGL terminology, you can think of it as a PushMatrix/PopMatrix pair (and same for other attributes).
So does this mean that Tao3D is call-by-value by default, and this explicitly breaks it to (effectively) call-by-value, rather than leaving the programmer to hack around with statics or constants and individual copies of arguments?
I like the clean looking syntax without semicolons at the end of lines. I'm assuming it uses indentation after a comma to define code blocks?
Yes.
Semantic whitespace makes me sad. :-(
Got them moderator blues I blieve I walk out the do', With these mod-points I been gettin', I 'most never post no mo'
Semantic whitespace makes me sad. :-(
Maybe you never had to work in a large project where the project most productive guy did no care about indentation at all. Whitespace has a semantics for our brain, so we might as well make that consistent with the code. It reduces syntactic noise, in concept programming jargon.
-- Did you try Tao3D? http://tao3d.sourceforge.net
So does this mean that Tao3D is call-by-value by default, and this explicitly breaks it to (effectively) call-by-value, rather than leaving the programmer to hack around with statics or constants and individual copies of arguments?
The locally function is conceptually equivalent to running its argument surrounding it with graphics state save/restore code. That's about it. So you can't deduce anything about call-by-value from it.
Now, to address your question in short, XL uses call-by-reference, and lazily evaluates the arguments as required to perform the call. Cases where you need to evaluate include: having to check against a type that is not "tree", comparing against a pattern, comparing for identity between arguments. For more details, see section 3.3. "Evaluation" of https://raw.githubusercontent..... You can also explicitly evaluate something with 'do'. In the 'if-then-else' definition given elsewhere, there is a 'do' for the bodies, to force evaluation of only that argument to if-then-else corresponding to the condition. If the condition is true, you only evaluate the true clause. If it's false, you only evaluate the false clause.
-- Did you try Tao3D? http://tao3d.sourceforge.net
Semantic whitespace makes me sad. :-(
Maybe you never had to work in a large project where the project most productive guy did no care about indentation at all. Whitespace has a semantics for our brain, so we might as well make that consistent with the code. It reduces syntactic noise, in concept programming jargon.
I like to let my IDE correct my indentation in such situations. I know what's coming next... "ah, but the diffs..." but that's a problem with the diffs, not the code. If the diff algorithm treated non-semantic whitespace non-semantically (ie multiple whitespace treated as single whitespace, as an HTML parser does) then it wouldn't be a problem, and the diffs would show up the actual material differences (the changes in start-block and end-block markers), and my IDE could set the indentation depths to my preferences, and adjust them based on screen and font sizes (so that I can debug on a netbook what a colleague wrote on a 24" monitor.
Got them moderator blues I blieve I walk out the do', With these mod-points I been gettin', I 'most never post no mo'