"is there any feature of Dart that is required by Flutter?"
The Dart platform provides the following features:
- Subsecond hot reload
- AOT to ARM
- Bytecode interpreter for debug mode on IOS
- JIT for debug mode on Android
- GC tuned for Flutter's build methods. (like React's render)
Not aware of any other platform provides all of these features. Bolting these features on to another existing language and platform which wasn't designed with these goals would be hard.
So much arm chair theorising, lol. Meanwhile someone has picked up the Dart tool chain and built a compelling framework with it. There is nothing "theoretically" special about this, but it is special in the "practical" sense that it exists, and I can use it today.
I can download it, install it, and get hot-reload on Android and iOS mobile devices while coding. I can swap out code at any layer of the framework since all of the framework's layout code and widgets are implemented in the same language as used to build an app.
Dart's performance characteristics and the combination of the AOT, JIT, and bytecode interpreter make this possible.
I write Clojure for a living. I like the elegance of Lisps. Clojure is mostly tolerable. The thing I like most about it is loading code immediately into the REPL. I hope more of the industry moves towards live programming. (or moves back to live programming, since I guess back in the Smalltalk days it used to be mainstream.)
Commercial Common Lisp compilers can also target mobile platforms, nothing theoric about it.
In any case, the issue is that Dart isn't a special snowflake with some extraordinary set of AOT, JIT, and bytecode interpreter not available to any other programming language.
There are plenty of programming languages that offer these applicabilities.
Flutter can be equality well implemented with any of them and I believe Dart is going to bet the cause of Flutter's failure, unless Google forces it upon us, e.g. replacing Android with Fuchsia.
Well for the mainstream VMs: Hotswap on the JVM is very limited, likewise with edit and continue on the CLR. Xamarin has live XAML updates, only for markup though. V8 is better at hot reloading, but then suffers on the performance front, since it's basically impossible to do efficient AOT for it.
Eiffel would be such an example, from the list I have listed.
Regarding JVM, hotswap is only limited if you constrain yourself to the OpenJDK basic features.
As we in the Java community are well aware, that are other options out there, like HotswapAgent and JRebel for example.
Commits adding Fuchsia support for ART started to land on AOSP, so lets see how much love Flutter/Dart will actually get from Google internal politics.
Haven't used Eiffel. Seems to compile to C and CIL, also GPL and likely even less popular than Dart.
Jrebel dicontinued android support. Does hotswapagent support android?
Cool watching Fuchsia evolve. It will definitely support Android apps, otherwise google throws away their playstore monopoly.
Eiffel uses its own VM for interactive development, and compilation to native code via system C and C++ compilers. CIL and Java support is just a kind of integration support, the MELT VM is what matters.
Eiffel is a commercial language, with a GPL based license for open source projects.
It is also used in enterprise production code since the mid-90's, definitely more battle tested than Dart will ever be, which lets be honest it is struggling for survival.
Back to where this started:
"is there any feature of Dart that is required by Flutter?"
This is me paraphrasing why the Flutter team think Dart is a good fit:
It's a familiar language for developers who have written JS, Java, C#, or C++. It has types to allow working on large codebases, and efficient AOT compilation. It has tooling for popular IDEs. Does subsecond hot-reload on iOS and Android (also more than just method bodies). It's performance, even on iOS dev mode is sufficient to do all of the layout and widget code. It's open source under liberal license which allows you to embed it your app.
Your claim:
"There are plenty of programming languages that offer these applicabilities."
I don't think this is true. Even if you want to count Eiffel that's one, not plenty.
Nor could Eiffel have been used for Flutter since the GPL means you can't embed the VM in your app. Nor is it particular familiar for developers of existing mainstream languages.
Anyways, I agree that there's nothing "special snowflakey" about any of this technology, but no-one else, that I'm aware of, is shipping a language and toolchain that ticks all of these boxes at the moment. Hopefully someone will build this stuff for other popular stacks too.
(I am also aware of Eiffel. I remember hearing about it at uni back in the mid-90s when discussing CBD. I think it may be older than mid-90s too. I also don't think it would have been a very good choice for Flutter.)
Also what's with this whole "Dart struggling for survival" meme of yours. It comes off as kinda unhinged. Feel free to ignore the language. And people who like using it can happily ignore you.
Dart was dropped by Chrome and Angular teams, rescued from certain death by the AdWords team.
Without something like Flutter, the language has nowhere else to go.
The judge is how there regarding how Flutter adoption is actually going to take off on the mass market, outside a few agreements to show off at keynotes.
So seems similar to GWT which also saw little adoption outside of Google, and was used by the AdWords team. But here we are in 2018 and GWT is still ticking along with regular commits. I guess that means Dart is here to stay too.
And now Flutter is becoming popular and is being used by external developers. "Struggling for survival" is hyperbole today, and pre-Flutter, but agree this was true in the pre-AdWords days.
It mystifies me why this has not been integrated into Sun's/Oracle's JVM and OpenJDK, since it's been available in other JVM implementations for a long time and is so obviously a hugely useful feature – with the agonizingly slow startup of Java applications you really need code reloading at runtime.
Anyway, the Android VM (ART) has Instant Run nowadays. It also doesn't support hot-swapping anything more than method implementations without restarting, but restarting on Android is not as painful as on the regular JVM.
C-like languages have prefix calls; what you have to learn is that no commas are required and the opening parenthesis encloses the operator, not just the arguments. You were able to create a HN account, so I think you can handle it.
The Dart platform provides the following features:
- Subsecond hot reload
- AOT to ARM
- Bytecode interpreter for debug mode on IOS
- JIT for debug mode on Android
- GC tuned for Flutter's build methods. (like React's render)
Not aware of any other platform provides all of these features. Bolting these features on to another existing language and platform which wasn't designed with these goals would be hard.