Ensuring continued innovation in Dart. Or: where are the roadmap & vision statement?

113 views
Skip to first unread message

Patrice Chalin

unread,
Aug 26, 2015, 4:03:55 PM8/26/15
to Dart Core Development, Bob Nystrom

Among the most appealing aspects of Dart, to me, are its concise yet expressive notation, and (relatively) clean and simple semantics. Dart is to JS what Scala is to Java in the sense that: Dart is a state-of-the-art fielded language (used in sizable production code) making available today features that are quite likely to be retroactively adopted in subsequent releases of Java/TypeScript (metadata is one example that has already happened, thanks in part to the needs of Angular).


I would love to see the evolution of Dart fueled by exciting new features while remaining grounded/pragmatic, and preserving its core qualities. But that raises the question: what are the core defining qualities of Dart? What’s the elevator pitch?


IMHO, Dart needs a concise vision statement to capture its core defining qualities. Such a vision can help direct innovation (so that we can be proactive in proposing pioneering features) and provide a high level yay/nay test against which any new DEP can be assessed (based on whether it supports the vision or not). The formulated vision can also help the language design team ensure that Dart can clearly “stand out” (as Kasper put it) from the larger and rapidly changing ecosphere of scalable web/server/mobile app technologies. (E.g., how will Dart be positioning itself against new players like Scala.js --- which, e.g., already offers preliminary Angular support via scalajs-angular? :)


IMHO, Dart also needs to have a complete list of language features that are being considered. Having such a list is an essential prerequisite to doing feature baselining. A quick review of the list would also allow one to ensure that there is a proper balance of innovative vs. (more mundane but essential) housekeeping features. Driven by the vision, this list needs to include the significant core features that are planned for Dart in the medium to long term, e.g., to suggest a few:


  • Union types? (Intersection types?)

  • (Deeply) immutable / value types (issue #501).

  • With the former, why not fully embrace functional programming (FP)? I believe that Dart, like Scala, is a good candidate to offer “the best of [OOP & FP] worlds” (as is touted on the Scala home page). FP and immutable types will prove invaluable for, e.g., Angular and Angular apps.

  • What are the implications of the advent of the DDC’s strong mode? Does this mean that there will be (subtly) different type systems for Dart? Maybe it’s time to formalize Gilad’s vision of a pluggable type system for Dart? We need a unified semantic foundation for Dart’s type system (basic, strong mode and maybe other variants). While this concerns semantic foundations, it will invariably affect usability (e.g. developers need a clear understand of the relationship between strong mode and “normal mode”) and tooling.


Careful planning needs to be done for the (possibly stratified) introduction of sizable core features. This is all considerable work, but necessary if Dart is to maintain its lead (lest it risk becoming a rapidly obsolete "alternative to JS/TS").


A roadmap is the usual place to document a feature list. As examples of roadmaps, consider those for TypeScript and Scala 2.12 (the next release of Scala). The TS roadmap is a simple bulleted list. The Scala 2.12 roadmap is much more complete covering: Goals, How, Background, Shared features (between current release (under flags) and next release), Timing, and more. There is also a separate Scala roadmap for releases beyond the next (2.12) that are as yet unnumbered (hence it avoids being committal about feature timing --- i.e., 2.x or 3.x or beyond). For starters, it would be nice to see at least a simple bulleted-list roadmap for Dart.


I’m not aware of any vision statement or roadmap for Dart. If these exist, it would be useful to publish them as part of dart-lang/DEP repo.  While it is nice to have a place for the community to submit DEPs, it would also be nice if the community could vote on individual features (a capability we used to have via dartbug.com when under Google Code).


Cheers,

Patrice


p.s. An interesting Scala feature being developed is the use of “typed (abstract syntax) trees” as an intermediate representation, instead of byte code, from which backends are targeting the JVM and JavaScript. Might Scala end up being serious competition for Dart?


p.p.s. Notice from Scala’s roadmap that the “Don Giovanni” release includes “simplifying foundations”, in particular with respect to the type system which is to be couched in a “minimal core calculus” named the: Dependent Object Types (DOT) system for Scala-like languages (Odersky et al. [1, 2]). Maybe a similar exercise is necessary for Dart?


Seth Ladd

unread,
Aug 26, 2015, 4:37:04 PM8/26/15
to Patrice Chalin, Dart Core Development, Bob Nystrom
Hi Patrice!

On Wed, Aug 26, 2015 at 1:03 PM, Patrice Chalin <pch...@gmail.com> wrote:

Among the most appealing aspects of Dart, to me, are its concise yet expressive notation, and (relatively) clean and simple semantics. Dart is to JS what Scala is to Java in the sense that: Dart is a state-of-the-art fielded language (used in sizable production code) making available today features that are quite likely to be retroactively adopted in subsequent releases of Java/TypeScript (metadata is one example that has already happened, thanks in part to the needs of Angular).


I would love to see the evolution of Dart fueled by exciting new features while remaining grounded/pragmatic, and preserving its core qualities. But that raises the question: what are the core defining qualities of Dart? What’s the elevator pitch?


Glad you asked! :) We've started a project to build a new website for Dart, which we hope will make it very clear what Dart is to developers in 2016 and beyond.

I do agree that the original Dart website was built back when Dart was only a language for the web (and was only at language spec 1.0). Today, it's much more than that, and there's a lot of good stuff inside Dart that we need to bring out.
 

IMHO, Dart needs a concise vision statement to capture its core defining qualities.


This will be on the new homepage. It's healthy to take stock every few years... much like Larry thinks Google needs a new mission statement. :)
 

Such a vision can help direct innovation (so that we can be proactive in proposing pioneering features) and provide a high level yay/nay test against which any new DEP can be assessed (based on whether it supports the vision or not). The formulated vision can also help the language design team ensure that Dart can clearly “stand out” (as Kasper put it) from the larger and rapidly changing ecosphere of scalable web/server/mobile app technologies. (E.g., how will Dart be positioning itself against new players like Scala.js --- which, e.g., already offers preliminary Angular support via scalajs-angular? :)


IMHO, Dart also needs to have a complete list of language features that are being considered. Having such a list is an essential prerequisite to doing feature baselining. A quick review of the list would also allow one to ensure that there is a proper balance of innovative vs. (more mundane but essential) housekeeping features.


I'd also phrase this as the difference between necessary and sufficient. We need to do a bunch of necessary work (aka "table stakes") but there are also sufficient features we could add that significantly propel Dart into new developers' hands.
 

Driven by the vision, this list needs to include the significant core features that are planned for Dart in the medium to long term, e.g., to suggest a few:


  • Union types? (Intersection types?)

  • (Deeply) immutable / value types (issue #501).

  • With the former, why not fully embrace functional programming (FP)? I believe that Dart, like Scala, is a good candidate to offer “the best of [OOP & FP] worlds” (as is touted on the Scala home page). FP and immutable types will prove invaluable for, e.g., Angular and Angular apps.

  • What are the implications of the advent of the DDC’s strong mode? Does this mean that there will be (subtly) different type systems for Dart? Maybe it’s time to formalize Gilad’s vision of a pluggable type system for Dart? We need a unified semantic foundation for Dart’s type system (basic, strong mode and maybe other variants). While this concerns semantic foundations, it will invariably affect usability (e.g. developers need a clear understand of the relationship between strong mode and “normal mode”) and tooling.


Careful planning needs to be done for the (possibly stratified) introduction of sizable core features. This is all considerable work, but necessary if Dart is to maintain its lead (lest it risk becoming a rapidly obsolete "alternative to JS/TS").


A roadmap is the usual place to document a feature list. As examples of roadmaps, consider those for TypeScript and Scala 2.12 (the next release of Scala). The TS roadmap is a simple bulleted list. The Scala 2.12 roadmap is much more complete covering: Goals, How, Background, Shared features (between current release (under flags) and next release), Timing, and more. There is also a separate Scala roadmap for releases beyond the next (2.12) that are as yet unnumbered (hence it avoids being committal about feature timing --- i.e., 2.x or 3.x or beyond). For starters, it would be nice to see at least a simple bulleted-list roadmap for Dart.


I’m not aware of any vision statement or roadmap for Dart. If these exist, it would be useful to publish them as part of dart-lang/DEP repo.  While it is nice to have a place for the community to submit DEPs, it would also be nice if the community could vote on individual features (a capability we used to have via dartbug.com when under Google Code).


Cheers,

Patrice


p.s. An interesting Scala feature being developed is the use of “typed (abstract syntax) trees” as an intermediate representation, instead of byte code, from which backends are targeting the JVM and JavaScript. Might Scala end up being serious competition for Dart?


p.p.s. Notice from Scala’s roadmap that the “Don Giovanni” release includes “simplifying foundations”, in particular with respect to the type system which is to be couched in a “minimal core calculus” named the: Dependent Object Types (DOT) system for Scala-like languages (Odersky et al. [1, 2]). Maybe a similar exercise is necessary for Dart?


--
You received this message because you are subscribed to the Google Groups "Dart Core Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to core-dev+u...@dartlang.org.

Günter Zöchbauer

unread,
Aug 27, 2015, 1:54:05 AM8/27/15
to Dart Core Development, pch...@gmail.com, rnys...@google.com
Great to hear, there are improvements planned or already work in progress.
This will make Dart appear less experimental and more respectable which is IMHO important for adoption for real-world applications.
Currently, before Dart 2.0, is a great time to introduce these things.

Bob Nystrom

unread,
Aug 27, 2015, 11:58:28 AM8/27/15
to Seth Ladd, Patrice Chalin, Dart Core Development

On Wed, Aug 26, 2015 at 1:36 PM, Seth Ladd <seth...@google.com> wrote:
Glad you asked! :) We've started a project to build a new website for Dart, which we hope will make it very clear what Dart is to developers in 2016 and beyond.

The website is a great way to communicate the Dart vision to people outside the team, but I think it's equally important for the Dart team itself to have a shared vision for the direction of the project. Otherwise, we can end up all pulling in different directions and going nowhere.

We're starting to talk about what "Dart 2.0" means, and I hope out of the outcomes of that is a clearer picture for what kind of language we want Dart to be, and that we can all agree on that picture.

Cheers!

- bob

Seth Ladd

unread,
Aug 27, 2015, 12:02:39 PM8/27/15
to Bob Nystrom, Patrice Chalin, Dart Core Development
That's certainly a prereq for our new website. Glad we're kicking this off!
 

Cheers!

- bob


Patrice Chalin

unread,
Aug 27, 2015, 1:36:27 PM8/27/15
to Bob Nystrom, Seth Ladd, Dart Core Development
On Thu, Aug 27, 2015 at 8:57 AM, 'Bob Nystrom' via Dart Core Development <core...@dartlang.org> wrote:
... equally important for the Dart team itself to have a shared vision for the direction of the project. Otherwise, we can end up all pulling in different directions and going nowhere.

Right.
 
We're starting to talk about what "Dart 2.0" means, and I hope out of the outcomes of that is a clearer picture for what kind of language we want Dart to be, and that we can all agree on that picture.

I assume that the committee is juggling with _some_ list of features. Any chance of having that published (even if it is an unordered list with no commitment to release dates)?

Cheers,
Patrice

Warren Strange

unread,
Aug 27, 2015, 1:41:54 PM8/27/15
to Dart Core Development, rnys...@google.com


+1  

I think Dart does need to maintain it's "edge" over alternatives such as Javascript. 

Somewhat anecdotal, but where I work Dart is a hard sell with the JS devs. They consider the features in ES6 (and 7) to put JS pretty much at parity with Dart, and can't see why they would use it. 

Dart is in a hard spot right now because it is not perfectly suited to any particular problem domain:

- For web development the story is not great (Polymer and Angular2 still very much a work in progress)
- On the server side, Dart lacks critical libraries (crypto, JWTs, etc.)
- Dart on mobile looks interesting (sky) - but it is not clear how strategic it really is to Google. 

Making the language cleaner, more powerful, etc. is a needed to build and maintain developer enthusiasm. 

Bob Nystrom

unread,
Aug 27, 2015, 1:44:43 PM8/27/15
to Patrice Chalin, Seth Ladd, Dart Core Development
On Thu, Aug 27, 2015 at 10:36 AM, Patrice Chalin <pch...@gmail.com> wrote:
We're starting to talk about what "Dart 2.0" means, and I hope out of the outcomes of that is a clearer picture for what kind of language we want Dart to be, and that we can all agree on that picture.

I assume that the committee is juggling with _some_ list of features.

For Dart 2.0, we aren't even that far along yet. We're still in nebulous-what-categories-of-changes-are-even-on-the-table mode right now. It is very informal at this point.

Even something as simple as a list of feature implies that changes have a certain chunkiness or granularity. For example, if you look at "config specific code" as a problem to be solved, there are a cloud of proposals orbiting it, many of which partially overlap, all of which are still only partially specified. It would be hard to say what the "feature" is there. And this is for a fairly narrowly defined problem.

Something as big as "Dart 2.0" is a lot more nebulous.

That being said, I'll do what I can to provide notes from the process as it evolves. I just have to balance that with wanting to make sure the meetings themselves are candid, fluid, and move quickly. TL;DR: Writing everything down is surprisingly hard.

Cheers!

- bob

Patrice Chalin

unread,
Aug 28, 2015, 8:33:48 AM8/28/15
to Bob Nystrom, Seth Ladd, Dart Core Development
On Thu, Aug 27, 2015 at 10:44 AM, Bob Nystrom <rnys...@google.com> wrote:
TL;DR: Writing everything down is surprisingly hard.

Yes it is!  But as Simon Peyton Jones suggests (about writing great papers, though IMHO, it applies here too): doing the writing while conducting R&D gives better results than after.

Cheers
-- 
Patrice View my LinkedIn Profile. Google+ Profile. 

Patrice Chalin

unread,
Aug 28, 2015, 9:43:49 AM8/28/15
to Anders Sandholm, Seth Ladd, Dart Core Development, Bob Nystrom
Hi Anders,

Thanks for your response.

On Fri, Aug 28, 2015 at 4:25 AM, Anders Sandholm <sand...@google.com> wrote:
I am all for having a shared and public vision for Dart. We have iterated on one internally and I think it's time to develop one for the whole Dart team which matches well with the current state and which we can also share broadly and point people interested in Dart to. As Seth said, this is going to be on the new homepage.

Great!
 
We are not going to have a detailed roadmap of which features are going into which release. That is not how we operate. We do have a list, though, of high level features that we are actively working on and are hoping to land in the next stable release. I think it would be fine to communicate what this list looks like. Also, while this is not a roadmap in and of itself, the list of current DEPs gives you a good idea about what is being considered and what we expect to actively work on.

This, in part, is what worries me. As was noted at some recent DEP meeting, there has been an initial tendency to respond to DEPs as they entered the queue. It was also mentioned that this isn't, of course, the best way to allocate limited resources and ensure that core features (not yet expressed as DEPs) get implemented too.

Here is a concrete example. While I think DEP 30 (non-null types) is a good idea :) ... IMHO resources would be better spent realizing union types first since (again, in my opinion), the overall effort of implementing non-null types before union types is greater (and potentially more risky) than doing it the other way around. (It is more risky because, e.g., an incongruence between non-null types and union types might inadvertently be introduced while implementing non-null types; then one must choose between introducing a breaking change vs. living with the incongruity).

Here is an another example. Responsive client-side apps (built using, say, Angular), and concurrent programming in general, can greatly benefit from value types. Yes, it is a complex issue, as Gilad has pointed out in a comment to issue #501, but it is an important one. Then again, value types and broader support for functional programming (FP) go nicely together. Are either of these being considered? (Value types are even being considered for Java 9! ;) ... here is the 20 page proposal).

Cheers

Anders Sandholm

unread,
Aug 28, 2015, 11:43:57 AM8/28/15
to Seth Ladd, Patrice Chalin, Dart Core Development, Bob Nystrom
Hi Patrice,

Thanks for your email. I am all for having a shared and public vision for Dart. 
We have iterated on one internally and I think it's time to develop one for the whole Dart team which matches well with the current state and which we can also share broadly and point people interested in Dart to. As Seth said, this is going to be on the new homepage.

We are not going to have a detailed roadmap of which features are going into which release. That is not how we operate. We do have a list, though, of high level features that we are actively working on and are hoping to land in the next stable release. I think it would be fine to communicate what this list looks like. Also, while this is not a roadmap in and of itself, the list of current DEPs gives you a good idea about what is being considered and what we expect to actively work on.    

HTH,
Anders
--
Anders Thorhauge Sandholm,
Product Manager, Google Denmark
CVR nr. 28 86 69 84

Bob Nystrom

unread,
Aug 28, 2015, 5:27:40 PM8/28/15
to Patrice Chalin, Anders Sandholm, Seth Ladd, Dart Core Development
On Fri, Aug 28, 2015 at 6:43 AM, Patrice Chalin <pch...@gmail.com> wrote:
Here is a concrete example. While I think DEP 30 (non-null types) is a good idea :) ... IMHO resources would be better spent realizing union types first since (again, in my opinion), the overall effort of implementing non-null types before union types is greater (and potentially more risky) than doing it the other way around. (It is more risky because, e.g., an incongruence between non-null types and union types might inadvertently be introduced while implementing non-null types; then one must choose between introducing a breaking change vs. living with the incongruity).

Ah, interesting. That's a good point. Non-nullable types will be a big complex piece of machinery to land, so I expect there will be lots of time where we have a visible public experimental implementation that's evolving. That should give us enough opportunity to make sure we don't paint ourselves into a corner even if we don't do union types before or in parallel with them.
 
Here is an another example. Responsive client-side apps (built using, say, Angular), and concurrent programming in general, can greatly benefit from value types. Yes, it is a complex issue, as Gilad has pointed out in a comment to issue #501, but it is an important one. Then again, value types and broader support for functional programming (FP) go nicely together. Are either of these being considered? (Value types are even being considered for Java 9! ;) ... here is the 20 page proposal).

Yes, value types come up pretty frequently in discussions, though it isn't always clear that we all agree on what "value types" even means. To me, it's about controlling allocation (value types are on the stack or directly embedded in objects). To others, it's about deep immutability.

Cheers!

- bob

Erik Ernst

unread,
Aug 31, 2015, 4:00:06 AM8/31/15
to Bob Nystrom, Patrice Chalin, Anders Sandholm, Seth Ladd, Dart Core Development
On Fri, Aug 28, 2015 at 11:27 PM, 'Bob Nystrom' via Dart Core Development <core...@dartlang.org> wrote:
On Fri, Aug 28, 2015 at 6:43 AM, Patrice Chalin <pch...@gmail.com> wrote:
[.. order of NNBD & union types ..]

[..] Non-nullable types will be a big complex piece of machinery to land, so I expect there will be lots of time [..]
 
Here is an another example. [..] value types. [..]

Yes, value types come up pretty frequently in discussions, though it isn't always clear that we all agree on what "value types" even means. To me, it's about controlling allocation (value types are on the stack or directly embedded in objects). To others, it's about deep immutability.

Can't resist adding a different perspective to this: To me, it's about a conceptually robust notion of values, and a corresponding language semantics in the support for that concept.

So values may be simple or composite, but the representation must be kept immutable at all times and it must be referentially transparent. You may or may not refer to the representation via a pointer, but you can't tell, and you can never tell the difference between the case where "the same value" is the same representation in memory, e.g., in the same register or reached via the same pointer value, or two different representations of the same value, which may or may not be represented using the same bits in different memory locations (a representation which is built from several heap entities would already violate that expectation, because internal pointers among them would be different as bit strings, but the graphs constituted by those entities would be isomorphic). Of course, equality among values is structural, which should be supported and enforced by the language (but that's inevitable given that we require referential transparency).

With that, small-space value types (<= 8 bytes or so) could be copied freely and passed in registers etc. (which is a typical expectation for value types), but we would also have a consistent semantics for values whose memory representation is larger (they can freely be shared, partially shared, copied, marshalled/unmarshalled and communicated in distributed systems, etc.).

  best regards,

--
Erik Ernst  -  Google Danmark ApS
Skt Petri Passage 5, 2 sal, 1165 København K, Denmark
CVR no. 28866984

Patrice Chalin

unread,
Aug 31, 2015, 12:07:01 PM8/31/15
to Erik Ernst, Bob Nystrom, Anders Sandholm, Seth Ladd, Dart Core Development
On Mon, Aug 31, 2015 at 1:00 AM, Erik Ernst <eer...@google.com> wrote:
... To me, it's about a conceptually robust notion of values, and a corresponding language semantics in the support for that concept.
... With that, small-space value types (<= 8 bytes or so) could be copied freely and passed in registers etc. (which is a typical expectation for value types), but we would also have a consistent semantics for values whose memory representation is larger (they can freely be shared, partially shared, copied, marshalled/unmarshalled and communicated in distributed systems, etc.).

This matches my understanding of value types. Or said another way: this is the feature I had in mind (based on a given set of underlying use cases), regardless of what it is called.

Maybe it is time for a DEP? :)
-- 

Bob Nystrom

unread,
Aug 31, 2015, 1:41:58 PM8/31/15
to Erik Ernst, Patrice Chalin, Anders Sandholm, Seth Ladd, Dart Core Development
On Mon, Aug 31, 2015 at 1:00 AM, Erik Ernst <eer...@google.com> wrote:
Yes, value types come up pretty frequently in discussions, though it isn't always clear that we all agree on what "value types" even means. To me, it's about controlling allocation (value types are on the stack or directly embedded in objects). To others, it's about deep immutability.

Can't resist adding a different perspective to this: To me, it's about a conceptually robust notion of values, and a corresponding language semantics in the support for that concept.

So values may be simple or composite, but the representation must be kept immutable at all times and it must be referentially transparent. You may or may not refer to the representation via a pointer, but you can't tell, and you can never tell the difference between the case where "the same value" is the same representation in memory, e.g., in the same register or reached via the same pointer value, or two different representations of the same value, which may or may not be represented using the same bits in different memory locations (a representation which is built from several heap entities would already violate that expectation, because internal pointers among them would be different as bit strings, but the graphs constituted by those entities would be isomorphic). Of course, equality among values is structural, which should be supported and enforced by the language (but that's inevitable given that we require referential transparency).

With that, small-space value types (<= 8 bytes or so) could be copied freely and passed in registers etc. (which is a typical expectation for value types), but we would also have a consistent semantics for values whose memory representation is larger (they can freely be shared, partially shared, copied, marshalled/unmarshalled and communicated in distributed systems, etc.).

Yup, this is more or less what I had in mind with "deep immutability". Once you have that, it's no longer visible whether or not an object is passed by value (copied) or by reference, so an implementation is free to do whichever it prefers.

Where it gets tricky is equality. For the above to be true, you do need full referential transparency like you say. That in turn implies structural equality such that you can't distinguish between objects with the same state even if they came from different provenance.

I appreciate the appeal of this from a theoretical standpoint, but it's not what I think Dart needs. If our goal is to be an efficient client-side language, I think controlling allocation is critical. This has always been one of the big advantages of C, C++, C#, and Go. Java and JavaScript in contrast really struggle. If you look at, for example, the Android APIs, you can see where they have worked very hard to minimize allocations in spite of what Java gives them, and JS goes through similar machinations.

Cheers,

- bob

Erik Ernst

unread,
Sep 1, 2015, 8:20:35 AM9/1/15
to Patrice Chalin, Bob Nystrom, Anders Sandholm, Seth Ladd, Dart Core Development
You raised the bar a lot for what it takes to do that. But you're right!  ;-)

Erik Ernst

unread,
Sep 1, 2015, 8:31:57 AM9/1/15
to Bob Nystrom, Patrice Chalin, Anders Sandholm, Seth Ladd, Dart Core Development
On Mon, Aug 31, 2015 at 7:41 PM, Bob Nystrom <rnys...@google.com> wrote:
On Mon, Aug 31, 2015 at 1:00 AM, Erik Ernst <eer...@google.com> wrote:
Yes, value types come up pretty frequently in discussions, though it isn't always clear that we all agree on what "value types" even means. To me, it's about controlling allocation (value types are on the stack or directly embedded in objects). To others, it's about deep immutability.

Can't resist adding a different perspective to this: To me, it's about a conceptually robust notion of values, and a corresponding language semantics in the support for that concept.

So values may be simple or composite, but [..] immutable [..] referentially transparent.[..] graphs constituted by those entities would be isomorphic [..] equality among values is structural [..]

[..] value [..] could be copied freely and passed in registers etc. [..] also have a consistent semantics for values whose memory representation is larger [..]

Yup, this is more or less what I had in mind with "deep immutability". Once you have that, it's no longer visible whether or not an object is passed by value (copied) or by reference, so an implementation is free to do whichever it prefers.

Where it gets tricky is equality. For the above to be true, you do need full referential transparency like you say. That in turn implies structural equality such that you can't distinguish between objects with the same state even if they came from different provenance.

Indeed, equality must be more powerful in order to be able to recognize isomorphic structures rather than just identical bit vectors, but I suspect that it would be possible to develop a culture around the use of objects vs. values such that the extra work done by the compiler/runtime will be a good investment, because the resulting software would be easier to understand.

I appreciate the appeal of this from a theoretical standpoint, but it's not what I think Dart needs. If our goal is to be an efficient client-side language, I think controlling allocation is critical.

You would be able to specify a high level of allocation control on small value types, so you could have both.
 
This has always been one of the big advantages of C, C++, C#, and Go. Java and JavaScript in contrast really struggle.

But you shouldn't have to tolerate that low-level "you can break anything you want, and more" feel that C++ and C provides, just in order to get some cheap `ComplexNumber`s.

If you look at, for example, the Android APIs, you can see where they have worked very hard to minimize allocations in spite of what Java gives them, and JS goes through similar machinations.

I actually think that it all starts with the consistent and well-understood semantics. As soon as you have that I'm sure you can use it to provide a very well performing `int` etc., and then the language as a whole would still be comprehensible (as opposed to the mess they have in Java where object identity causes confusing properties of various types that-should-have-been-value-types).

Bob Nystrom

unread,
Sep 1, 2015, 12:52:53 PM9/1/15
to Erik Ernst, Patrice Chalin, Anders Sandholm, Seth Ladd, Dart Core Development
On Tue, Sep 1, 2015 at 5:31 AM, Erik Ernst <eer...@google.com> wrote:
If you look at, for example, the Android APIs, you can see where they have worked very hard to minimize allocations in spite of what Java gives them, and JS goes through similar machinations.

I actually think that it all starts with the consistent and well-understood semantics.

Consistent and well-understood doesn't always have to mean high level. :)
 
As soon as you have that I'm sure you can use it to provide a very well performing `int` etc.,

Well, we've had consistent, well-understood semantics for Dart for a long time now, and we still don't have great performance around numbers on all of the implementations. Still waiting on that Sufficiently Smart Compiler™. :(
 
and then the language as a whole would still be comprehensible (as opposed to the mess they have in Java where object identity causes confusing properties of various types that-should-have-been-value-types).

Yeah, I think Java made a few mistakes here. I don't think that strictly implies that all possible approaches in that area are doomed to failure. Go and C# also have controlled-allocation value types and they seem to work OK in both places.

There's no silver bullet, of course, but the set of language features you expose does have an affect on performance.

Cheers!

- bob


Patrice Chalin

unread,
Sep 2, 2015, 1:13:00 PM9/2/15
to Bob Nystrom, Erik Ernst, Anders Sandholm, Seth Ladd, Dart Core Development
Hi all,

On Tue, Sep 1, 2015 at 9:52 AM, Bob Nystrom <rnys...@google.com> wrote:
... There's no silver bullet, of course, but the set of language features you expose does have an affect on performance.

Right.

I am certainly looking forward to the publication of a vision statement for Dart, as Anders mentioned earlier. My impression is that Dart will be targeted for use in client-, server-side and mobile apps. If so, that will be quite a challenge. Proper language abstractions needed to support highly concurrent & scalable applications, may be too much at odds with low-level features seen as necessary for apps executing under the tight resource constraints of mobile platforms.

Dart 1.0 was, IMHO, enthusiastically received because it addressed a pressing need: maintaining sizable JS apps was becoming overbearingly painful. As we know, JS was never intended to be a language for engineering large software systems. Dart addressed this need by offering proper encapsulation mechanisms in an expressive yet simple language.

As discussions of Dart 2.0 are picking up, I can't help but be reminded of the warnings of Frederick Brooks about the second-system effect: "when embarking on a second [version of a] system, an engineer should be mindful that they are susceptible to over-engineering it."  If Dart has too broad a mandate it runs the risk of becoming yet a(n other) bloated language, or on the flip side, not quite fully satisfying the needs of any of its intended uses. While we know that language design is about balance, my hope that there isn't an attempt to balance too much in one go. My 2 cents.

Cheers

Seth Ladd

unread,
Sep 2, 2015, 1:46:20 PM9/2/15
to Patrice Chalin, Bob Nystrom, Erik Ernst, Anders Sandholm, Dart Core Development
+1

Bob Nystrom

unread,
Sep 2, 2015, 3:35:19 PM9/2/15
to Patrice Chalin, Erik Ernst, Anders Sandholm, Seth Ladd, Dart Core Development
On Wed, Sep 2, 2015 at 10:13 AM, Patrice Chalin <pch...@gmail.com> wrote:
Dart 1.0 was, IMHO, enthusiastically received because it addressed a pressing need: maintaining sizable JS apps was becoming overbearingly painful. As we know, JS was never intended to be a language for engineering large software systems. Dart addressed this need by offering proper encapsulation mechanisms in an expressive yet simple language.

I think one of our biggest problems is that Dart hasn't been enthusiastically received, at least not externally. Inside Google, we're really happy with the language's growth, but our external userbase isn't where it needs to be yet.
 

As discussions of Dart 2.0 are picking up, I can't help but be reminded of the warnings of Frederick Brooks about the second-system effect: "when embarking on a second [version of a] system, an engineer should be mindful that they are susceptible to over-engineering it."  If Dart has too broad a mandate it runs the risk of becoming yet a(n other) bloated language, or on the flip side, not quite fully satisfying the needs of any of its intended uses. While we know that language design is about balance, my hope that there isn't an attempt to balance too much in one go. My 2 cents.

I agree totally. I think the most important decisions we can make for Dart 2.0 are what not to do.

Cheers!

- bob


Patrice Chalin

unread,
Sep 2, 2015, 5:03:03 PM9/2/15
to Dart Core Development, pch...@gmail.com, eer...@google.com, sand...@google.com, seth...@google.com
On Wednesday, September 2, 2015 at 12:35:19 PM UTC-7, rnystrom wrote:
I think one of our biggest problems is that Dart hasn't been enthusiastically received, at least not externally. Inside Google, we're really happy with the language's growth, but our external userbase isn't where it needs to be yet.

It was my impression that there was enthusiasm initially, but it does seem to have diminished. The language landscape is constantly shifting and peer languages are evolving: ES6 out, and ES2016 is the first of a yearly release train, with possible features including decorators (catching up with Dart) and value types (which we have been talking about recently), to mention only two.

Dart is head of the pack IMHO, but for external users (and probably internal users too), it isn't easy to assess the benefits / risks of using Dart vs., say, sticking to JS/TypeScript. (The advent of the DDC might help lower risks.)

I agree totally. I think the most important decisions we can make for Dart 2.0 are what not to do.

:)

Cheers,
Patrice

Benjamin Strauß

unread,
Sep 2, 2015, 5:09:55 PM9/2/15
to Dart Core Development, pch...@gmail.com, eer...@google.com, sand...@google.com, seth...@google.com
Am Mittwoch, 2. September 2015 21:35:19 UTC+2 schrieb rnystrom:

On Wed, Sep 2, 2015 at 10:13 AM, Patrice Chalin <pch...@gmail.com> wrote:
Dart 1.0 was, IMHO, enthusiastically received because it addressed a pressing need: maintaining sizable JS apps was becoming overbearingly painful. As we know, JS was never intended to be a language for engineering large software systems. Dart addressed this need by offering proper encapsulation mechanisms in an expressive yet simple language.

I think one of our biggest problems is that Dart hasn't been enthusiastically received, at least not externally. Inside Google, we're really happy with the language's growth, but our external userbase isn't where it needs to be yet.

When i talk to colleagues about Dart, there was/is always the assumption that ES6 and/or TypeScript will get/has all those Dart features anyway. So the problem is either that Dart's features aren't communicated well enough, or it hasn't enough features to differentiate it from aforementioned languages.

Seth Ladd

unread,
Sep 2, 2015, 5:12:18 PM9/2/15
to Benjamin Strauß, Dart Core Development, Patrice Chalin, Erik Ernst, Anders Sandholm
Depends on if you want to wait for a potential future, or use Dart today :)

Felipe

unread,
Sep 2, 2015, 5:30:48 PM9/2/15
to Dart Core Development, rnys...@google.com
if we see the following points, which one is better dart that javascript?

Llibraries
Tools
Performance
Scalability
Potentiality
Mobile developement
Server developement
Web developement
Community size
Documentation




Felipe

unread,
Sep 2, 2015, 5:41:42 PM9/2/15
to Dart Core Development, rnys...@google.com
For me

Performance
Scalability
Potentiality

Maybe you should focus more on attracting Java, C# users 
Reply all
Reply to author
Forward
0 new messages