Dart in 2016: Fastest growing language at Google, 2nd fastest in TIOBE
news.dartlang.org
news.dartlang.org
Dart is a very refreshing change for front-end development. No fatigue! Great tooling, nice language without surprises and optional static typing.
On the backend you get probably the fastests dynamic language out there, maybe competing only with LuaGIT.
The new Flutter for high performance mobile app development looks seriously awesome. I specially love the instant live reloading.
Dart's package ecosystem (pub.dartlang.org) seems healthy with constant updates and new packages.
I have no idea how TIOBE works, but I find weird that people accuse Google of manipulating it to promote Dart. I believe it's the opposite, Google has done very little to promote Dart, and that's why you don't hear about it very often. I believe the project deserves more promotion because it's seriously good. Give it a try one of these days!
EDIT: I do not work for Google
I saw Flutter when it was first announced, and something that caught my eye back then was that it looked like it took some inspiration from React. I'm a big fan of React. Their home page [0] says: "Note: Flutter is an early-stage open-source project. We hope you try Flutter out and send us feedback." Would you say it's ready for production?
Could you provide other examples of use-cases for which you'd use Dart? Does it have good editor integration for autocompletion and linting? Is debugging painful? One of my favorite things about JS is Chrome Dev Tools.
I don't mean for this to come off as rude or negative, but I'd be interested in hearing a bit about where you consider the language or ecosystem falls short. I find discussing the downsides, limitations, and problems helps in understanding the tool and setting expectations. Nobody expects a magic wand solution, of course.
One of my pain points from working with a large SPA is architecting the application so it's easy to lazily views as needed. By itself it's not very difficult, but getting the whole build / development / test environment workflows setup is more challenging to get right. Does Dart have good tooling for generating builds? I use Webpack with the large JS SPA I work on, and one of its killer feature is that it'll crawl the dependency graph, copying assets to the output folder, and updating references. Unfortunately, the default behavior makes it most easy to generate a single large JS bundle.
Regarding editor support, it's been great from the very beginning. A few years ago, the Dart Editor was a pleasure to use and nothing else in frontend development was even close, this was before vscode existed. It had integrated debugger and code completion worked really well, it's a bit sad that they decided to discontinue the editor, but these days WebStorm has all the features and more. There are also Atom and vscode plugins but I haven't tried them.
Debugging experience I think it's one of the highlights of Dart tooling. The observatory tool is great and it not only helps with debugging but also with profiling. I seriously recommend it.
More good tooling in Dart includes the package manager which is very well designed and easy to use, and the code formatter which just does the right thing.
Where it falls short: JavaScript interoperation. There is some, but very limited. They are working on it, but it's not quite there yet.
Yes, we have full IDE support in IntelliJ with auto-complete, go to definition, find references, and all the other navigation stuff you expect from a modern typed language.
Similar features are integrated into most other editors too, though I'm not as personally familiar with them. I know we have a lot of people using Dart with Sublime, Atom, Emacs, and Vim.
> Is debugging painful? One of my favorite things about JS is Chrome Dev Tools.
There's debugger integration into IntelliJ and Atom. If you're using the dev_compiler[1], it generates human-friendly JS that you can step through, and also generates full source maps[2]. That all works really nicely with Chrome Dev Tools.
The VM also includes a really powerful profiler/debugger[3] that you can connect to with a browser to poke around and see what's going on in your running program.
[1]: https://github.com/dart-lang/sdk/tree/master/pkg/dev_compile...
[2]: https://www.html5rocks.com/en/tutorials/developertools/sourc...
The results of the toibe index are heavily influenced by google's search.
People working on Dart working at google would likely be familiar with how to create a page that has improved google visibility compared to say... the R or objective C communities. This isn't a "ohh, nefarious!" type thing but rather a "how to make a web page that conforms to everything that google search would want" is part of the way one would think.
It is possible to game tiobe given that its strongly influenced by google's search results. If you go glance at delphi's history in 2008, you'll see gamification of it - http://web.archive.org/web/20120312021442/http://delphi.org/... http://web.archive.org/web/20120312021416/http://delphi.org/... http://web.archive.org/web/20120312021435/http://delphi.org/... - and then you go look at the graph for delphi, and you'll see http://www.tiobe.com/tiobe-index/delphi-object-pascal/ .
Simply having well crafted pages that get indexed well for Dart would be sufficient to bump a language on Tiobe. And that's why its all a load of marketing.
From TIOBE:
The ratings are based on the number of skilled engineers world-wide, courses and third party vendors. Popular search engines such as Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube and Baidu are used to calculate the ratings. It is important to note that the TIOBE index is not about the best programming language or the language in which most lines of code have been written.
The people who work on dartlang.org do try to make it search friendly, of course, but I don't think anyone on the team takes TIOBE very seriously.
According to their chart, C lost half of its popularity in 2016, and Delphi is more popular than Go and Objective-C.
I could be wrong, but I think the spike in Dart's popularity recently is mostly because there was a world championship in "dart" (the pub game) recently.
The primary goal of the TIOBE index is not to accurately measure language popularity, it's to increase the popularity of tiobe.com. And, at that, they're doing a great job.
Regarding Flutter, I watched the conference where it was presented and none of the devices I own was able to launch the application.
https://play.google.com/store/apps/details?id=io.flutter.gal...
Unless Google does actually use the language to the point a few well known companies think it is valuable to use in their own products and talk about it, e.g. "X rewrote Z in Dart", I don't see much of a future to the language.
Is it still the case that none of your devices are able to launch Flutter Galler App? In an unfortunate coincidence the build that was published to Play Store right before the Dart Summit was flawed and declared that it is incompatible with most of the devices except for latest generation ones. This was rapidly fixed - but fixed build did not get into the Play Store on time.
Just tried it now on a Samsung S3 (Android 4.3).
It does launch now, just the rendering is a bit wrong.
The Android Application bar overlaps with the one generated by Flutter, thus only showing the lower half.
For me too. I have spent 3-4 hours looking through the samples etc. But even with TypeScript being so popular, it's hard to find quick samples for tasks one wants to do. So investing in one more new language didn't seem that attractive.
Flutter confuses me. Its annoying you have to use their DSL for layouts rather than HTML and what about native widgets, like WebViews or VideoPlayers?
With them drastically speeding up the Dart2JS compiler and implementing a strong typed mode, I am quite pleased with Dart's direction.
I do still fear for its future. It would be really to sad to see Dart die. The last web app I made, I was able to make the entire thing in under 90kbs, including HTML, CSS, SVGs, and JS. Dart allows me to write desktop like applications for the web with any extra overhead.
I agree; a saner approach than adding one particular language at a time to browsers is to give browsers support/hooks which arbitrary language implementors can target, without having to perform gymnastics like compiling to JS.
It looks like WebAssembly is (at least the first step) in that direction, so Dart and others can use that as and when it matures, without creating a legacy of language-specific issues for future generations of Web implementors and archivists do deal with.
I don't know — browsers are already planning to adopt a non-JavaScript language (WebAssembly); it's entirely possible that maybe, just maybe they might start to support more than just the late-90s mistake which is JavaScript.
How long it will take for Canvas/WebGL + WebAssembly frameworks to appear?
I'm not a web developer either and I look forward to WASM and its potential. But I really like HTML, I've used lots of layout languages before and I think HTML is the best I've used. The only thing I find HTML to be obtuse about is complex animations.
I don't believe I has any chance to happen this way.
I work on a big mobile app, I can see us adopt Kotlin, since we can mixup java and kotlin naturally (it outputs bytecode, so it is very interop). Flutter ? Even if you fix the runtime (and that's a big if), it means rewriting the whole app from scratch.
What I can see happen is google releasing Fuchsia as the future of Android and flutter on Android as a way to bridge the gap.
Therefore it would be very easy for someone at google to manipulate the index. I am not sure why they would bother since the index means nothing. There are much easier ways for Google to make Dart a thing if they wanted it to be a thing.
Yeah, you can say HN is startup echo chamber etc.. Well StackOverflow's job board has more mature companies and again zero interest in Dart. Here is the latest scraped data. https://github.com/aparij/soCareers-Data/blob/master/result/...
- Class-based, object-oriented
- Static typing
- Generics
- Async/await that makes your asynchronous code look like synchronous code - (avoids callback hell)
- Generators
- Future-based, non-blocking APIs
- Positional, named, optional parameters with default values
- Arrow syntax for brevity
- Type inference
- Packages facilitate modularity
- Named constructors
- Functional programming features (map, fold, reduce, where, take, forEach, etc...)
- Cascade operator
- String interpolation
- Implicit interfaces
- Mixins (Code re-use without complex inheritance hiearchies)
- Reflection
- Streams
- Operator overloading
- Metadata annotations
- Concurrency through Isolates
- SIMD
- Call into JavaScript code and vice/versa
- Generate nice documentation with /// dart comments
- Built-in testing facilites - pub run test
- Open source
- Open standard
- Consistent async API (incl. Future, Streams, async* for Streams, async/await support everywhere). async.js is nowhere near to this.
- Type inference and analyzer toolchain that works and don't need to fall back on grep. The moment you start using anything like lodash or similar you will lose your ability to explore the code reliably.
- Isolates and Zones as higher-level constructs for dealing with complex concurrency and parallelism constructs. Nothing comparable in the JS world.
- Cascade operator.
- 1 != "1" (have been burnt by JS several times, and TypeScript won't provide a break from it)
I hope to use soon:
- SIMD
There now are Promises and Promise-based async/await keywords. Sure, there are some legacy APIs, but this is no longer as true as it used to be.
> - Type inference and analyzer toolchain that works and don't need to fall back on grep. The moment you start using anything like lodash or similar you will lose your ability to explore the code reliably.
TypeScript has introduced mapped and lookup types in its latest version, that solves this problem.
Also, take a look at the async* construct here: https://www.dartlang.org/articles/language/beyond-async
Nothing similar is in TypeScript, and this is roughly a two-years old feature in Dart, not a fancy-new hype. I have used it couple of times, it is useful, and again: consistent across the board.
Of course if you are happy with the limited promise support in TypeScript, go ahead with it. However saying that they are on-par is far from the truth.
Am I totally off?
Doesn't leave much for Dart.
https://plus.google.com/+MontyRasmussen/posts/UWyjF5S14Uo
I'm not saying that this is general to moderators, but some people try to deny it exists or is relevant (probably because they have invested in other toolchains), and if your filter-bubble is controlled by them, you will miss out.
Assuming the moderation action was due to "not liking dart" when we've nothing except the complaining of the newly-banned to substantiate it doesn't strike me as particularly fair.
If dart was popular you'd see the flag being flown in multiple places; you dont. Its not. Even the /r/dart subreddit is dead.
It's not because of some conspiracy to bury dart news; people just don't care.
Community is important.
/r/dartlang is the main Dart subreddit.
(If locals are listening in: we are planning to organize a meetup in Budapest, contact me if interested.)
Given that what I liked about it most was types and web components, which are pretty robust now with well established tools (Typescript and React), I wonder what's the real allure in Dart as opposed to those seemingly more popular options?
Back in 2004, Google hired Lars Bak and his team (who had previously created the HotSpot VM for Sun) to create the V8 JS engine for Chrome. Their work was a spectacular success. Overnight, JS became one of the fastest dynamic languages in existence, and this ushered in an arms-race for better JS performance across competing browsers.
However, after a few years of wringing ever more speed out of JS, Bak and co. were totally fed up with it. In particular, how its various quirks prevented a lot of the optimisations they wanted to do. Afraid that Bak would quit, and maybe go work for a competitor, Google schemed to keep him. They let him design his own new language (originally called Dash, later Dart) that would be more amenable to optimisation, and planned to ship a separate Dart VM within Chrome.
However, these plans got leaked, and caused a bit of a furore back in 2011. The feeling was that Google were attempting something of an Microsoft-style takeover of a big chunk of the web platform. When other browser vendors said they wouldn't ship a Dart VM, they plan was dead, sort of. Google still wanted to keep Bak and his team on-board, so they let them continue working, and they developed a Dart-to-JS compiler so Dart could run on the web without a separate VM.
Google's big enough and rich enough that they can afford to run plenty of these strange projects. And if Dart is popular internally, and delivering value, why kill it? It is ironic though that of all the big web platform technology plays that Google have made — GWT, Dart, Polymer — the one that went stratospheric was Angular, a random, minor open-source project without any place in the grand strategy.
Incidentally, one side effect of all this was that Chrome's V8 engine lost most of its key developers, and so its progress stalled for quite a while. Eventually Google formed a new team V8, based in Munich, to pick up the ball. That's why there's been so much more progress on stuff like ES6+ features and better JIT compilation in the past year or so.
PS: when dart came out, javascript was already blazingly fast (as a dynamic language) and largely usable. Dart is indeed better but not that better to revolutionize web programming. On the other hand, most general-purpose programming languages are very slow even nowadays. Pypy is faster than CPython, but not to the level of V8, dart, julia or luajit. A capable JIT compiled dynamic language may change how we program. Dart was the closest, but missed the target.
You mean Lisp? AOT/JIT available since the 70's.
Having seen a talk on Nim at the Bris.tech conference [1], I can't think of any void it would fill better than an alternative. My takeaway was it was a very flexible but poorly designed language with too many ways to do anything.
1. Video coming soon; keep an eye on https://www.youtube.com/user/bristechmeetup/videos
But then sometime while Chrome was ignoring it, some ads engineers (who are also incredibly talented) decided that Dart would be a core language in their new ads platform. Which meant that when the Chrome team decided to kill it, Ads piped up and said "No, you can't do that, it's a key part of our infrastructure, making $75B/year and paying all of your salaries." As a result, the whole Dart team was moved over to Ads, where they continue to improve the language & tooling so that Google can continue to make money.
Ironically, this probably means that Dart is right up there behind COBOL, C, C++, and Java in terms of the amount of money it makes for its users, and well ahead of more popular languages like Python, Ruby, Perl, PHP, Go, Rust, etc.
Angular vs. Polymer.
GWT vs. Angular vs. Closure vs. Polymer.
YouTube vs. Google Video (the latter was still a thing up through 2011, 5 years after the YouTube acquisition).
ChromeOS vs. Android.
Google Toolbar vs. Chrome Frame.
Chrome vs. Android Browser.
GTalk vs. Messenger vs. Hangouts vs. Allo vs. Duo
Same for Angular / Polymer. It seems you added them to your list just so that it would be longer.
TL;DR: great developer tooling, hyper-focus on web and mobile.
In the classification of computer languages, this is like a new nova burst in the night sky.
I tried reading their website multiple times, each of the time I was left confused as to where the language fit
I see other languages which could create bigger ecosystems in less time and as a result attract more influential contributors than Dart did.
Just based on its specs, Dart is a wonderful language but again, this is just one part of the story.
But I'm not in the US. Can somebody comment about their perception on this index?
or the RedMonk ranking, although this is 6 months ago. http://redmonk.com/sogrady/2016/07/20/language-rankings-6-16...
So I start by installing the Dart SDK on my Windows PC. First surprise, I noticed they no longer package the Dart-IDE when you install Dart SDK, a minor disappointment. But I get it, the Dart team explains they want to focus on core tools and let you use any editor (Web Storm is suggested but costs $$$, and remember I'm only scouting at this point). So decided to use the plugin for Dart in Sublime Text 3. Not perfect, but it works fairly well.
Other surprise, Polymer seems to be fading away. What Widget framework shall I choose? I chose React for it's one way binding which seems to make sense to a web n00b like me, since it will simplify the flow of data. The Dart team pushes Angular really hard, but I still install the Dart-react modules. Adding dependencies to a Dart project is fairly straight forward so far.
Using Dart-React does not bring the happy unicorns knocking at my door. Dart React does not (yet?) process JSX, which is a pretty big feature I intended to use with Dart. JSX allows you to define your components and reuse them. Oh well, no JSX, but I'll just have to resort to coding React components in Dart (which turns out to be a bit of a mess ...)
Now my shiney new Dart app needs to display some huge lists of Data in tables/grids. I could build my own, but surely some smart dev has done this before me! Found Slick Grid, but it's for JS (the Dart port is not as performant). Dart tools mentions that there is a JS Interop 'shortcut': If a JS component has been annotated (Typescript) you can use the annotated files to generate Dart Modules!
So I run the tool on the annotated Slick Grid typescript files. Success! It does generate the Dart libs! Ouuups, my boiler plate Dart project does not compile anymore since adding the Slick grid modules. Dig some more, fix the compilation issues (some obscure option was missing when converting from TS to Dart).
We're back on track, my project compiles but... no grid ever show up. Looks like it's time to test the debugging features for Dart. I get Dart to generate .map files for my project. This basically allows you to debug Dart code in browser (FF for me), and the debugging begins. I can spot exactly on which line of my Dart code the grid is supposed to be instantiated, but this requires me to move through the Dart to JS interop code and try to understand why there is a JS exception thrown somewhere.
So, maybe for some Dart gurus out there this is simple and run of the mill stuff. I would like to hear from you. So far I still don't have any data grids to show my huge data set ... and am still wondering if I'm going to install Typescript which seems more tightly coupled (in a good way) to JS.
Calling all Dart gurus, give me your thoughts on this, I want to use Dart and have it succeed.
Dart Noob
In terms of web frameworks, consider having a look at Angular Dart, and the spiffy new Angular2 components https://github.com/dart-lang/angular2_components
This is the framework used by Google for Adwords, so you know it is going to be well tested and supported.
What features do you find lacking?
I recently tried to access window content opened by window.open and it was absolute nightmare. It cannot be done purely from Dart and requires JS interop, but what's worse passing browser objects between dart and js is buggy. I haven't found a solution that works both on dart2js and dartium, when it works on dartium it is broken on dart2js and vice versa. And debugging dart2js-generated code is almost impossible, just obfuscated mess.
By percentage? That is easy for niche languages with small markets. By lines of code? That is impressive.
I don't even use Typescript and even I know that especially with Angular 2 Typescript is gaining a lot of popularity and it was already doing well before they picked it too. I mean it isn't even on their list in the top 100. How is that possible?
It says that VB.net is more popular than Javascript too. Like that is even possible.
I'm guessing that most people would google "angular ..." instead of "typescript ...", that's why it doesn't show up in tiobe.
This was the last one in Germany.
But also, Rust and Dart are very different languages, so bringing Rust up here feels very offtopic.
I don't know what they are really trying to measure but it seems pretty useless.
This is why languages succeed and fail, not technical merits.
They COULD contribute their efforts to improving EXISTING languages (like MSFT finally did to their credit with TypeScript, building on non-Proprietary JS, which is great) but there is a seemingly irresistible allure to the thought of owning the design and molding a language to perfectly fit your own company's desires. You never have to deal with standards, when you're just making it up as you go along. PLUS the massive benefit of the anti-competitive foot-hold (monopolistic foot-hold) that having its own language gives to a company, is just too tempting. They cannot resist.
However most developers are sick of the lanuage-Thrash. 99% of it is not innovative in the slightest, but just somebody reinventing and resolving problems that have already been invented and solved countless times before. I really really hope dart dies (and GO can also go). In my opinion there are three languages that need to still exist: Java, JavaScript/TypesScript, and C++. Those fill EVERY need, and if the innovators would ADD TO THOSE rather than starting from scratch and pushing the reset button the software world would be a MUCH better place, and so would overall software quality.
Feel free to stick only to your company's Recommended Best Practices Industry Standard Languages and Libraries. But, there are lots of languages out there, and many of us have good reasons for using them. Deal with it.
How many languages do you know well and which are they? How many years have you been programming? Do you know Haskell and Lisp? Have you done any work in econometrics or bioinformatics?