I ran the angular gwt example using mvn gwt:run-codeserver, first thing I noticed:
@Components needs to be annotated with @JsType as well, properties needs to be annotated with @JsProperty, constructurs needs to be annotated with @JsConstructor, methods with @JsMethod, ... besides getters and seters, that's a lot of extra boilerplate don't you think?
Apparantly my browser is too old for Angular GWT to run (I'm busy on a CentOS box), so I'll have to try it some other time on my MacBook, the annotation boilerplate already put me off though.
Dart Strong Mode when GWT has stronger type checking out of the box,
Dart already has Strong Mode, it's just being improved. The benefit of Dart here over GWT is that types are optional, I don't have to be bogged down by writing types everywhere. The benefit being that I can move a lot faster, get things done and then have types added later on if I really need to.
This is one benefit of Kotlin as well, inferred types, in Java you still need to write out the types everywhere.
Tell me which one is less code to write:
Java8:
String value = Optional.ofNullable(somemethodThatCanReturnNull()).orElse("value");
Kotlin:
var value = somemethodThatCanReturnNull() ?: "value"
or if you really want to, but the above one infers the type, so this is not needed:
var value:String = somemethodThatCanReturnNull() ?: "value"
Dart:
var value = somemethodThatCanReturnNull() ?? "value";
or
String value = somemethodThatCanReturnNull() ?? "value";
And I can cite many more examples where Kotlin and Dart are simply less code to write to get the same thing working. For UI development, this is crucial.
Most of the UI doesn't even require strong typing, server-side I fully agree with strong typing, but does it really make sense in the UI when most of your inputs will probably be Strings ?
fast edit refresh when GWT has great SuperDevMode,
Dart has a special Dartium browser which gives me exactly this (instant refreshes, although only on chrome) as well as Observatory which gives me deep insights into memory consumption, I can track object creation to make sure I don't have leaks, set breakpoints in the browser, etc. Development is done in Dartium, only then I test in IE, Firefox, Safari, etc, but even when I do test it in browsers outside Dartium, it's generally fast enough after the pub server warmed up. So "super-dev mode", although a useful feature, it's not something that's missed by myself; I've generally tested other browsers on the QA server already compiled to JS and had no issues with the generated JS before.
and also would like to have better js interop what GWT has.
In the places where I've experimented with JS-interop, it was working just fine in Dart, JS-interop is generally not something I use.
From your blog:
Ongoing work on Flutter for Dart; if about GWT we can use already Cordova, Phonegap, Appcelerator Titanium (via Titanium4J), ...
Dart is also available with Cordova and Phonegap, you also get DartGap which wraps Cordova and then there's Flutter to look forward to which will blow Cordova and Phonegap out of the water when you all of a sudden have native-like Andriod / iOS support via Dart.
Get me KotlinGWT with everything JavaGWT currently has and you have my attention (the direction Kotlin is going with WASM support, I'd probably stick to Dart or use Kotlin when WASM becomes reliable), Optional Types and Inferred Types are what I'm after in UI development (and on the server as well since I switched to Kotlin), Strongly Typed and boilerplate slows me down.
If you're preferring Angular2 TypeScript over Angular2 Dart, chances are you haven't used Dart yourself.