Skip to main content

Notes From the June 4 Dart Language Design Meeting

The incomporable Bob Nystrom fills us in on the language design discussions taking place amongst Dart engineers. Here are his notes from the June 4th language meeting:

Here's my notes. As usual all mistakes are my own:

are boxed doubles identical?

There is a bug where doubles with the same value may return false for identical() because they have been boxed to different objects.

Lars said it's been discussed. For doubles, identical() should return true based on value. We don't want the language spec to have to mention boxing so that the VM is free to optimize how it wants.

Gilad asked if NaN is identical to NaN?

Lars says yes. It's identical but not equal. Gilad will fix the spec.

change uninitialized field error to warning?

Uninitialized final fields are currently an error in the language. Kasper suggests making it a warning. It seems in line with other stuff in language. It's easy to associate some value with an uninitialized final.

Gilad says we can do this and asked why Kasper ran into it. Kasper saw some bugs where implementations behaved differently in some related corner cases.

Lars doesn't have a problem with it.

const instance variables

Gilad's view is that they should work like statics except for scoping. Apparently, though, it's complicating the VM implementation of instance metadata. Three solutions:

1. No const instance fields.
2. Metadata is statically scoped.
3. Try to do it correctly.

Lars likes 1. I say 1 simplifies things for users. Right now, people get confused with static final const etc. Gilad is OK with 1.

I asked if the syntax would be "static const" or just "const"? Users get confused when having to do "static" with constants.

Lars says they are confused because they don't understand the system. Requiring "static" will help them understand what's going on.

what liberties can editor take with type system

[I didn't have a lot of context here, so I'm fuzzy on the details.]

Dan Rubel asked how flexible the analyzer can be with the Dart type system and how it can extend it.

Gilad is OK with things like type inference for auto-complete. What other things should we allow?

Lars says step one is to do exactly what the spec says. Going beyond that and helping user with refactoring and stuff is great. Using it for warnings gets strange. If you go from the Editor to command line, you would get different warnings.

Dan's concern is more about false positives. We should look at code and see if they use constructs like guarded type promotion.

Lars says if users are using these constructs a lot, we should change the language to support them. If you want to have a type guard match thing we should have a different construct. But for now, the analyzer should go with the current spec.

Kasper says we have to be careful if we report fewer warnings because users will get used to that and then get confused if other tools follow the spec more closely and have more warnings.

stack traces

Lars had lots of discussions back and forth with some internal Dart users. One issue is about catching exceptions and capturing stack traces and how its painful for some. Lars is OK if severe errors like noSuchMethod automatically get a stack trace.

Kasper says that would mean two ways to access stack traces. I note that with async, it's three. Lars says Florian has some idea of a constant flag to enable/disable stack trace capturing.

Gilad asks if the spec would have to lay out which errors get stack traces and which don't? Lars says they'll come up with a proposal.

Cheers!

As always, view the changelog for the full list of changes, and to get started with the Editor see our tutorial.

Popular posts from this blog

Dart in 2016: The fastest growing programming language at Google, 2nd fastest growing in TIOBE Index

Dart was the fastest growing programming language at Google in 2016 with millions of lines of code written. It also made it to TIOBE Index Top 20 this month (see TIOBE's methodology).

It takes time to build something as ambitious as Dart and, in some ways, Dart is still in its infancy. But we're glad the hard work is starting to pay off.

Many thanks to our amazing community!

We're going to celebrate by ... releasing 1.22 next week (as per our usual 6 week release schedule).

A stronger Dart for everyone

We are constantly asking ourselves:
How do we make developers even more productive when writing Dart apps? We believe that a critical part of the answer to this question is to make strongmode – a sound static type system for Dart – the standard for all Dart developers.

Teams that use Dart to build apps like Soundtrap, AdWords, AdSense, and Greentea say they really enjoy using strong mode features, such as early error detection. In fact, teams that have switched completely to strong mode cite not only early error detection but also better code readability and maintainability as major benefits. We hear this both from small teams and – even more so – from large teams with hundreds of developers writing and maintaining millions of lines of Dart code. As Björn Sperber from Soundtrap says,
Strong mode and the smooth integration with IntelliJ is a joy to use and a huge improvement. If you’ve tried out Flutter, you’ve already used strong mode checks from the Dart analyzer.

Given the benefits …

AngularDart 2.1 and new Components

AngularDart got its own dedicated team 5 months ago. Last month, we launched 2.0 final on the Dart Developer Summit. Today, we’re releasing the first minor release after that: 2.1.

Since the focus of AngularDart is Productivity, Performance, Stability, there are no major breaking changes (see the changelog) — but a lot of behind-the-scenes improvements. Your apps will get slightly smaller and faster (even relative to 2.0 which already made huge strides in size and performance since the compiled-from-TypeScript days).

Many features that AngularJS had to implement for JavaScript and TypeScript are not needed in Dart (because Dart already has those features out-of-the-box). So we’re removing them from AngularDart. Renderer is deprecated in favor of plain-old dart:html. NgPlural is going away — Dart programs can use the package:intl library.

New components

On the Dart Developer Summit, we launched AngularDart Components — the material design widgets Google is using in customer-facing apps …