Tao3D: a New Open-Source Programming Language For Real-Time 3D Animations 158
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."
Most uninteresting (Score:2)
It looks like an INI file for describing different layers in windows.
Re: (Score:3)
Where did you see an example of the language? The links went to sourceforge (I didn't want to install the package just to see the language) and a marketing video.
Defining if-then-else is literally a couple of lines of code.
I'm curious how anyone thought that if/then/else was a difficult enough construct in popular languages such that it needed improving. I mean, it's a couple of lines of code in *any* language, isn't it? Anyone know how this language supposedly improved on the concept?
The syntax to pass pass blocks of code to functions is completely transparent.
So, functions are first class data members? Is it weakly typed then, like Lua?
Re:Most uninteresting (Score:5, Interesting)
Where did you see an example of the language? The links went to sourceforge (I didn't want to install the package just to see the language) and a marketing video.
There are a few code examples in the marketing video. There are several additional examples on the Taodyne web site [taodyne.com], but I'm pretty sure it can't take a slashdotting.
I'm curious how anyone thought that if/then/else was a difficult enough construct in popular languages such that it needed improving. I mean, it's a couple of lines of code in *any* language, isn't it? Anyone know how this language supposedly improved on the concept?
The idea is that in other languages, if-then-else is a built-in construct. You can't do something similar yourself without hacking the compiler. In Tao3D, if-then-else is a library element like printf in C. So you can change it.
Let's say you often use a specific kind of for loop. In Tao3D, you simply add the notation you need, and now your code is shorter and more concise. Once you decide that one of the language objectives is that you can extend it yourself and create your own domain-specific languages, it's obvious that a good test for that feature is to use the basic programming language constructs found in other languages, like if-then-else or for loops.
So, functions are first class data members? Is it weakly typed then, like Lua? In that language, defining a function is just syntactic sugar for assigning a chunk of code to a variable of the assigned name, so you can use it just like any other variable.
The part that is always verbose in existing functional languages (except maybe Lisp) is how you pass code to another function. For example, in Javascript, you'd pass a callback with 'function() { ... }'. In Tao3D, I got rid of everything but ..., and the language is smart enough to figure things out. This means that you can define a slide by passing bullet points, and it almost looks like Markdown, whereas if I was in JavaScript, I would need layers and layers of code. This particular aspect is detailed in an article called "Storytelling, the web is doing it wrong [taodyne.com]"
In Tao3D, you define the notations you want first, you design the (domain-specific) language around your notations second. In existing languages, it's the other way round, the notation is imposed by the language you chose.
I'm also curious what this particular brings to the table that a library couldn't have accomplished. Learning a new language is a fairly big hurdle for someone to take to develop for a particular platform. Part of the reason I think we have so many computer languages is that programmers simply love writing new languages, not that it really solved any new problem. Nothing wrong with that, but then again, don't expect us to care unless there was a good reason for the new language.
That's a very good point. The reason for XLR (the language underlying Tao3D) was that we have to invent new languages all the time, not because we like to, but because existing languages are very bad at accepting something that is not already in their DNA. You could not get lambda functions in C++ until the language committee sat around a table, standardized it, and then all compiler vendors had to implement it. But if what you need is for example a notation for symbolic derivative, or a notation for slides, or a notation for a specific kind of for-loop, you are stuck. So progress in programming languages is very slow, because each language adds its own little features, but drops tons of other features that already exist in other languages.
The idea with XLR was to create a language where the fundamental process was extending the language. And Tao3D is an example of a relatively large scale domain-specific language (specifically around 3D and animations). Most of it is precisely in a library. But you wouldn't know from using it. It feels "native".
Re: (Score:2)
In Tao3D, you define the notations you want first, you design the (domain-specific) language around your notations second. In existing languages, it's the other way round, the notation is imposed by the language you chose.
If by "existing languages" you're purposefully ignoring the countless languages that did this before, like Joy, Forth, Rebol, etc.
Re: (Score:2)
OK, game on. Give me the syntax for the following in Lisp, Scheme, OCaml, whatever:
Re: (Score:2)
Re: (Score:2)
Re: (Score:2)
can GP name "existing functional languages" (except JS) which don't have a decent lambda syntax?
I don't see the lambda calculus in your example.
Re: (Score:2)
I don't see the lambda calculus in your example.
There was none, indeed. In reality, Tao3D is based on tree rewrites, not lambda calculus.
I'm exploring a bit here what the implications are. Quite frankly, the type system as implemented is totally incomplete and still largely broken at the moment. I understood what needed to be done after 5 years of experimentation, and never got the time to actually implement it. Similarly, the language reference describes a runtime environment for functions, how closures and symbol tables are defined, etc. I prototyped t
Smalltalk made new keyword creation easy in 1980 (Score:4, Interesting)
http://en.wikipedia.org/wiki/S... [wikipedia.org]
"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
Re: (Score:3)
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 [wordpress.com]. 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 thin
Re: (Score:3)
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)
Re: (Score:2)
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. :-(
Re: (Score:2)
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.
Re: (Score:2)
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 pre
Re: (Score:2)
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 deta
Re: (Score:2)
That's a very good point. The reason for XLR (the language underlying Tao3D) was that we have to invent new languages all the time, not because we like to, but because existing languages are very bad at accepting something that is not already in their DNA. You could not get lambda functions in C++ until the language committee sat around a table, standardized it, and then all compiler vendors had to implement it. But if what you need is for example a notation for symbolic derivative, or a notation for slides, or a notation for a specific kind of for-loop, you are stuck. So progress in programming languages is very slow, because each language adds its own little features, but drops tons of other features that already exist in other languages.
The idea with XLR was to create a language where the fundamental process was extending the language. And Tao3D is an example of a relatively large scale domain-specific language (specifically around 3D and animations). Most of it is precisely in a library. But you wouldn't know from using it. It feels "native".
Common Lisp macros allow you to create complex language extensions which are not library functions. They perform as though they are built in. Before anyone writes a "new" language they should at least survey the already existing solutions.
Re: (Score:2)
Common Lisp macros allow you to create complex language extensions which are not library functions. They perform as though they are built in. Before anyone writes a "new" language they should at least survey the already existing solutions.
Yes. You can actually see XLR as a Lisp without the parentheses.
Re: (Score:2)
Common Lisp macros allow you to create complex language extensions which are not library functions. They perform as though they are built in. Before anyone writes a "new" language they should at least survey the already existing solutions.
Yes, but unfortunately it still leaves you programming in Common Lisp. Lisp was not designed for humans -- it was designed to be easy for the computer to parse. Worse, ukasiewicz's prefix notation may be known as "Polish notation" now, but he called it "parenthesis-free notation" when he invented it (and that was his whole purpose in inventing it), and yet the guys who invented Lisp used prefix with mandatory parenthesis. Lisp was an interesting idea at the time, and dealt with the constraints of the time,
Re: (Score:2)
You are correct that Lisp was not designed for humans. It was designed for mathematicians.
Re: (Score:2)
Thanks for the blog link and detailed responses - that gives me a lot more information than the summary for digestion.
After an admittedly quick read over the blog post, I would suspect that perhaps most of what Taos3D does could be done through libraries, but it would probably sacrifice some elegance and require a lot more boilerplate code. Domain-specific languages do have the advantage of being able to tailor the language for specific use cases, of course, and XLR seems like a pretty interesting way to d
Re: (Score:2)
The idea is that in other languages, if-then-else is a built-in construct. You can't do something similar yourself without hacking the compiler. In Tao3D, if-then-else is a library element like printf in C. So you can change it.
Let's say you often use a specific kind of for loop. In Tao3D, you simply add the notation you need, and now your code is shorter and more concise.
Am I the only one who thinks this is a fucking terrible idea? It's a recipe for obfuscated, unmaintainable code.
Dear Programmers: Quit filling your code with goddamn macros. Use the language as implemented, so everybody else can figure out what the fuck you're doing.
Thank you.
Re: (Score:2)
Dear Programmers: Quit filling your code with goddamn macros. Use the language as implemented, so everybody else can figure out what the fuck you're doing.
What, and make ourselves easily replaceable? In the absence of unions, code obfuscation is the only job security we've got. ;^)
Re: (Score:2)
Re: (Score:2)
Re: (Score:2)
POV-Ray programming language is roughly equivalent to C precompiler. Calling it "powerful" says more about the competition than the language itself.
Re: (Score:2)
Re: (Score:2, Interesting)
I recoded a 25-hour number crunching app at work in C++ with lock-free threaded workers that trimmed that job down to 17 minutes. I then made them purchase Intel Compiler (ICC) and a simple recompile brought that time down to 13 minutes.
The machine it ran on has top of the line Xeons with a terabyte of memory and redundant PSU's along with some GPU code.... An unexpected side-effect of my optimizations was that the power bill dropped on our cage by an order of magnitude.
So enjoy your huge power bills with a
Re: (Score:2)
Where is IF-THEN-ELSE more verbose than that? (Score:2)
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 [sourceforge.net] (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.
Re: (Score:2)
I'm curious, when is the definition of a content-free if-then-else statement more than a couple of lines?
The point is that you define the if-then-else control structures. If you wish, if-then-else is a macro in Tao3D, not a built-in.
(though in the sample I linked the indenting doesn't seem to be very consistent at the end)
Can you tell me where you think it's not consistent?
Re: (Score:1)
Re: (Score:2)
Yes, of course, I have a vested interest. But I'm not inquisitive, I want to know if there is a (real or perceived) inconsistency in the indentation.
Re: (Score:2)
Well, nothing wrong with that, but if that's the case, I think that a link to a blog post or article that introduces or describes the language along with it's features and benefits would be a lot more interesting than posting a link to sourceforge and saying "look, new language". The marketing video is slick, but tells us zero about the language, which seemed to be the point of the posting.
I don't think there's anything wrong with being inquisitive either. I'm not sure why you denied that, since you're wa
Re: (Score:2)
Here is that tells you more what this is about. [wordpress.com]
Re:Where is IF-THEN-ELSE more verbose than that? (Score:4, Informative)
The actual definition of if-then-else can be found here [github.com]. It looks like this:
The definition of the 'for' loop is more convoluted and is actually found in C++ code [github.com]. It looks like this:
Re: (Score:2)
From the (horrible) documentation:
3.1.1Rewrite declarations
The infix -> operator declares a tree rewrite. Figure 21 repeats the code in Figure 3 illustrating how rewrite declarations can be used to define the traditional if-then-else statement.
if true then TrueClause else FalseClause -> TrueClause
if false then TrueClause else FalseClause -> FalseClause
Figure 21. Examples of tree rewrites
The tree on the left of the -> operator is called the pattern. The tree on the right is called the implementation of the pattern. The rewrite declaration indicates that a tree that matches the pattern should be rewritten using the implementation.
Not exactly what I expected. For example, in Forth, you'd do something like this: ; ; ; ;
: branch fromr dup tor @ fromr + tor
: notbranch not fromr dup tor @ 1 - * fromr + 1 + tor
: if immediate ' notbranch , here 0 ,
: else immediate ' branch , here 0 , swap dup here swap - swap !
: then immediate dup here swap - swap ! ;
Less clear, without question, but also way less magic. The documentation, unfortunately, doesn't provide enough information for me to have implemented thei
Re: (Score:2)
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 [sourceforge.net] (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.
Looks like the "then" is the same as running code inside "{ }". Could be wrong, then again, couldn't care less about whitespace reduction, it usually costs in readability for minimal gains. I like my Brackets, makes code clear and concise.
Video tutorials (Score:1)
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 [youtube.com]. Another one shows how you can animate 3D objects [youtube.com]. And there's an couple of interesting ones about GLSL real-time shaders [youtube.com].
Apparently, it's quite powerful, but it may take quite a bit of learning to master.
Re: (Score:1)
Re: (Score:3)
Here are a few links:
Tao3D documents on Gitorious [gitorious.org]
Taodyne tutorials [taodyne.com] usually have the code corresponding to the videos. But I'm pretty sure our small server won't take a slashdotting. Use it while it lasts.
There are also a few examples [sourceforge.net] in the source tree itself.
Re: (Score:2)
Consider it a "video demonstration" then, and consider that it demonstrates some curious weaknesses in the language. (I watched the DNA strand video.)
I don't like subroutine names that include something that looks like a parameter, so things like rotatex and rotatey set me on edge a bit. It gets worse when this is inconsistent, and you see a subroutine called vertical_align for vertical alignment, where the seeming parameter (vertical) is now before the generic (align), and separated by an underscore instea
Re: (Score:2)
I don't like subroutine names that include something that looks like a parameter, so things like rotatex and rotatey set me on edge a bit.
If you prefer, you can use the plain rotate [taodyne.com]. But rotating along X, Y or Z is frequent enough to deserve a shortcut. Not different from CSS transform [w3schools.com], by the way.
It gets worse when this is inconsistent, and you see a subroutine called vertical_align for vertical alignment, where the seeming parameter (vertical) is now before the generic (align), and separated by an underscore instead of run together. Not only is this an internal inconsistency, but it's inconsistent with English, as "align" is a verb, and we would put in an adverb "vertically" after the verb normally. And then it gets worse again, as the command for horizontal alignment is... "align".
You are right, align_vertically would be more sensible. Exercise for you: fix it [github.com] ;-) As for align, that's the common case, so I'd rather keep it that way.
The grammatical inconsistency continues with other commands/subroutines taking on names with no verb component at all (eg the command color, with no verb or assignment operator.
That derives from OpenGL, which has glRotate and glTranslate, but glColor and not glColorize. BUT it's not inconsistent. It's actually fairly smart. The color is an attribute, and glColor just sets
Re: (Score:2)
Thought for the day: whenever designing something for other people to use, you should take all feedback from your potential users and prove to yourself why the feedback is correct before attempting to show the giver why it's wrong.
Why? Firstly, because nobody will give you any feedback at all if your default response is to prove to everyone that their feedback is so valueless to you (and if you don't want feedback, then this whole thread is just self-promotion, which isn't popular here).
Secondly, because we
Re: (Score:2)
Thought for the day: whenever designing something for other people to use, you should take all feedback from your potential users and prove to yourself why the feedback is correct before attempting to show the giver why it's wrong.
Oh, I got it backwards then. I thought you had been trying to prove me wrong all that time... Sometimes, you were right (e.g. black characters on black background). Sometimes, you've made a good point (e.g. align_vertically). Sometimes, I feel your point is less convincing (glTranslate and glColor). Sometimes, I think you are plain wrong (global state is evil), and I express disagreement. That's how a discussion goes. I enjoyed it, sorry to hear that you did't seem to.
if your default response is to prove to everyone that their feedback is so valueless to you
If it felt so valueless to me, do you t
Re: (Score:2)
No, that's trying to help you become an early contributor. I would not have spent the time locating the exact line to patch otherwise. Remember, open source is about you and others being able to influence Tao3D. But since you obviously don't want to do it this time, I patched it myself [sourceforge.net]. Your name in lights, tadaaa.
I have my own coding project on the go at the moment, so I'm not looking to contribute to anything else at the moment.
Well, text layout is still done in a 2D text box. So align specifies the horizontal alignment and justification within a line (the frequent case), and align_vertically the alignment and justification of the lines and paragraphs vertically.
You'll probably hate me for saying this, but why not just write text elements in an established format... like HTML?
I also realise that this flies in the face of my own moaning about internal consistency, but I see it as valid in this case mainly becaus
Re: (Score:2)
Sorry -- I'm tired and angry about various things
Really sorry to hear that. But apology gladly accepted ;-)
You'll probably hate me for saying this, but why not just write text elements in an established format... like HTML?
Now you can [sourceforge.net]. But HTML is not a very good format for dynamic text. How do you represent the following with HTML?
paragraph "It is currently " & hours & ":" & zero minutes & ":" & zero seconds
zero N -> if N < 10 then "0" & N else N
I believe that the typical usage of presentations will see a lot of minor adjustment of the most PowerPoint-like elements
This is true with what Powerpoint can do. With Tao3D, when you discuss a simulation, a lot of time is spent refining the simulation.
For one thing, reusing existing collateral would be more of a cut-and-paste affair
Even without the patch above, you can copy-paste HTML into Tao3D.
the language confuses the two metaphors of series-of-commands vs collection-of-properties.
There is no confusion, there are only series of commands, although with a homoiconic language, they are also data, so you can view them as propert
Re: (Score:2)
First up, can I suggest adding the word "visualisation" to your standard blurb? A lot of our differences arose from the word "presentation", and my interpretation of that as low complexity. Your stargazing example was very impressive, but I was led to expect something on a very different scale from your wording and the focus on slides in your introduction videos. The graphical rendering of a huge astrological database is definitely what I would consider "visualisation".
the language confuses the two metaphors of series-of-commands vs collection-of-properties.
There is no confusion, there are only series of commands, although with a homoiconic language, they are also data, so you can view them as properties and make them behave like properties if you want to. The fundamental paradigm remains sequential evaluation (using parse tree rewrites in that case).
I'm talking about a visual confusion.
Re: (Score:2)
First up, can I suggest adding the word "visualisation" to your standard blurb?
Good idea, done. It was hidden in the middle. Renaming Tao Presentations to Tao3D is similarly an attempt to avoid the misconceptions about "presentations".
I'm talking about a visual confusion. The reason I keep using the word "opaque" is that when I look at the code, the intended (semantic) behaviour is obscured.
Are you sure this has nothing to do with you not being familiar with the language?
You've suggested several times that having effectively only one syntactic structure in the language makes it more consistent, but my object with regards to consistency is precisely the contrary: that the syntactic rule is inconsistent because there is no clear mapping of syntax->semantics.
Maybe the word you are looking for is not "consistency" then. "Consistent" means there are no exceptions to the rule, which is easier to achieve when there are few rules. In C++, f(x,y) may be a macro invocation, a function call, a constructor, and there are different rules
Re: (Score:2)
Re: (Score:2)
It's not implicit lists. Tao3D, like Lisp, is strongly homoiconic. In other words, it's primary data structure is used both for programs and data. In Lisp, that primary structure is the list. In Tao3D, it's the parse tree. Manipulating parse tree structures is fundamental in Tao3D programming.
Now, conceptually, you can correctly think of 1,2,3 as a list. But you could as well have 1;2;3, which is also a "list", except it's built with a different infix operator.
So when I write something like:
foo X,Y -> ba
Point? (Score:1)
Re: (Score:2)
Porting to a web platform is something I'd like to see happen. When we started Tao3D, WebGL and even Javascript were not mature enough, and it would have been unreasonable to do so. Today, I don't know. There are still a few things in Tao3D I think Javascript would have a hard time doing. Feel free to try. That's one of the reasons we opened the code.
Re: (Score:2)
Not mature enough it 2011? My BlackBerry Playbook had excellent support for WebGL in 2011. Not a whole lot has changed since then. Hell, my old Playbook still handles modern WebGL demos without a hitch. What, exactly, were you missing back then?
Re: (Score:2)
The project actually started in 2009. And I'm not even sure that WebGL is mature enough today for some of the things we do. It's not so long ago that Microsoft adopted it. And hey, it can't even display the background shaders on http://tao3d.sourceforge.net..... [tao3d.sourceforge.net] Enough people started complaining that I had to remove them.
So if WebGL is not good enough for a web page, I doubt it would be good enough for many of the features in Tao3D. But one benefit of open source is that you can try and transcode it in Java
Re: (Score:2)
I'm really interested to see you display 3D extruded arabic text on your 2011 Blackberry ;-)
Why would that be complicated? 3D extruded text is pretty simple, and handling RTL has nothing to do with WebGL.
Re: (Score:2)
Sorry, my example was confusing. It's not about RTL it's about number of polygons. Writing most non-latin scripts in small font size tends to create zany numbers of polygons. Same thing with a few contorted latin fonts.
Re: (Score:2)
What algorithm are you using? There may be a more efficient approach (er, as in fewer triangles, not less time).
That still doesn't answer my question about what you think is lacking in WebGL.
Re: (Score:2)
For the algorithms, I'll let you look at the code :-) It's mostly in path3d.cpp [github.com], text_drawing.cpp [github.com] and glyph_cache.cpp [github.com].
There are several algorithms that are activated separately depending on: whether you draw flat text or extruded 3D text; whether there's a texture or not; the size of the font; and more. The primary ones are: render to textures and draw quads, render polygons for the outline and play that back, or extrude the outline with triangle strips. Then there are some tricks to minimize the number of
Re: (Score:2)
The text of the previous paragraph is 69475 triangles in Arial, 138950 when extruded, 171298 polygons in font "Amaze" not even extruded,
Not extruded? Why not render the text as a texture and slap it on a triangle strip? Why not render the glyphs as a large texture and make clever use of UV's? (You'd use more triangles, 2 per character, but that's still way fewer than the approach you're using.)
You might also want to look at other, clearly more efficient, solutions. Take a look at three.js's ShapeGeometry. and ExtrudeGeometry -- A quick test shows great quality, with far fewer triangles.
That being said, if you want the text to look any good, you have to emit a large number of triangles for even relatively simple text.
On the basis of my experience, I strongly disagree.
Re: (Score:2)
Just to clarify, the poly counts I gave were actual triangles processed by the card when disabling texture-based rendering in Tao3D. This is the only case that always works, so it's both the fallback scenario and the worst case scenario. Therefore, that's the one I'm most interested in.
Not extruded? Why not render the text as a texture and slap it on a triangle strip?
Obviously, Tao3D does that [github.com] when that's possible.
Why not render the glyphs as a large texture and make clever use of UV's?
Tao3D also does that [github.com] when it makes sense.
(You'd use more triangles, 2 per character
Hmm, how do you draw a glyph with only one triangle per character? Or do you mean that we can use two triangles for multiple characters?
Re: (Score:2)
May I suggest that you should study how the Tao3D code works a little more before being so dismissive
I can only go by what you tell me. I have no interest in digging through your code base for Slashdot discussion.
Quick test with what? How did you create a text mesh with Three.js to start with?
With my computer, a code editor, and the (easily accessible) documentation. It took about 10 minutes. Interestingly, it took less time to write and run that test than it took to find the bit of the documentation for Tao3D I quoted in another post.
First, I'd like to point out that even if you can do texture-based rendering, you still need to first render to a texture with polygons or, alternatively, with triangles and a shader doing the Bezier fill.
That statement is either completely false or incoherent. Care to give it another go?
you still need a decent number of polygons per glyph or any non-basic font looks like crap.
Sure. What I'm saying is that, from the numbers you've provided,
Re: (Score:2)
With my computer, a code editor, and the (easily accessible) documentation. It took about 10 minutes.
I meant: you probably have some code that looks like:
var geom = new THREE.TextGeometry(T, { size : S, height: H, curveSegments: CS, font: F });
I was interested in the parameters to that code.
That statement is either completely false or incoherent. Care to give it another go?
Unless you are rendering bitmap fonts, at some points, your glyph outlines are first rendered to the texture. It may be 2D, chances are it's still done by the graphic card on modern systems.
Sure. What I'm saying is that, from the numbers you've provided, your product clearly lots of room for improvement. Even with basic Latin, you're averaging 128 triangles/character for flat text!
Actually, you are right, the code I quickly implemented was counting the array elements, not the polygons. So, roughly, the number
Re: (Score:2)
I'm not comparing three.js to Tao3D. I was using it as an example of a system that, from the information I had from you, produced 3d extruded text more efficiently.
There are other 3d presentation offerings: Aurora 3D, intuiFace, Presente3D, Ventuz, and a host of others -- no programming language (obscure or otherwise) required -- that support video & display walls, live data driven graphics and video feeds, etc.
What does Tao3D offer over competing products like these?
Re: (Score:2)
from the information I had from you, produced 3d extruded text more efficiently.
Then you misinterpreted the information I gave you, because my point was that designer, ideographic or Arabic font have complex outlines. AFAICT, Three.js cannot use such fonts (maybe there's a trick I don't know).
What does Tao3D offer over competing products like these?
These are all great products. What Tao3D offers is:
1. It's notably cheaper, and now there's also a free software version.
2. It's a programming language. That being said, I know Ventuz can at least be scripted, not sure about the other two.
3. Stereoscopy and auto-stereoscopy are just a mouse click
Re: (Score:2)
Sure. What I'm saying is that, from the numbers you've provided, your product clearly lots of room for improvement. Even with basic Latin, you're averaging 128 triangles/character for flat text!
While it's only 128 edges (not triangles, I had misinterpreted what I was counting), it was still worth investigating. And I modified the way Tao emits polygons [sourceforge.net] to be more aggressive for small sizes. I also added user-controllable parameters in case the defaults are not suited for a specific use case. Code reviews and comments are welcome.
Thank you for your input.
asm.js and emcriptem (Score:2)
I looked at the link you mentioned in another post: http://www.taodyne.com/shop/de... [taodyne.com] ..."
"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... [wikipedia.org]
http://en.wikipedia.org/wiki/E [wikipedia.org]
Re: (Score:2)
Ah, I missed your point completely in the GP. Sorry.
The problem it addresses is the complexity of creating the simplest 2D or 3D scripted animation, and how this process does not scale or compose well.
Here are a few random examples:
* Create Christmas card pictures for all my friends that are automatically tailored for each of them.
* Display fragile objects in a museum, photographed in 3D (or scanned), shown in 2D, in 3D or in glasses-free 3D
* Display complex data or simulations for a scientist, in a way tha
Not the right way, descubes (Score:2)
Re: (Score:2)
I try to answer questions to be helpful. Sorry if that bugs you.
BTW, some people see 'descubes' where he isn't ;-)
Re: (Score:2)
By the way, what I'm looking for is contributors to the project. So yes, I steer. I don't care about the whiners on Slashdot. Their numbers increased steadily over the past few years. It's too bad. I still remember when it was not hard to find interesting comments on Slashdot.
Re: (Score:2)
Things you need to fix if you want users (Score:2, Informative)
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
Re: (Score:2)
What are the objections of the people you know to GPLv3 for a new project? I know of the objections for Linux. I also know why I like GPLv3.
The website uses Reveal.js, a presentation framework for the web. I find it useful for tutorials and such. You don't have to like it any more than you have to like the GPL v3.
I am the author of XL. So I guess I don't get it twice then ;-)
XL looks pretty neat! (Score:2)
http://xlr.sourceforge.net/ [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
Also on indentation-based languages like XL (Score:2)
A thread started by me in 2000 to comp.lang.lisp: https://groups.google.com/foru... [google.com]
A site on indentational Lisp by someone else: http://readable.sourceforge.ne... [sourceforge.net]
Re: (Score:2)
Perhaps. But the important question is: are these the kind of people you want within 10 feet of your code, or anything valuable for that matter? After all, GPLv3 was made to close loopholes in GPLv2, so the cynic in me wonders just why one would object to it, unless one was looking towards to exploiting these loo
Re: (Score:2)
Grammar ? (Score:2)
Re: (Score:2)
It's a recursive descent parser, which is technical jargon for "I know enough about parsing to drop Lex and Yacc".
There is a for XLR, work in progress (both the language and the doc). [sourceforge.net]
Re: (Score:2)
Re: (Score:2)
having noted the somewhat high-nosed, arrogant tone of your answer
Too bad you failed to note how high-nosed and arrogant your own "Seriously...!" sounded :-)
Anyone into compiler construction and wanting to / trying to use your language would want a grammar
Let me disappoint then. I don't think you can even write a valid EBNF for XL, it's too dynamic for that. Let me explain why.
First, scanning and parsing are really very simple. The scanner [sourceforge.net] is 747 lines of code with comments. The parser [sourceforge.net] is 659 lines of code with comments. The scanner produces a stream of tokens. The parser produces an abstract syntax tree built with exactly 8 node types: integer, real, text, name, infix
Re: (Score:2)
Let me disappoint then. I don't think you can even write a valid EBNF for XL, it's too dynamic for that. Let me explain why.
[....]
Again, it's "yuck" for formal grammar nazis. But again, I don't care, because it just works.
Except when it doesn't just work and you have to debug, because then what you describe as "dynamic" starts to feel like "unpredictable" and it takes far longer to work through than it should. I've only looked at a very small example, but I cannot imagine myself ever trying to teach how to program in this language. How do you teach someone to think like something with very little internal logic or consistency?
Re: (Score:2)
Except when it doesn't just work and you have to debug, because then what you describe as "dynamic" starts to feel like "unpredictable" and it takes far longer to work through than it should. I've only looked at a very small example, but I cannot imagine myself ever trying to teach how to program in this language. How do you teach someone to think like something with very little internal logic or consistency?
The fact that its grammar cannot be expressed as EBNF (like Ada) does not mean that it's not precise and consistent. You look at some input and at the xl.syntax file, and you know exactly what parse tree you are getting out of that input. You look at the various rewrite rules (the things given by the rewrite operator -> and you know exactly what's going to be executed and why.
Overall, the grammar is much more consistent than most other languages, if only because it's so small. As I indicated elsewhere in
Re: (Score:2)
The fact that its grammar cannot be expressed as EBNF (like Ada) does not mean that it's not precise and consistent.
I wasn't objecting to the fact that it can't be expressed in EBNF, but the reason you gave -- that so much of the language can be redefined at will. Suddenly you have to look in dozens of different places to verify what the most basic features of the language are.
Overall, the grammar is much more consistent than most other languages, if only because it's so small. As I indicated elsewhere in this discussion, scanner and parser together represent some 1500 lines of C++ code, and a syntax file [github.com] that is currently 62 lines long. A complete and precise description [github.com] of the core language in plain english takes about 50 pages. Compare that to the 700 pages for the C++ standard, and tell me which one is easier to teach?
Lisp has a tiny grammar and a small standard, and that leaves us buggering about with a visual confusion of brackets and parentheses. The point of high-level languages is to impose a more human-freindly logic over the CPU's instruction set.
What I n
Re: (Score:2)
Suddenly you have to look in dozens of different places to verify what the most basic features of the language are.
Not really. The parsing is defined by xl.syntax, a file that currently contains 62 lines, so it's not complicated. The semantics, on the other hand, comes from libraries, including some that are built-in. In the case of base XL, the library components implemented in XL are in builtin.xl, and the components implemented in C++ are in basics.tbl.
But XL and Tao3D put way more in libraries than regular languages. Remember when we moved from BASIC to C? In BASIC, the 'PRINT' statement was a keyword. In C, 'printf
More annoying presentations (Score:2)
Related issue to your insightful point (Score:2)
http://www.npr.org/blogs/allte... [npr.org]
"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
Re: (Score:2)
You don't get it. He's not trying to tell you that presentations everywhere are supposed to look like what he demos on the screen, and that everybody must change, he's showing you that there is a great language and environment for making interactive presentations in 3D.
But in his own demos, he trips into the "too much potential results in too much noise" trap -- he adds letter codes to the base proteins in the DNA helix, in default black, then forgets to change the colour before applying the space theme, at which point they're hidden and promptly forgotten about.
Besides, that whole demo has no persistent representation of the structure, except one that is hacked in by spiking the random number generator with a seed so that when the 3D objects are generated from the ground
Unity + (JavaScript | Boo | C#) (Score:2)
Re: (Score:2)
Re: (Score:3)
Re: (Score:2)
"Democrats and republicans can twist any topic to be a battle between democrats and republicans."
FTFY. :)
Re: (Score:2)
Let me guess ... you're a democrat ...
Seriously, pot meet kettle, you're both black as night.
Re: (Score:2)
You missed where GP was being satirical, I think.
I missed it, too. In fact, I still miss it when I re-read the post. I miss it so hard I'm pretty sure it isn't there.
Funny!!! (Score:2)
"Oh darn, you're right! Let me upgrade my trollbot.
$ sudo apt-get upgrade systemd
There we go, much bett
KERNEL PANIC"
LOL!!!
Re: (Score:2)
I put the sample code on http://tao3d.sourceforge.net/ [sourceforge.net] closer to the beginning. Hope that helps.
That being said, people don't seem to like the "Reveal.js" form factor too much overall. I may have to change that.
Re: (Score:2)
"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."
Just as a guess, putting any person-to-person (mis)communication or personality aspects aside, I think a lot of programmers are frustrated with the state-of-the-art in programming. Examples include the proliferation of JavaScript despite its needlessly confusing warts and missing pieces (sam
Re: (Score:2)
Re: (Score:2)
Sorry about that. Bug in the packaging script. Should be fixed now.