SlideShare una empresa de Scribd logo
1 de 40
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

AST Transformations at JFokus
AST Transformations at JFokusAST Transformations at JFokus
AST Transformations at JFokus
HamletDRC
 
C# Starter L03-Utilities
C# Starter L03-UtilitiesC# Starter L03-Utilities
C# Starter L03-Utilities
Mohammad Shaker
 
Club of anonimous developers "Refactoring: Legacy code"
Club of anonimous developers "Refactoring: Legacy code"Club of anonimous developers "Refactoring: Legacy code"
Club of anonimous developers "Refactoring: Legacy code"
Victor_Cr
 

La actualidad más candente (20)

Groovy Update - JavaPolis 2007
Groovy Update - JavaPolis 2007Groovy Update - JavaPolis 2007
Groovy Update - JavaPolis 2007
 
Rust Workshop - NITC FOSSMEET 2017
Rust Workshop - NITC FOSSMEET 2017 Rust Workshop - NITC FOSSMEET 2017
Rust Workshop - NITC FOSSMEET 2017
 
PHP 8: Process & Fixing Insanity
PHP 8: Process & Fixing InsanityPHP 8: Process & Fixing Insanity
PHP 8: Process & Fixing Insanity
 
AST Transformations at JFokus
AST Transformations at JFokusAST Transformations at JFokus
AST Transformations at JFokus
 
ASP.NET
ASP.NETASP.NET
ASP.NET
 
C# Starter L03-Utilities
C# Starter L03-UtilitiesC# Starter L03-Utilities
C# Starter L03-Utilities
 
Kotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projectsKotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projects
 
PVS-Studio in 2021 - Error Examples
PVS-Studio in 2021 - Error ExamplesPVS-Studio in 2021 - Error Examples
PVS-Studio in 2021 - Error Examples
 
Little Helpers for Android Development with Kotlin
Little Helpers for Android Development with KotlinLittle Helpers for Android Development with Kotlin
Little Helpers for Android Development with Kotlin
 
How Data Flow analysis works in a static code analyzer
How Data Flow analysis works in a static code analyzerHow Data Flow analysis works in a static code analyzer
How Data Flow analysis works in a static code analyzer
 
Introduction to web programming for java and c# programmers by @drpicox
Introduction to web programming for java and c# programmers by @drpicoxIntroduction to web programming for java and c# programmers by @drpicox
Introduction to web programming for java and c# programmers by @drpicox
 
Dart, unicorns and rainbows
Dart, unicorns and rainbowsDart, unicorns and rainbows
Dart, unicorns and rainbows
 
Groovy 2 and beyond
Groovy 2 and beyondGroovy 2 and beyond
Groovy 2 and beyond
 
Clean coding-practices
Clean coding-practicesClean coding-practices
Clean coding-practices
 
Typescript tips & tricks
Typescript tips & tricksTypescript tips & tricks
Typescript tips & tricks
 
Groovy Ast Transformations (greach)
Groovy Ast Transformations (greach)Groovy Ast Transformations (greach)
Groovy Ast Transformations (greach)
 
Kotlin
KotlinKotlin
Kotlin
 
Dart structured web apps
Dart   structured web appsDart   structured web apps
Dart structured web apps
 
Better DSL Support for Groovy-Eclipse
Better DSL Support for Groovy-EclipseBetter DSL Support for Groovy-Eclipse
Better DSL Support for Groovy-Eclipse
 
Club of anonimous developers "Refactoring: Legacy code"
Club of anonimous developers "Refactoring: Legacy code"Club of anonimous developers "Refactoring: Legacy code"
Club of anonimous developers "Refactoring: Legacy code"
 

Destacado

2010 Middle East Internet State
2010 Middle East Internet State2010 Middle East Internet State
2010 Middle East Internet State
Abbas Badran
 

Destacado (7)

App Walking
App WalkingApp Walking
App Walking
 
Getting Started with OpenGL ES
Getting Started with OpenGL ESGetting Started with OpenGL ES
Getting Started with OpenGL ES
 
User Input in a multi-touch, accelerometer, location aware world.
User Input in a multi-touch, accelerometer, location aware world.User Input in a multi-touch, accelerometer, location aware world.
User Input in a multi-touch, accelerometer, location aware world.
 
Introtoduction to cocos2d
Introtoduction to  cocos2dIntrotoduction to  cocos2d
Introtoduction to cocos2d
 
2010 Middle East Internet State
2010 Middle East Internet State2010 Middle East Internet State
2010 Middle East Internet State
 
Cranking Floating Point Performance Up To 11
Cranking Floating Point Performance Up To 11Cranking Floating Point Performance Up To 11
Cranking Floating Point Performance Up To 11
 
ΑΤΜΟΣΦΑΙΡΙΚΗ ΠΙΕΣΗ
ΑΤΜΟΣΦΑΙΡΙΚΗ  ΠΙΕΣΗΑΤΜΟΣΦΑΙΡΙΚΗ  ΠΙΕΣΗ
ΑΤΜΟΣΦΑΙΡΙΚΗ ΠΙΕΣΗ
 

Similar a Google Dart

pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
Hiroshi Ono
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
Hiroshi Ono
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
Hiroshi Ono
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
Hiroshi Ono
 

Similar a Google Dart (20)

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
 
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++
 
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?"
 
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?
 
C#
C#C#
C#
 
Android and cpp
Android and cppAndroid and cpp
Android and cpp
 
Of complicacy of programming, or won't C# save us?
Of complicacy of programming, or won't C# save us?Of complicacy of programming, or won't C# save us?
Of complicacy of programming, or won't C# save us?
 

Más de adesso AG

Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
adesso AG
 

Más de adesso AG (20)

SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)
 
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMPSNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP
 
Mythos High Performance Teams
Mythos High Performance TeamsMythos High Performance Teams
Mythos High Performance Teams
 
A Business-Critical SharePoint Solution From adesso AG
A Business-CriticalSharePoint SolutionFrom adesso AGA Business-CriticalSharePoint SolutionFrom adesso AG
A Business-Critical SharePoint Solution From adesso AG
 
Was Sie über NoSQL Datenbanken wissen sollten!
Was Sie über NoSQL Datenbanken wissen sollten!Was Sie über NoSQL Datenbanken wissen sollten!
Was Sie über NoSQL Datenbanken wissen sollten!
 
Continuous Delivery praktisch
Continuous Delivery praktischContinuous Delivery praktisch
Continuous Delivery praktisch
 
Agilität, Snapshots und Continuous Delivery
Agilität, Snapshots und Continuous DeliveryAgilität, Snapshots und Continuous Delivery
Agilität, Snapshots und Continuous Delivery
 
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
 
Getriebene Anwendungslandschaften
Getriebene AnwendungslandschaftenGetriebene Anwendungslandschaften
Getriebene Anwendungslandschaften
 
Google App Engine JAX PaaS Parade 2013
Google App Engine JAX PaaS Parade 2013Google App Engine JAX PaaS Parade 2013
Google App Engine JAX PaaS Parade 2013
 
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
 
OOP 2013 NoSQL Suche
OOP 2013 NoSQL SucheOOP 2013 NoSQL Suche
OOP 2013 NoSQL Suche
 
NoSQL in der Cloud - Why?
NoSQL in der Cloud -  Why?NoSQL in der Cloud -  Why?
NoSQL in der Cloud - Why?
 
Lean web architecture mit jsf 2.0, cdi & co.
Lean web architecture mit jsf 2.0, cdi & co.Lean web architecture mit jsf 2.0, cdi & co.
Lean web architecture mit jsf 2.0, cdi & co.
 
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDISchlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
 
Zehn Hinweise für Architekten
Zehn Hinweise für ArchitektenZehn Hinweise für Architekten
Zehn Hinweise für Architekten
 
Agile Praktiken
Agile PraktikenAgile Praktiken
Agile Praktiken
 
Java und Cloud - nicht nur mit PaaS
Java und Cloud - nicht nur mit PaaS Java und Cloud - nicht nur mit PaaS
Java und Cloud - nicht nur mit PaaS
 
Neue EBusiness Perspektiven durch HTML5
Neue EBusiness Perspektiven durch HTML5Neue EBusiness Perspektiven durch HTML5
Neue EBusiness Perspektiven durch HTML5
 
CloudConf2011 Introduction to Google App Engine
CloudConf2011 Introduction to Google App EngineCloudConf2011 Introduction to Google App Engine
CloudConf2011 Introduction to Google App Engine
 

Último

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Último (20)

Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
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)
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
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...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
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
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 

Google Dart

  • 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