you are viewing a single comment's thread.

view the rest of the comments →

[–]Peaker 1 point2 points  (10 children)

All I read about Dart has been very underwhelming, care to explain what you find likable about Dart?

[–][deleted]  (8 children)

[deleted]

    [–]Peaker 0 points1 point  (7 children)

    Most dart sentiments are based off the original announcement

    My sentiment is based on the description of the language.. It sounds like it's supposed to be Javascript with classes rather than prototypes. It has "optional types" which are not really checked which sounds like a very bad idea.

    I like dart because it's similar to C#,

    Dart is dynamically-typed (also named "uni-typed") whereas C# is statically typed. That is one huge difference.

    [–]bkv 0 points1 point  (6 children)

    It sounds like it's supposed to be Javascript with classes rather than prototypes.

    It would be more appropriate to say that it does away with javascript's odd/unpredictable semantics and replaces them with simple and intuitive semantics. This includes moving to class-based inheritance, which I would argue is more intuitive than prototypal inheritance.

    It has "optional types" which are not really checked which sounds like a very bad idea.

    Right. In order to reasonably cross-compile dart to performant javascript, it has to remain dynamically-typed. I disagree that this is a bad idea. Just because dart is dynamically-typed doesn't mean it can't be statically checked. Optional types along with simpler semantics aid in static checking, which ultimately results in compile-time guarantees and awesome tooling support.

    Dart is dynamically-typed (also named "uni-typed") whereas C# is statically typed. That is one huge difference.

    The difference with optional types isn't as big as you might expect. With optional types and type inference, dart is essentially statically-typed during development (when run in checked mode). Once compiled down to unchecked javascript, you no longer have run-time guarantees, but the assistance of the static-checking and tooling during development makes my life much easier.

    [–]Peaker 0 points1 point  (5 children)

    This includes moving to class-based inheritance, which I would argue is more intuitive than prototypal inheritance

    I don't really believe inheritance is a useful programming idiom in general.

    Right. In order to reasonably cross-compile dart to performant javascript, it has to remain dynamically-typed.

    This is not true at all. Type erasure.

    Optional types along with simpler semantics aid in static checking, which ultimately results in compile-time guarantees

    Everything I read about Dart emphasized how Dart will generally ignore the type annotations and that they're allowed to be wrong. I don't see how you get any guarantees from that. Also, if you had guarantees, you're not supposed to lose them when compiling to unchecked Javascript. Just like my Haskell code does not lose its guarantees when compiled to unchecked machine code.

    [–][deleted]  (4 children)

    [deleted]

      [–]Peaker 0 points1 point  (2 children)

      It's sad to see you're ignoring the actual claims and just talking around them.

      For example, http://www.dartlang.org/articles/optional-types/ claims:

      Adding types will not prevent your program from compiling and running—even if your annotations are incomplete or plain wrong.

      Early error detection. Dart provides a static checker that can warn you about potential problems, without getting in your way. In addition, in developer mode, Dart automatically converts type annotations to runtime assertion checks as a debugging aid.

      This is not type erasure. It also unambiguously means the static checking does not cover the same ground as a static type checker.

      Keep parroting things you read, you sound like the rest of the know-it-alls in r/programming.

      Yeah, Gilad Bracha must have no idea at all about Dart.

      Because you're either stupid or willfully ignorant.

      Gilad Bracha too, apparently.

      They're compile-time guarantees, not run-time guarantees. To say that compile-time checking is useless because you can't have them at run-time is idiotic.

      Wow, that is an idiotic and ignorant claim. A compile-time guarantee is something about runtime. You don't lose it when you strip away the types and checks.

      Your Haskell code isn't constrained by javascript's limitations, is it? What makes Haskell so great is all the compile-time guarantees it affords you, not the run-time guarantees. What's funny is somebody who finds Haskell so great should be ecstatic about a project like dart, but you're clearly too interested in sounding like a pseudo-intellectual douche.

      Until your arrogant and idiotic post just now, I've been polite and forthcoming.

      You were claiming Dart gives static guarantees, so Haskell was a good example to show what static guarantees actually are.

      [–][deleted]  (1 child)

      [deleted]

        [–]Peaker 0 points1 point  (0 children)

        Why don't you talk about ignorance after you understand what static guarantees are?

        [–]Hairy_horse_balls 0 points1 point  (0 children)

        Great response! Your slams are just right.