SlideShare uma empresa Scribd logo
1 de 40
Google Dart
     Eberhard Wolff
     Architecture & Technology Manager
     adesso AG




27.10.11
Dart: A Structure Web Programming Language
►    New programming language


►    New programming tools


►    New open source project


►    Currently in a preview
►    …for feedback




27.10.11
The Team Behind Dart
               ►    Lars Bak
                    >  Beta language
                    >  HotSpot Java VM
                    >  V8 JavaScript VM in Google Chrome
                    >  18 software patents


               ►    Gilad Bracha
                    >  Computational Theologist and later Distinguished Engineer at
                       Sun
                    >  Java Language Specification
                    >  Java Virtual Machine Specification


               ►    Both worked on Strongtalk (Smalltalk + static typing)




27.10.11   3
Why Dart?
►    More and more web application with complex logic


►    Will become a lot more: HTML5 on the rise


►    So far: No really great languages designed to create large scale web applications


►    Google: The competition is NOT JavaScript ... but fragmented mobile platforms


►    GWT (Google Web Toolkit) already featured a Java to JavaScript compiler


►    Dart is designed with simplicity and mass appeal in mind




27.10.11   4
Runtime Environment
►    Dart has its own VM
►    Open Source project
►    Needed for some advanced features


►    Dart can compile into JavaScript
►    Runs on any browser
►    Currently not very efficient
►    i.e. about the same performance as first V8 releases
►    Size of JavaScript code currently considerable




27.10.11   5
Hello World in Dart

 main() {	
    print('Hello, Dart!');	
 }	


►    C like language


     int fib(int n) {	
        if (n <= 1) return n;	
        return fib(n - 1) + fib(n - 2);	
     }	
     	
     main() {	
        print('fib(20) = ${fib(20)}');	
     }	


►    Seemingly static typing


27.10.11
Objects and Classes
  class Person {	
     String name;	
     Person(this.name);	
  }	
  	
  main() {	
     Person p = new Person('Gilad');	
     print('Hi ${p.name} ');	
  }	


►    Easy to initialize fields




27.10.11    7
Objects and Classes
  class Person {	
     String name;	
     String firstname;	
     Person(this.name);	
     Person.withFirstname(this.firstname,this.name);	
  	
  }	
  	
  main() {	
     Person p = new Person.withFirstname('Gilad','Bracha');	
     print('Hi ${p.firstname} ${p.name}');	
  }	

►    No method or constructor overloading




27.10.11   8
Namespaces
►    Much like Java packages
►    Might contain classes, interfaces, variables and functions


►    Definition:
#library("http");	


►    Using:
#import("http.dart");	


►    Optional prefix:
#import("http.dart”,”http”);	




27.10.11      9
Dart Library




27.10.11   10
Object Construction With Factories
interface Person	                                    class Adessi	
  factory PersonFactory {	                             implements Person {	
   Person(name);	                                       Adessi(this.name);	
   final name;	                                         String name;	
}	                                                   }	
	                                                    	
class PersonFactory {	                               class RealPerson	
   factory Person(name) {	                             implements Person {	
      if (name == 'Wolff') {	                           RealPerson(this.name);	
        return new Adessi(name);	                       String name;	
      } 	                                            }	
      return new RealPerson(name);	                  	
   }	                                                main() {	
}	                                                      Person p	
	                                                         = new Person('Wolff');	
                                                        print(p is Adessi);	
                                                        p = new Person('Bracha');	
►    Very elegant approach to allow for other object    print(p is Adessi);	
     creation algorithms                             }	


27.10.11   11
More Complex Example
  class Person {}	
  	
  class Customer extends Person {	
     buy() {print("bought");}	
  }	
  	
  main() {	
     Person p = new Customer();	
     p.buy();	
  }	




27.10.11   12
More Complex Example
  class Person {}	
  	
  class Customer extends Person {	
     buy() {print("bought");}	
  }	
  	
  main() {	
     Person p = new Customer();	
     p.buy();	
  }	


►    Code actually compiles and runs


►    There are no type errors – only Static Warnings
►    Types are considered annotations


►    Type annotations never change the semantics of a program
27.10.11   13
On Types
►    Type theory: A type defines a set of values and operations on them
     >  i.e.Java int: values: all integers from -2147483648 to 2147483647
     >  Operations on int: + - * etc


►    Goal: Check types to find errors
     >  i.e. multiply a String by an int
     >  i.e. call a method that does not exist on an object


►    Type checkers proof the partial correctness of programs
►    i.e. at least types are correct


►    Typing will only find basic errors




27.10.11    14
Dynamic Typing
►    At runtime


►    Advantage
     >  Simpler
     >  More flexible
     >  Can even implement methods on the fly – Meta programming


►    Disadvantage
     >  Perceived as less secure




27.10.11   15
Static Typing
►    Typing checked At compile time


►    Advantage
     >  IDE support
     >  Documentation
     >  Perceived as safer
     >  …but problems should be found by Unit Tests, too!


►    Disadvantage
     >  Overhead if no type inference
     >  Complex to get right in some case
     >  Complex (Java Generic FAQ by Anglika Langer is 297 pages !)




27.10.11   16
Generics in Java
►    Does this code compile?

 public class Customer extends Person {	
 …	
 }	
 	
 public static void main(String[] args) {	
    List<Person> listOfPerson = new ArrayList<Person>();	
    List<Customer> listOfCustomer = new ArrayList<Customer>();	
    listOfCustomer=listOfPerson;	
    listOfPerson=listOfCustomer;	
 }	




27.10.11   17
Generics in Java
►    Does this code compile?

 public class Customer extends Person {	
 …	
 }	
 	
 public static void main(String[] args) {	
    List<Person> listOfPerson = new ArrayList<Person>();	
    List<Customer> listOfCustomer = new ArrayList<Customer>();	
    listOfCustomer=listOfPerson;	
    listOfPerson=listOfCustomer;	
 }	



 listOfPerson.add(new Person());	
 listOfCustomer.add(new Person());	
 Customer c = listOfCustomer.get(1);	
 Customer c = listOfPerson.get(1);	


27.10.11   18
Generics and Static Typing in Java
►    You can still mess with it
►    Basically each type cast disables static typing
►    i.e. it can introduce problems that otherwise would have been discovered by the
     compiler



 listOfPerson.add(new Person());	
 Object obj = listOfPerson;	
 listOfCustomer = (List<Customer>) obj;	
 Customer c = listOfCustomer.get(0);	




27.10.11   19
Static vs. Dynamic Typing: My Take
►    Errors found by a static type checker will also be found by unit tests
►    The security of static typing is only perceived


►    Real advantage: Documentation
►    “I expect you to pass in a Customer!”
►    “This gives you a Person!”


►    Tool support
►    Easier to come up with suggestions for content assist
►    However, Dynamic languages tools are catching up




27.10.11   20
Generics in Dart
 class Person {}	
 	
 class Customer extends Person {	
    buy() {print("bought");}	
 }	
 	
 main() {	
    List<Customer> listOfCustomer = new List<Customer>();	
    List<Person> listOfPerson = listOfCustomer;	
    listOfPerson.add(new Person());	
    Customer c = listOfCustomer[0];	
    c.buy();	
 }	




27.10.11   21
Generics in Dart
 class Person {}	
 	
 class Customer extends Person {	
    buy() {print("bought");}	
 }	
 	
 main() {	
    List<Customer> listOfCustomer = new List<Customer>();	
    List<Person> listOfPerson = listOfCustomer;	
    listOfPerson.add(new Person());	
    Customer c = listOfCustomer[0];	
    c.buy();	
 }	


►    Call to buy() won’t work
►    Problem not found until the method is actually called
►    Optional run time type checker would find the problem one line earlier
►    Valid code: List<Customer> is a List<Person>

27.10.11   22
Generics in Dart
►    Generics in Dart are considered covariant
►    i.e. List<Customer> is List<Person>
►    This is in fact logical incorrect (see last slide)


►    But:
     >  Do you want to read 297 pages Generic FAQ?
     >  And: It is just a help to spot basic errors




27.10.11    23
Concurrency

 public class MyCache {	
 	
   Map<Integer, Integer> map = new HashMap<Integer, Integer>();	
 	
   public void add(int i, int j) {	
      map.put(i, j);	
   }	
        		
   public int read(int i) {	
      return map.get(i);	
   }	
 }

►    What is the problem?




27.10.11   24
Concurrency

 public class MyCache {	
 	
   Map<Integer, Integer> map = new HashMap<Integer, Integer>();	
 	
   public void add(int i, int j) {	
      map.put(i, j);	
   }	
        		
   public int read(int i) {	
      return map.get(i);	
   }	
 }

►    What is the problem?
►    Code is not thread safe!
►    Should use ConcurrentHashMap instead



27.10.11   25
Concurrency
►    What is the real problem?

                                                                   Threads
►    Concurrency in object-oriented systems


►    OO is based on concurrent access shared state
     >  Hard to get correct
     >  If you get it correct: performance bad
     >  Locks
     >  Synchronization
     >  Etc
                                                               Object with State

►    Pretty low level concept
►    This is why Carnegie Mellon dropped OO from the Computer Science curriculum!


►    Can we do better?
27.10.11   26
Dart code is always single threaded!




27.10.11
 27
Isolates
►    Inspired by Actor model
►    As present in Erlang
►    As done in Scala with Actors and Akka                           Port


►    Idea: State is hidden in Isolates                                   Isolate
                                                                        with State
►    Isolates communicate with messages send to ports
►    Each isolate only works on one message at a time


►    No concurrency issues in an Isolate: Only one thread


►    Still concurrent: Multiple isolates might be active at a time




27.10.11   28
Isolates

 class Printer extends Isolate {	
    main() {	
       port.receive((message, replyTo) {	
          if (message == null) port.close();	
          else print(message);	
       });	
    }	
 }	
 	
 main() {	
    new Printer().spawn().then((port) {	
       for (var message in ['Hello', 'from', 'other', 'isolate']) {	
          port.send(message); 	
       }	
       port.send(null);	
    });	
 } 	



27.10.11   29
More Fun With Isolates
►    Isolates might be mapped to Web Worker in JavaScript


►    Nothing is shared
►    Isolates will have their own heap on the Dart VM
     >  Messages must be serialized and deserialized
     >  Garbage Collection can happen per Isolate
     >  No more stop-the-world GC!


►    Isolates might be used to introduce security concepts
     >  Enforce security rules on ports
     >  To replace Same Origin Policy




27.10.11   30
More Fun With Isolates
►    Isolates require a light weight concurrency model
     >  OS Thread switches take too much time
     >  In Erlang 100.000 of Isolates equivalent are not uncommon
     >  No way to run that many threads
     >  Interesting issue for Dart VM


►    Isolates for Remoting
     >  Can send messages to a port on a different host
     >  Semantics don’t change as serialization is done anyway


►    Probably more high level concurrency models


►    Specifications says that Isolates might run different versions of libraries




27.10.11   31
Even More Fun With Isolates
►    In Erlang the concept is extended for high availability
     >  Links allow to listen to events of Isolates
     >  Supervisor can monitor other processes
     >  If an error occurs the isolate crashes and is restarted
     >  Hierarchies of supervisors can be created
     >  State is a problem here
     >  This makes high availability easy to develop
     >  Dart might come up with a similar solution




27.10.11   32
Snapshots
►    VM can be snapshot
►    Current heap etc


►    Faster startup
     >  No need to create initial state, config, …
     >  Used in V8 already for standard JavaScript libraries
     >  How long does a JVM need to start up?


►    Possible answer to mobile applications killed due to memory constraints


►    Could be used to migrate isolates between machines




27.10.11   33
Dart Editor
►    Editor for Dart applications


►    Based on Eclipse


►    Code in the Open Source Project




27.10.11   34
More Complex Example
►    Swarm: A newsreader


►    Completely written in Dart
     >  App code: 3210 LOC
     >  UI library code: 13200 LOC
     >  Animation yields 30 fps
     >  Runs on iPad and Chrome




27.10.11   35
Not Decided Yet…
►    Currently a technology preview


►    Some questions are open
     >  Reflection? Probably using Mirrors
     >  Changing classes on the fly? Probably not needed due to Isolates
     >  What about Chrome?




27.10.11   36
Links
►    http://www.dartlang.org/
     >  Language Site
     >  Tutorials
     >  Language Spec
     >  Library Spec
     >  …
►    http://dart.googlecode.com/
     >  Open Source project
     >  Including compiler, VM etc.
►    http://code.google.com/p/jdart/
     >  Dart on the JVM
►    http://it-republik.de/jaxenter/artikel/Google-Dart-4121.html
     >  German
►    http://jonaswesterlund.se/dart.html
     >  Pre compiled Dart for Mac OS X
►    http://www.infoq.com/articles/google-dart
27.10.11   37
Possible Applications for Dart
►    Google App Engine
     >  Isolates are a nice fit for GAE’s restriction
     >  Snapshot will make it easy to move execution from
        machine to machine


►    Android
     >  As a replacement for Java


►    Web Browser
     >  Compiling into JavaScript




27.10.11   38
Dart: Conclusion – Huge Potential
►    Best shot at next generation web language so far


►    Language designed to appeal to the masses


►    Solves a real problem: Complex web applications
►    Already possible to create cross platform web applications


►    Google has a lot of resources and this solves a real problem for them


►    Isolates and future concurrency models very interesting
     >  Client: Security
     >  Server: Modern concurrency
     >  …




27.10.11   39
27.10.11
 40

Mais conteúdo relacionado

Mais procurados

Dart structured web apps
Dart   structured web appsDart   structured web apps
Dart structured web appschrisbuckett
 
Introduction to web programming with JavaScript
Introduction to web programming with JavaScriptIntroduction to web programming with JavaScript
Introduction to web programming with JavaScriptT11 Sessions
 
Dart, unicorns and rainbows
Dart, unicorns and rainbowsDart, unicorns and rainbows
Dart, unicorns and rainbowschrisbuckett
 
All You Need to Know About Type Script
All You Need to Know About Type ScriptAll You Need to Know About Type Script
All You Need to Know About Type ScriptFolio3 Software
 
TypeScript Introduction
TypeScript IntroductionTypeScript Introduction
TypeScript IntroductionDmitry Sheiko
 
JavaScript Programming
JavaScript ProgrammingJavaScript Programming
JavaScript ProgrammingSehwan Noh
 
A Re-Introduction to JavaScript
A Re-Introduction to JavaScriptA Re-Introduction to JavaScript
A Re-Introduction to JavaScriptSimon Willison
 
A Deeper look into Javascript Basics
A Deeper look into Javascript BasicsA Deeper look into Javascript Basics
A Deeper look into Javascript BasicsMindfire Solutions
 
C++17 std::filesystem - Overview
C++17 std::filesystem - OverviewC++17 std::filesystem - Overview
C++17 std::filesystem - OverviewBartlomiej Filipek
 
What Makes Objective C Dynamic?
What Makes Objective C Dynamic?What Makes Objective C Dynamic?
What Makes Objective C Dynamic?Kyle Oba
 
The JavaScript Programming Language
The JavaScript Programming LanguageThe JavaScript Programming Language
The JavaScript Programming LanguageRaghavan Mohan
 
Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]Aaron Gustafson
 
Crystal presentation in NY
Crystal presentation in NYCrystal presentation in NY
Crystal presentation in NYCrystal Language
 

Mais procurados (20)

Dart structured web apps
Dart   structured web appsDart   structured web apps
Dart structured web apps
 
Introduction to web programming with JavaScript
Introduction to web programming with JavaScriptIntroduction to web programming with JavaScript
Introduction to web programming with JavaScript
 
Dart, unicorns and rainbows
Dart, unicorns and rainbowsDart, unicorns and rainbows
Dart, unicorns and rainbows
 
All You Need to Know About Type Script
All You Need to Know About Type ScriptAll You Need to Know About Type Script
All You Need to Know About Type Script
 
TypeScript Introduction
TypeScript IntroductionTypeScript Introduction
TypeScript Introduction
 
JavaScript Basics
JavaScript BasicsJavaScript Basics
JavaScript Basics
 
JavaScript Programming
JavaScript ProgrammingJavaScript Programming
JavaScript Programming
 
A Re-Introduction to JavaScript
A Re-Introduction to JavaScriptA Re-Introduction to JavaScript
A Re-Introduction to JavaScript
 
A Deeper look into Javascript Basics
A Deeper look into Javascript BasicsA Deeper look into Javascript Basics
A Deeper look into Javascript Basics
 
C++17 std::filesystem - Overview
C++17 std::filesystem - OverviewC++17 std::filesystem - Overview
C++17 std::filesystem - Overview
 
Runtime
RuntimeRuntime
Runtime
 
Dart Workshop
Dart WorkshopDart Workshop
Dart Workshop
 
Introduction to JavaScript Basics.
Introduction to JavaScript Basics.Introduction to JavaScript Basics.
Introduction to JavaScript Basics.
 
What Makes Objective C Dynamic?
What Makes Objective C Dynamic?What Makes Objective C Dynamic?
What Makes Objective C Dynamic?
 
Let's Play Dart
Let's Play DartLet's Play Dart
Let's Play Dart
 
Basics of JavaScript
Basics of JavaScriptBasics of JavaScript
Basics of JavaScript
 
The JavaScript Programming Language
The JavaScript Programming LanguageThe JavaScript Programming Language
The JavaScript Programming Language
 
Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]
 
Crystal presentation in NY
Crystal presentation in NYCrystal presentation in NY
Crystal presentation in NY
 
Javascript
JavascriptJavascript
Javascript
 

Semelhante a Google Dart: A New Programming Language for Web Apps

Kotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projectsKotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projectsBartosz Kosarzycki
 
Kotlin Developer Starter in Android - STX Next Lightning Talks - Feb 12, 2016
Kotlin Developer Starter in Android - STX Next Lightning Talks - Feb 12, 2016Kotlin Developer Starter in Android - STX Next Lightning Talks - Feb 12, 2016
Kotlin Developer Starter in Android - STX Next Lightning Talks - Feb 12, 2016STX Next
 
Introduction to Scala for JCConf Taiwan
Introduction to Scala for JCConf TaiwanIntroduction to Scala for JCConf Taiwan
Introduction to Scala for JCConf TaiwanJimin Hsieh
 
A (too) Short Introduction to Scala
A (too) Short Introduction to ScalaA (too) Short Introduction to Scala
A (too) Short Introduction to ScalaRiccardo Cardin
 
Java Performance Tuning
Java Performance TuningJava Performance Tuning
Java Performance TuningMinh Hoang
 
Pydiomatic
PydiomaticPydiomatic
Pydiomaticrik0
 
Scalable and Flexible Machine Learning With Scala @ LinkedIn
Scalable and Flexible Machine Learning With Scala @ LinkedInScalable and Flexible Machine Learning With Scala @ LinkedIn
Scalable and Flexible Machine Learning With Scala @ LinkedInVitaly Gordon
 
Lecture 4: Data Types
Lecture 4: Data TypesLecture 4: Data Types
Lecture 4: Data TypesEelco Visser
 
Oop2010 Scala Presentation Stal
Oop2010 Scala Presentation StalOop2010 Scala Presentation Stal
Oop2010 Scala Presentation StalMichael Stal
 
Getting started with Elasticsearch and .NET
Getting started with Elasticsearch and .NETGetting started with Elasticsearch and .NET
Getting started with Elasticsearch and .NETTomas Jansson
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfHiroshi Ono
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfHiroshi Ono
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfHiroshi Ono
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfHiroshi Ono
 
Patterns for JVM languages JokerConf
Patterns for JVM languages JokerConfPatterns for JVM languages JokerConf
Patterns for JVM languages JokerConfJaroslaw Palka
 
What's new in PHP 8.0?
What's new in PHP 8.0?What's new in PHP 8.0?
What's new in PHP 8.0?Nikita Popov
 
Nikita Popov "What’s new in PHP 8.0?"
Nikita Popov "What’s new in PHP 8.0?"Nikita Popov "What’s new in PHP 8.0?"
Nikita Popov "What’s new in PHP 8.0?"Fwdays
 

Semelhante a Google Dart: A New Programming Language for Web Apps (20)

Kotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projectsKotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projects
 
Kotlin Developer Starter in Android - STX Next Lightning Talks - Feb 12, 2016
Kotlin Developer Starter in Android - STX Next Lightning Talks - Feb 12, 2016Kotlin Developer Starter in Android - STX Next Lightning Talks - Feb 12, 2016
Kotlin Developer Starter in Android - STX Next Lightning Talks - Feb 12, 2016
 
Introduction to Scala for JCConf Taiwan
Introduction to Scala for JCConf TaiwanIntroduction to Scala for JCConf Taiwan
Introduction to Scala for JCConf Taiwan
 
A (too) Short Introduction to Scala
A (too) Short Introduction to ScalaA (too) Short Introduction to Scala
A (too) Short Introduction to Scala
 
Java Performance Tuning
Java Performance TuningJava Performance Tuning
Java Performance Tuning
 
Pydiomatic
PydiomaticPydiomatic
Pydiomatic
 
Python idiomatico
Python idiomaticoPython idiomatico
Python idiomatico
 
Scalable and Flexible Machine Learning With Scala @ LinkedIn
Scalable and Flexible Machine Learning With Scala @ LinkedInScalable and Flexible Machine Learning With Scala @ LinkedIn
Scalable and Flexible Machine Learning With Scala @ LinkedIn
 
Lecture 4: Data Types
Lecture 4: Data TypesLecture 4: Data Types
Lecture 4: Data Types
 
Oop2010 Scala Presentation Stal
Oop2010 Scala Presentation StalOop2010 Scala Presentation Stal
Oop2010 Scala Presentation Stal
 
Getting started with Elasticsearch and .NET
Getting started with Elasticsearch and .NETGetting started with Elasticsearch and .NET
Getting started with Elasticsearch and .NET
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
 
Patterns for JVM languages JokerConf
Patterns for JVM languages JokerConfPatterns for JVM languages JokerConf
Patterns for JVM languages JokerConf
 
Using the Windows 8 Runtime from C++
Using the Windows 8 Runtime from C++Using the Windows 8 Runtime from C++
Using the Windows 8 Runtime from C++
 
What's new in PHP 8.0?
What's new in PHP 8.0?What's new in PHP 8.0?
What's new in PHP 8.0?
 
Nikita Popov "What’s new in PHP 8.0?"
Nikita Popov "What’s new in PHP 8.0?"Nikita Popov "What’s new in PHP 8.0?"
Nikita Popov "What’s new in PHP 8.0?"
 
C#
C#C#
C#
 

Mais de Eberhard Wolff

Architectures and Alternatives
Architectures and AlternativesArchitectures and Alternatives
Architectures and AlternativesEberhard Wolff
 
The Frontiers of Continuous Delivery
The Frontiers of Continuous DeliveryThe Frontiers of Continuous Delivery
The Frontiers of Continuous DeliveryEberhard Wolff
 
Four Times Microservices - REST, Kubernetes, UI Integration, Async
Four Times Microservices - REST, Kubernetes, UI Integration, AsyncFour Times Microservices - REST, Kubernetes, UI Integration, Async
Four Times Microservices - REST, Kubernetes, UI Integration, AsyncEberhard Wolff
 
Microservices - not just with Java
Microservices - not just with JavaMicroservices - not just with Java
Microservices - not just with JavaEberhard Wolff
 
Deployment - Done Right!
Deployment - Done Right!Deployment - Done Right!
Deployment - Done Right!Eberhard Wolff
 
Data Architecture not Just for Microservices
Data Architecture not Just for MicroservicesData Architecture not Just for Microservices
Data Architecture not Just for MicroservicesEberhard Wolff
 
How to Split Your System into Microservices
How to Split Your System into MicroservicesHow to Split Your System into Microservices
How to Split Your System into MicroservicesEberhard Wolff
 
Microservices and Self-contained System to Scale Agile
Microservices and Self-contained System to Scale AgileMicroservices and Self-contained System to Scale Agile
Microservices and Self-contained System to Scale AgileEberhard Wolff
 
How Small Can Java Microservices Be?
How Small Can Java Microservices Be?How Small Can Java Microservices Be?
How Small Can Java Microservices Be?Eberhard Wolff
 
Data Architecturen Not Just for Microservices
Data Architecturen Not Just for MicroservicesData Architecturen Not Just for Microservices
Data Architecturen Not Just for MicroservicesEberhard Wolff
 
Microservices: Redundancy=Maintainability
Microservices: Redundancy=MaintainabilityMicroservices: Redundancy=Maintainability
Microservices: Redundancy=MaintainabilityEberhard Wolff
 
Self-contained Systems: A Different Approach to Microservices
Self-contained Systems: A Different Approach to MicroservicesSelf-contained Systems: A Different Approach to Microservices
Self-contained Systems: A Different Approach to MicroservicesEberhard Wolff
 
Microservices Technology Stack
Microservices Technology StackMicroservices Technology Stack
Microservices Technology StackEberhard Wolff
 
Software Architecture for Innovation
Software Architecture for InnovationSoftware Architecture for Innovation
Software Architecture for InnovationEberhard Wolff
 
Five (easy?) Steps Towards Continuous Delivery
Five (easy?) Steps Towards Continuous DeliveryFive (easy?) Steps Towards Continuous Delivery
Five (easy?) Steps Towards Continuous DeliveryEberhard Wolff
 
Nanoservices and Microservices with Java
Nanoservices and Microservices with JavaNanoservices and Microservices with Java
Nanoservices and Microservices with JavaEberhard Wolff
 
Microservices: Architecture to Support Agile
Microservices: Architecture to Support AgileMicroservices: Architecture to Support Agile
Microservices: Architecture to Support AgileEberhard Wolff
 
Microservices: Architecture to scale Agile
Microservices: Architecture to scale AgileMicroservices: Architecture to scale Agile
Microservices: Architecture to scale AgileEberhard Wolff
 
Microservices, DevOps, Continuous Delivery – More Than Three Buzzwords
Microservices, DevOps, Continuous Delivery – More Than Three BuzzwordsMicroservices, DevOps, Continuous Delivery – More Than Three Buzzwords
Microservices, DevOps, Continuous Delivery – More Than Three BuzzwordsEberhard Wolff
 

Mais de Eberhard Wolff (20)

Architectures and Alternatives
Architectures and AlternativesArchitectures and Alternatives
Architectures and Alternatives
 
Beyond Microservices
Beyond MicroservicesBeyond Microservices
Beyond Microservices
 
The Frontiers of Continuous Delivery
The Frontiers of Continuous DeliveryThe Frontiers of Continuous Delivery
The Frontiers of Continuous Delivery
 
Four Times Microservices - REST, Kubernetes, UI Integration, Async
Four Times Microservices - REST, Kubernetes, UI Integration, AsyncFour Times Microservices - REST, Kubernetes, UI Integration, Async
Four Times Microservices - REST, Kubernetes, UI Integration, Async
 
Microservices - not just with Java
Microservices - not just with JavaMicroservices - not just with Java
Microservices - not just with Java
 
Deployment - Done Right!
Deployment - Done Right!Deployment - Done Right!
Deployment - Done Right!
 
Data Architecture not Just for Microservices
Data Architecture not Just for MicroservicesData Architecture not Just for Microservices
Data Architecture not Just for Microservices
 
How to Split Your System into Microservices
How to Split Your System into MicroservicesHow to Split Your System into Microservices
How to Split Your System into Microservices
 
Microservices and Self-contained System to Scale Agile
Microservices and Self-contained System to Scale AgileMicroservices and Self-contained System to Scale Agile
Microservices and Self-contained System to Scale Agile
 
How Small Can Java Microservices Be?
How Small Can Java Microservices Be?How Small Can Java Microservices Be?
How Small Can Java Microservices Be?
 
Data Architecturen Not Just for Microservices
Data Architecturen Not Just for MicroservicesData Architecturen Not Just for Microservices
Data Architecturen Not Just for Microservices
 
Microservices: Redundancy=Maintainability
Microservices: Redundancy=MaintainabilityMicroservices: Redundancy=Maintainability
Microservices: Redundancy=Maintainability
 
Self-contained Systems: A Different Approach to Microservices
Self-contained Systems: A Different Approach to MicroservicesSelf-contained Systems: A Different Approach to Microservices
Self-contained Systems: A Different Approach to Microservices
 
Microservices Technology Stack
Microservices Technology StackMicroservices Technology Stack
Microservices Technology Stack
 
Software Architecture for Innovation
Software Architecture for InnovationSoftware Architecture for Innovation
Software Architecture for Innovation
 
Five (easy?) Steps Towards Continuous Delivery
Five (easy?) Steps Towards Continuous DeliveryFive (easy?) Steps Towards Continuous Delivery
Five (easy?) Steps Towards Continuous Delivery
 
Nanoservices and Microservices with Java
Nanoservices and Microservices with JavaNanoservices and Microservices with Java
Nanoservices and Microservices with Java
 
Microservices: Architecture to Support Agile
Microservices: Architecture to Support AgileMicroservices: Architecture to Support Agile
Microservices: Architecture to Support Agile
 
Microservices: Architecture to scale Agile
Microservices: Architecture to scale AgileMicroservices: Architecture to scale Agile
Microservices: Architecture to scale Agile
 
Microservices, DevOps, Continuous Delivery – More Than Three Buzzwords
Microservices, DevOps, Continuous Delivery – More Than Three BuzzwordsMicroservices, DevOps, Continuous Delivery – More Than Three Buzzwords
Microservices, DevOps, Continuous Delivery – More Than Three Buzzwords
 

Último

Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 

Último (20)

Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 

Google Dart: A New Programming Language for Web Apps

  • 1. Google Dart Eberhard Wolff Architecture & Technology Manager adesso AG 27.10.11
  • 2. Dart: A Structure Web Programming Language ►  New programming language ►  New programming tools ►  New open source project ►  Currently in a preview ►  …for feedback 27.10.11
  • 3. The Team Behind Dart ►  Lars Bak >  Beta language >  HotSpot Java VM >  V8 JavaScript VM in Google Chrome >  18 software patents ►  Gilad Bracha >  Computational Theologist and later Distinguished Engineer at Sun >  Java Language Specification >  Java Virtual Machine Specification ►  Both worked on Strongtalk (Smalltalk + static typing) 27.10.11 3
  • 4. Why Dart? ►  More and more web application with complex logic ►  Will become a lot more: HTML5 on the rise ►  So far: No really great languages designed to create large scale web applications ►  Google: The competition is NOT JavaScript ... but fragmented mobile platforms ►  GWT (Google Web Toolkit) already featured a Java to JavaScript compiler ►  Dart is designed with simplicity and mass appeal in mind 27.10.11 4
  • 5. Runtime Environment ►  Dart has its own VM ►  Open Source project ►  Needed for some advanced features ►  Dart can compile into JavaScript ►  Runs on any browser ►  Currently not very efficient ►  i.e. about the same performance as first V8 releases ►  Size of JavaScript code currently considerable 27.10.11 5
  • 6. Hello World in Dart main() { print('Hello, Dart!'); } ►  C like language int fib(int n) { if (n <= 1) return n; return fib(n - 1) + fib(n - 2); } main() { print('fib(20) = ${fib(20)}'); } ►  Seemingly static typing 27.10.11
  • 7. Objects and Classes class Person { String name; Person(this.name); } main() { Person p = new Person('Gilad'); print('Hi ${p.name} '); } ►  Easy to initialize fields 27.10.11 7
  • 8. Objects and Classes class Person { String name; String firstname; Person(this.name); Person.withFirstname(this.firstname,this.name); } main() { Person p = new Person.withFirstname('Gilad','Bracha'); print('Hi ${p.firstname} ${p.name}'); } ►  No method or constructor overloading 27.10.11 8
  • 9. Namespaces ►  Much like Java packages ►  Might contain classes, interfaces, variables and functions ►  Definition: #library("http"); ►  Using: #import("http.dart"); ►  Optional prefix: #import("http.dart”,”http”); 27.10.11 9
  • 11. Object Construction With Factories interface Person class Adessi factory PersonFactory { implements Person { Person(name); Adessi(this.name); final name; String name; } } class PersonFactory { class RealPerson factory Person(name) { implements Person { if (name == 'Wolff') { RealPerson(this.name); return new Adessi(name); String name; } } return new RealPerson(name); } main() { } Person p = new Person('Wolff'); print(p is Adessi); p = new Person('Bracha'); ►  Very elegant approach to allow for other object print(p is Adessi); creation algorithms } 27.10.11 11
  • 12. More Complex Example class Person {} class Customer extends Person { buy() {print("bought");} } main() { Person p = new Customer(); p.buy(); } 27.10.11 12
  • 13. More Complex Example class Person {} class Customer extends Person { buy() {print("bought");} } main() { Person p = new Customer(); p.buy(); } ►  Code actually compiles and runs ►  There are no type errors – only Static Warnings ►  Types are considered annotations ►  Type annotations never change the semantics of a program 27.10.11 13
  • 14. On Types ►  Type theory: A type defines a set of values and operations on them >  i.e.Java int: values: all integers from -2147483648 to 2147483647 >  Operations on int: + - * etc ►  Goal: Check types to find errors >  i.e. multiply a String by an int >  i.e. call a method that does not exist on an object ►  Type checkers proof the partial correctness of programs ►  i.e. at least types are correct ►  Typing will only find basic errors 27.10.11 14
  • 15. Dynamic Typing ►  At runtime ►  Advantage >  Simpler >  More flexible >  Can even implement methods on the fly – Meta programming ►  Disadvantage >  Perceived as less secure 27.10.11 15
  • 16. Static Typing ►  Typing checked At compile time ►  Advantage >  IDE support >  Documentation >  Perceived as safer >  …but problems should be found by Unit Tests, too! ►  Disadvantage >  Overhead if no type inference >  Complex to get right in some case >  Complex (Java Generic FAQ by Anglika Langer is 297 pages !) 27.10.11 16
  • 17. Generics in Java ►  Does this code compile? public class Customer extends Person { … } public static void main(String[] args) { List<Person> listOfPerson = new ArrayList<Person>(); List<Customer> listOfCustomer = new ArrayList<Customer>(); listOfCustomer=listOfPerson; listOfPerson=listOfCustomer; } 27.10.11 17
  • 18. Generics in Java ►  Does this code compile? public class Customer extends Person { … } public static void main(String[] args) { List<Person> listOfPerson = new ArrayList<Person>(); List<Customer> listOfCustomer = new ArrayList<Customer>(); listOfCustomer=listOfPerson; listOfPerson=listOfCustomer; } listOfPerson.add(new Person()); listOfCustomer.add(new Person()); Customer c = listOfCustomer.get(1); Customer c = listOfPerson.get(1); 27.10.11 18
  • 19. Generics and Static Typing in Java ►  You can still mess with it ►  Basically each type cast disables static typing ►  i.e. it can introduce problems that otherwise would have been discovered by the compiler listOfPerson.add(new Person()); Object obj = listOfPerson; listOfCustomer = (List<Customer>) obj; Customer c = listOfCustomer.get(0); 27.10.11 19
  • 20. Static vs. Dynamic Typing: My Take ►  Errors found by a static type checker will also be found by unit tests ►  The security of static typing is only perceived ►  Real advantage: Documentation ►  “I expect you to pass in a Customer!” ►  “This gives you a Person!” ►  Tool support ►  Easier to come up with suggestions for content assist ►  However, Dynamic languages tools are catching up 27.10.11 20
  • 21. Generics in Dart class Person {} class Customer extends Person { buy() {print("bought");} } main() { List<Customer> listOfCustomer = new List<Customer>(); List<Person> listOfPerson = listOfCustomer; listOfPerson.add(new Person()); Customer c = listOfCustomer[0]; c.buy(); } 27.10.11 21
  • 22. Generics in Dart class Person {} class Customer extends Person { buy() {print("bought");} } main() { List<Customer> listOfCustomer = new List<Customer>(); List<Person> listOfPerson = listOfCustomer; listOfPerson.add(new Person()); Customer c = listOfCustomer[0]; c.buy(); } ►  Call to buy() won’t work ►  Problem not found until the method is actually called ►  Optional run time type checker would find the problem one line earlier ►  Valid code: List<Customer> is a List<Person> 27.10.11 22
  • 23. Generics in Dart ►  Generics in Dart are considered covariant ►  i.e. List<Customer> is List<Person> ►  This is in fact logical incorrect (see last slide) ►  But: >  Do you want to read 297 pages Generic FAQ? >  And: It is just a help to spot basic errors 27.10.11 23
  • 24. Concurrency public class MyCache { Map<Integer, Integer> map = new HashMap<Integer, Integer>(); public void add(int i, int j) { map.put(i, j); } public int read(int i) { return map.get(i); } } ►  What is the problem? 27.10.11 24
  • 25. Concurrency public class MyCache { Map<Integer, Integer> map = new HashMap<Integer, Integer>(); public void add(int i, int j) { map.put(i, j); } public int read(int i) { return map.get(i); } } ►  What is the problem? ►  Code is not thread safe! ►  Should use ConcurrentHashMap instead 27.10.11 25
  • 26. Concurrency ►  What is the real problem? Threads ►  Concurrency in object-oriented systems ►  OO is based on concurrent access shared state >  Hard to get correct >  If you get it correct: performance bad >  Locks >  Synchronization >  Etc Object with State ►  Pretty low level concept ►  This is why Carnegie Mellon dropped OO from the Computer Science curriculum! ►  Can we do better? 27.10.11 26
  • 27. Dart code is always single threaded! 27.10.11 27
  • 28. Isolates ►  Inspired by Actor model ►  As present in Erlang ►  As done in Scala with Actors and Akka Port ►  Idea: State is hidden in Isolates Isolate with State ►  Isolates communicate with messages send to ports ►  Each isolate only works on one message at a time ►  No concurrency issues in an Isolate: Only one thread ►  Still concurrent: Multiple isolates might be active at a time 27.10.11 28
  • 29. Isolates class Printer extends Isolate { main() { port.receive((message, replyTo) { if (message == null) port.close(); else print(message); }); } } main() { new Printer().spawn().then((port) { for (var message in ['Hello', 'from', 'other', 'isolate']) { port.send(message); } port.send(null); }); } 27.10.11 29
  • 30. More Fun With Isolates ►  Isolates might be mapped to Web Worker in JavaScript ►  Nothing is shared ►  Isolates will have their own heap on the Dart VM >  Messages must be serialized and deserialized >  Garbage Collection can happen per Isolate >  No more stop-the-world GC! ►  Isolates might be used to introduce security concepts >  Enforce security rules on ports >  To replace Same Origin Policy 27.10.11 30
  • 31. More Fun With Isolates ►  Isolates require a light weight concurrency model >  OS Thread switches take too much time >  In Erlang 100.000 of Isolates equivalent are not uncommon >  No way to run that many threads >  Interesting issue for Dart VM ►  Isolates for Remoting >  Can send messages to a port on a different host >  Semantics don’t change as serialization is done anyway ►  Probably more high level concurrency models ►  Specifications says that Isolates might run different versions of libraries 27.10.11 31
  • 32. Even More Fun With Isolates ►  In Erlang the concept is extended for high availability >  Links allow to listen to events of Isolates >  Supervisor can monitor other processes >  If an error occurs the isolate crashes and is restarted >  Hierarchies of supervisors can be created >  State is a problem here >  This makes high availability easy to develop >  Dart might come up with a similar solution 27.10.11 32
  • 33. Snapshots ►  VM can be snapshot ►  Current heap etc ►  Faster startup >  No need to create initial state, config, … >  Used in V8 already for standard JavaScript libraries >  How long does a JVM need to start up? ►  Possible answer to mobile applications killed due to memory constraints ►  Could be used to migrate isolates between machines 27.10.11 33
  • 34. Dart Editor ►  Editor for Dart applications ►  Based on Eclipse ►  Code in the Open Source Project 27.10.11 34
  • 35. More Complex Example ►  Swarm: A newsreader ►  Completely written in Dart >  App code: 3210 LOC >  UI library code: 13200 LOC >  Animation yields 30 fps >  Runs on iPad and Chrome 27.10.11 35
  • 36. Not Decided Yet… ►  Currently a technology preview ►  Some questions are open >  Reflection? Probably using Mirrors >  Changing classes on the fly? Probably not needed due to Isolates >  What about Chrome? 27.10.11 36
  • 37. Links ►  http://www.dartlang.org/ >  Language Site >  Tutorials >  Language Spec >  Library Spec >  … ►  http://dart.googlecode.com/ >  Open Source project >  Including compiler, VM etc. ►  http://code.google.com/p/jdart/ >  Dart on the JVM ►  http://it-republik.de/jaxenter/artikel/Google-Dart-4121.html >  German ►  http://jonaswesterlund.se/dart.html >  Pre compiled Dart for Mac OS X ►  http://www.infoq.com/articles/google-dart 27.10.11 37
  • 38. Possible Applications for Dart ►  Google App Engine >  Isolates are a nice fit for GAE’s restriction >  Snapshot will make it easy to move execution from machine to machine ►  Android >  As a replacement for Java ►  Web Browser >  Compiling into JavaScript 27.10.11 38
  • 39. Dart: Conclusion – Huge Potential ►  Best shot at next generation web language so far ►  Language designed to appeal to the masses ►  Solves a real problem: Complex web applications ►  Already possible to create cross platform web applications ►  Google has a lot of resources and this solves a real problem for them ►  Isolates and future concurrency models very interesting >  Client: Security >  Server: Modern concurrency >  … 27.10.11 39