SlideShare une entreprise Scribd logo
1  sur  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

Contenu connexe

Tendances

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
 

Tendances (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
 

Similaire à 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
 

Similaire à 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#
 

Plus 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
 

Plus 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
 

Dernier

"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 

Dernier (20)

"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 

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