1- Scope: Dart is mainly intended as a language running on a browser. Excess is intended to run anywhere, desktops, phones, browsers. Actually, to run on all of them at the same time while changing your code very little.
2- VM: VMs are tricky, error prone, and they make it hard to port existing code. I have no doubt Google can pull it off, but these things take years to mature. XS, in turn, was designed to be VM-agnostic, which is to run on other VMs. Ones that have taken the years to mature, that, right there, guarantees your apps will run solidly. But we go further, we have designed the platform to rapidly integrate foreign libraries. So, if we want 3D graphics (for instance), the compiler spits pure three.js code on a browser and pure (say) Ogre code on a desktop. Based on the same code! As a disclaimer, xs does have a vm, but it runs inside the compiler only, and it was a major pain.
Quick note: This approach allowed a meager 3 part-timer team to put up 30+ samples , and since those samples compile to external libraries they are mostly guaranteed to be bug-free, unless the bug happens inside those libraries, which are solid. So, solid solid code for you, absolutely independent from xs. Consider also that, when a new awesome library pops up, your code could be running on it only by recompiling.
Quick note 2: I know the idea of Dart is to be VM fast, to which I respond: I could very well generate in C or well... Dart :)
3- What, not how: XS apps are first described in a data language (xml, json). And that description gets merged seamlessly into your application. This is not a new concept, but one that’s sorely lacking in Dart. The advantages of this approach are very well documented with one obvious one being your apps can be visually created, or at least a large part of them. This would be the difference between, say, WinForms and MFC.
4- Syntax: Our language is designed so you don’t have to learn it. You know javascript? This code is valid:
var x = 10;
function myFunc()
{
...
}Or you do java/c#?
private int x = 10;
public void myFunc()
{
...
}They mean the same thing… actually, in a couple of versions xs will 98% compatible with js. I only have to add code functions. But, then we innovate a little, and not in the “look how cute we are” way. For instance, xs assign first class status to two of the most common modern-day constructs: properties and events:
property myProp : int =
{
//get code
}
{
//set code
}(and a few variations) and:
on click(x, y)
{
...
}and then we will introduce behaviours, a brand new, super useful construct no present anywhere (to my knowledge). And, on top of that, we provide DSLs.
5- DSL: xs supports domain specific languages foreign to its syntax. I will not into the advantages of this, they should be fairly obvious. Instead a little code:
asynch()
{
var result = do_something_expensive_in_another_thread();
sync()
{
show_results_in_the_ui_thread(result);
}
}you can see this in action here (this sample is about 500 loc short of what got Instagram a billion dollars) and if you see the output code (click run) you will see how this very simple construct saves the poor programmer many-a-line of boilerplate, mostly useless web worker code. Some other dsls we support: sql, ajax, shell. In short, a language without DSL is a very boilerplatish language. Please note that these are not part of the language spec, so, once the SDK is out you could write your own dsls that serve your own app needs.
6- Animation: I assume Dart has as on of its objectives to become a substitute of Flash. It wouldn’t make sense not to try at least. But there is a severe lack of animation system to it. Animations are complex animals (I come from gaming, where you would find crazy complex behavior) . Such behavior is extremely difficult to write/maintain when done by hand (as in, requestAnimationFrame) and is practically impossible to do based on keyframe animation only (ie css3). Take a look at this sample: this animation is written in about 75 lines of xml… no code, no state, nothing. Try doing this in Dart, count the LOC. All in all I think our library is by far the best available today, add a visual editor to it and it would kick Flash into a crying shame. I apologize about the overconfidence.
7- Canvas: What fun is a canvas (as in HTML5 canvas) if you have to draw every by hand, dealing with contexts, etc? Well, look around and you’ll see nobody has done nothing of significance using it. It is very cool for demos, not so cool when you try to write real-world applications. Excess has a very strong canvas library containing almost 20 components, that ties naturally into the anim system and even can be embedded onto 3d surfaces! This has never, ever been done before. Not in about a 100 LOC.
8: UI: I seemed to have read Dart is writing yet another UI library? Not a good idea, such libs also take years to become solid . Excess? we use jQuery, without actually knowing jQuery… to the programmer eyes the UI behaves exactly the same as the Canvas library, just tags in xml. And again, solid, tried and tested libraries that will not fail you and that you won’t have to wait until they mature.
9: Code manipulation: Since we are not tied into a VM, we can manipulate the user code to our liking. We can lie, cheat, steal, insert complicated calls into the resulting code so you, the developer, the one that matters, have it easy. Just to give you an example: we linearize asynchronous nodejs code, so the poor dev can write code the way he/she is used to (blocking code) while at the same enjoying all the benefits of nodejs. We do magic with this stuff, and still in very few lines of compiler code (a complex idiom, like the anim system, goes for about 400 LOC of a meta-programming language)
10: Budget: Finally, please consider that all these was made with a very small team supported exclusively on my sub-par dev salary. Dart has a what? 20-25 strong full-time team? 300+ contributors? I can only imagine where we could get with a fraction of that… but nobody said life was fair. Still, you can help… so, please do.
And you can start helping by destroying my points... if you dare :)
Happy Hacking,
Emilio
1- Scope: Dart is mainly intended as a language running on a browser. Excess is intended to run anywhere, desktops, phones, browsers. Actually, to run on all of them at the same time while changing your code very little.
I don't want to be the bearer of hard truths considering how much time it looks like you've invested in your project but Dart, just by having Google's backing (and its best language designers and implementers assigned to it) is going to have more potential and opportunity for developers. Attempts by small team or single hacker will likely not come close to matching the quality and "batteries included" approach the Dart platforms envisages.
E.g. IDE, tooling, debugability, static analysis, package manager and more importantly the brand recognition to build a strong community, which will be important considering it the primary source contributing libs to the package manager.
1- Scope: Dart is mainly intended as a language running on a browser. Excess is intended to run anywhere, desktops, phones, browsers. Actually, to run on all of them at the same time while changing your code very little.
You mention scope, but you must be aware that Dart both compiles to js runs in the browser and includes a server VM that can run on the server and inside Dartium and will be in future be embedded inside Chrome. There is no other language on the horizon that will work seamlessly with the DOM apart from JS and Dart that will enjoy this opportunity. Google doesn't have control of other browser vendors (which is why compiling to JS remains important) and all browsers attitude towards using NIH-only technology basically ensure all browsers wont be able to reach consensus. The hope of course is if Dart can prove itself in the wild providing superior productivity and run and start-time performance that other browsers would want to adopt as well - given Dart's extremely lax and forgiving licence (and patent freedoms) they will have every opportunity to do so.
Basically this sounds like FUD, right from the outset Dart provides end-to-end development, in fact nearly all my projects in Dart run on the Server VM only (networking/httpserver/etc). If anything V8 might've been accused of being optimized to only run in the browser (assuming running on a server was taken into consideration). But based on the strength and quality VM, Ryan adopted it for node which is where it's stayed. Given the Dart's team always intend it, and already have it running on the server with native OS lib bindings - this argument should be moot. Implementers of V8 now work in Dart, and as a goal they always envisaged an end-to-end stack.The potential for Dart is huge, it has the backing of Google's talent and resources giving it the best opportunity of success. If it plays out like everyone intends we'll see it integrated as a core part in the Chrome platform which will allow us to write Chrome Extensions, available in Chrome OS, hosted on the WebStore, even to build "native behaving" packaged desktop apps http://code.google.com/chrome/extensions/apps.html we may also potentially see this as another language target in App Engine, and hopefully as another language option in Android. I personally hope it becomes a better Java so I can use it for mainstream general purpose programming instead of C#/Java.
2- VM: VMs are tricky, error prone, and they make it hard to port existing code. I have no doubt Google can pull it off, but these things take years to mature...
If anyone can pull it off, it would be the same guys who pioneered the fastest javascript engine (V8), who having the benefit of hindsight are working on the Dart VM. Given their experience, proven record, input into language design and accessibility to the rest of the language team, frankly I see no better people for the job. Only a native VM will be able to enjoy features like Dart's "snapshotting" (i.e. vastly improved start time performance) and native web inspector tools + Browser>IDE integration.
3- What, not how: XS apps are first described in a data language (xml, json). And that description gets merged seamlessly into your application. This is not a new concept, but one that’s sorely lacking in Dart.
This might be a stylistic/aesthetic preference/advantage because I surely am not missing another XML declarative language. If there is demand for it, it can just as easily code-gen into Dart and run where it does.
4- Syntax: Our language is designed so you don’t have to learn it. You know javascript?
I'm personally looking forward to a better language than JavaScript and do not miss continually typing the 'function' keyword.
5- DSL: xs supports domain specific languages foreign to its syntax.
The Dart team are looking at ways at improving async code where they were trying different experiments to see which approach will work best. At one point they had a working prototype with the async/await construct inspired by C#/traceur in the repo. Not sure of the current status of async feature but it looks like any syntax/construct they choose will work on top of Futures.
For UI libraries points 6-8, I'm happy for a new UI lib that maintains a cohesive API that works with the rest of Dart's type system and conventions. Google do make many of the worlds biggest web apps and they maintain many robust UI libraries as seen in Closure Library GWT Library and APIs so I'm quietly confident in their ability to deliver yet another robust UI framework/libraries.
10: Budget: Finally, please consider that all these was made with a very small team supported exclusively on my sub-par dev salary. Dart has a what? 20-25 strong full-time team? 300+ contributors?
This is actually a major disadvantage against any unfunded language/project. A new Language, VM, transpiler, IDE, tooling, debugger + browser integration, package manager, quality libraries, marketing and developer evangelism takes a lot of talent, time and financial resources. As a developer it makes a lot more sense to spend time investing in Dart since it has the backing and ingredients to become a success and to foster a thriving community.Good decisions generally factor in an opportunity cost, i.e. by asking ourselves from any given point in time with the way things are now, (disregarding all my previous efforts/sunk costs), what will provide the most rewards from my future efforts? So whilst life may not be fair, you always have the opportunity to make the best decisions for yourself. Based on my small sample feedback: I have a distinct lack of free time, so I personally don't have the time to invest/tinker in a language/platform that I don't believe will have a thriving future - it's likely many devs feel this same way too.Given this I think its time to take a holistic look at the broader ecosystem and where your efforts fit in the "big-picture" i.e. it might be a wasted effort trying to convince others here to adopt a different language/platform. A lot of us are here because we're excited about what a new language/vm/platform enables us to do (esp. with Google's ubiquity and reach). I'm already vastly more productive with Dart than JS and its optional typing has already saved me many iteration cycles by identifying errors before I even ran them. When there were API changes I was even able to identify all the changes that were affected. More importantly I was even given pull requests from the community who had changed my OSS libs for me! I'm just not going to get this support from a platform without an active and thriving community.
Anyway these are just my thoughts on the topic, I hope it's provided some valuable outside perspective/insights.- Demis
1. Actually, Dart is meant for headless servers/clients (servers, command-line) and web-client (javascript/VM).
2. Kasper Lund & Lars Bak are VM rockstars. You should watch this talk: http://www.youtube.com/watch?v=bsGgfUreyZw They really know what they're doing.
3. Visual design isn't something I'm missing, to be honest. Just design your your UI using standard html/css, and write your logic in Dart. Also, with the introduction of Web Components, this will be even more awesome. Check it out: http://www.youtube.com/watch?v=2txPYQOWBtg
4. Dart syntax is awesome. If you know Javascript, you're set. Personally, I'm from a C/C++ video game programming background, and I LOVE the syntax. I default to using strict types, but Javascript guys can just start typing (geddit?). Plus, because of the grammar and syntax, your code can be analysed, refactored and generally structued. I'm not sure how closely you've looked at Dart, but it's hard to improve on what's there.
5. DSL's are not part of the Dart goals, and that's a good thing. For the record, Instagram built a little more than your example to get a valuation of a billion dollars ;)
6. It's a pretty contrived example. Besides, JQuery UI can do this stuff easily, they just chain things together with Promises. Easy. (e.g. http://www.incg.nl/blog/2008/hover-block-jquery/)
7. Come on, there are thousands of examples of games, tools and demos that use HTML 2d/3d canvas. How many have been created with Excess's 20 components?
8. You should check out John Evans' Dart "Buckshot" UI library (https://github.com/prujohn/Buckshot). It's very cool. Besides, there are good reasons why the Dart developers are taking their time with a UI framework. It's necessary, but not a priority. Getting the language to 1.0 is more important than having the kitchen sink of support libraries, IMHO.
9. You should check out Dart's "Future" class (http://api.dartlang.org/dart_core/Future.html) It's easy to write linear code with async responses.
10. Why does budget make Excess "Better" than Dart? It's not a feature of the language.
Some extra points:1. Community. There is an incredible community of developers who are behind Dart, not just Google employees. Seth Ladd has done an incredible job at spreading the word, and the fact that Google opened up the language early to involve the community is testament to the fact they believe in this. The Dart list that you've posted on has many superb discussions, by intelligent, passionate programmers. Excess forums, on the other hand, have 2 posts by you and "Most Online Ever: 7 (March 26, 2012, 11:05:34 AM)"
2. Anyone can go an grab the source code, and contribute back into the code base. Forgive me, but I couldn't find a github link to all of the Excess source code, just some half finished docs and a fork of three.js (https://github.com/xkp)
3. VM Integration into Chrome. This is potentially HUGE. Only Google could do this, and I, for one, can't wait to see the benefits.
4. Debugger and IDE (tools). I can hit a breakpoint and step by step debug. This makes life as a programmer infinitely easier than printf()s. Plus refactoring and other tools on the way make is stand head and shoulders over Javascript.
5. Dart to Javascript. This means it can be used right now. Sure, it doesn't produce the most optimal code right now, but that's an optimisation problem, and the guys optimising it are the very same team that created V8. Can't argue with that.
So, well done for creating a language you're passionate about. Keep working on it, and I wish you the best of success.
As for me, I'm sticking with Dart.
Emilio,
what are you trying to achieve?
You complain about little budget
and constantly say: Feature X is
already avail in excess but it's not in Dart.
If it is so, the build
up a user base like the guys from Opa did/do. There is for sure room
for interesting new language and there are surely some user in need of
it right now.
Dart aims to be available in hopefully all Browsers some day. It is a
well-thought language which is still in alpha state. It is not
possible to provide all tools right now, but Googlers did one thing
right: with the early accessability of Dart, they made it possible
that great non-google-coders can do great stuff with Dart already.
Look at Dartwatch.com, were Chris maintains a list of great software
products.
If one group can bring a new VM to all big browsers out there, than it
is the set of people we find here. My hope is they make it. I am very
sorry to say, but I don't have the same thinking about Excess.
Another reason I will not switch to Excess: I can wait for Dart. This
language progresses in the right direction and I love it, as many here
do. I don't need another language.
On a technical perspective I have not seen anything which make me
excited on Excess.
With Dart I want to avoid Java-Code. I am Java-Coder at day, but I
>> E.g. IDE, tooling, debugability, static analysis, package manager and more
>> importantly the brand recognition to build a strong community, which will be
>> important considering it the primary source contributing libs to the package
>> manager.
>
> Even Google went the way of Eclipse (IDE, tooling, debugability) Something
> I'm already developing using Xtext and the tested and true java debugger
> (remember, my language already generates java code) So I see little
> advantage there.
really don't need that with Dart.
I disagree, package managers are necessary.
> Package Manager? That should be something that is not
> needed, I have always seen that as the language developers being lazy. xs
> provides a way so you dont have to include any packages, just code.
Developers might be lazy, but they need to take care of f.e. different
versions of code.
It can be embedded and it has potential to run there. Whenever
> will it ever run on iOS? Native linux? Hell, even Android??
somebody needs it there it will be available there. Recently I have
seen a mesage from somebody who embeds it on Android. No clue were the
journey leads us because I didn't speak to the bus driver. But there
is a good chance it does.
What?
> As for the
> server part I don't see Dart a "server" language, so, just because you can
> run it n the server it doesn't necessarily mean devs will want to.
You can say the same about every language. Heck, even JavaScript
became a "server language", see Node.js.
Which does not give say anything about Dart
> Even google has another server language (Go).
> My point here was excess can run on
> any established platform (say, nodejs for servers) with very little effort
> on the part of the compiler maker. And the language provides ways for it to
> be a server language.
"just because you can run it n the server it doesn't necessarily mean
devs will want to"
> I don't disagree on the potential, I just see more potential (abstract appHave you looked at this?
> making potential) in xs. I don't see it blindly but I still provide about 30
> samples (I donwloaded the Dart editor and it came with 3) that take about
> 100loc to make and I don't see how you write them easily on Dart... maybe
> you could shed some light on it.
http://code.google.com/p/dart/source/browse/#svn%2Ftrunk%2Fdart%2Fsamples
The quality of a language should not be measured in the number of samples, btw
I never use visual editors and never did. It is stylistic to use such tools.
>> 3- What, not how: XS apps are first described in a data language (xml,
>> json). And that description gets merged seamlessly into your application.
>> This is not a new concept, but one that’s sorely lacking in Dart.
>>
>> This might be a stylistic/aesthetic preference/advantage because I surely
>> am not missing another XML declarative language. If there is demand for it,
>> it can just as easily code-gen into Dart and run where it does.
>
>
> People are sure not missing MFC and went running in droves to Flash, you
> cannot discount the power of visual editors. That is NOT stylistic. Btw,
> what did you mean by code-gen into Dart?
except VIM is a visual editor (or IntelliJ)
I am fine with learning that I don't need unnecessary crap in my syntax.
> There you either missed the point and certainly ignored most of the good
> stuff. But just to clarify: the keyword function in xs is pure syntactical
> sugar to lessen the learning curve.
For me this is a function, not a method. Methods refer at least in my
> As is the java/c# syntax that is also
> included (see, you dont have to use function!) but the way xs designed
> methods and called... well... method. As in:
>
> method myMethod()
> {
> ....
> }
world to objects. Maybe others might think different, but well, this
is the problem with such keywords. After all I need to learn I need to
use "method" instead of "function". Tell my why that is better instead
of leaving it out?
Who knows? Not everything is public yet.
> Missed point again, this was not about asynch (which, you must concede,
> kicks ass). asynch is only one of the DSLs available, and only in xs you
> could create your *own* DSL. So I'll give you another example:
>
> sql(connection = myConnection)
> {
> myData = SELECT * FROM myTable
> }
>
> then myData takes an array of the results. Now, understand that this is a
> general mechanism and don't tell me the dev team is also looking into SQL
> queries :)
Not sure if I like that syntax actually.
OK, again, what are you trying to achieve? Want to convince users to
> Look, I know you trust the company to do anything it wants (and hell, you
> might be right) but they also fail. Case in point o3D, where they tried to
> add 3d graphics to the browser... xs? We already provide kick ass 3D
> capabilities without the huge burden of having to implement a 3D engine...
> in that vein, what 3D tools are available to Dart? Plain WebGL? There I can
> *guarantee* you devs are not gonna go into that because it has an immensely
> huge learning curve.
migrate from Alpha-Dart to Production-Excess? Yes, the team might
fail, but as i look at Dart since it is published I can say the
interest has increased MUCH and LOTS have been done.
Dart = Alpha-Language.
> In xs? Devs just write xml, same as they do for jQuery, canvas, or nodejs...
> one consistent general API. You must at least concede the value there.
>
> There you also ignored important points in 6-8... where are the animations
> tools? I'm sure the best developers in the world are working at them (or are
> they). Again... already available in xs.
>
move on to kickstarter. It seems you are very excited about your
> Hey, would you let me play the victim card here? :) My larger point is... if
> with very limited resources we are able to provide a bunch of stuff not
> present in Dart, what could we do with a little budget!
language and you have some power. Get a funding.
Looking at Excess site, you could improve your marketing here. For
example, I want a "learn excess in 5 minutes page".
After all I think you should build up a user base; you certainly will
not succeed when trying to convince others their toys are bad. Maybe
you should look a little at what Seth Ladd did for Dart and try to
emulate some of his things to make your language growing.
In any case - good luck!
Cheers
Christian
Purely technically, XS has some interesting points. But... where the heck is an entry point? Where does my program even start? Is there even such a thing, or the best I get is an "init" event? Come on... is XS even bootstrappable?
Btw, a little self-promo: if someone wants to look at a DSL encoded in Dart, head over to http://ladicek.github.com/2012/05/27/abusing-operators-to-encode-a-testing-dsl.html You'll see that this is also valid Dart code:var t = table * "a" * "b" * "c"| 3 | 4 | 5| 5 | 12 | 13| 7 | 24 | 25| 8 | 15 | 17| 9 | 40 | 41;expect* "it is a triple" / ((it) => it.length == 3)* "it is a Pythagorean triple" / ((it) => it.a * it.a + it.b * it.b == it.c * it.c)< each(t);And to be clear, I'm only half-serious about it currently :-)
LT