SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

Groovy Update - JavaPolis 2007
Groovy Update - JavaPolis 2007Groovy Update - JavaPolis 2007
Groovy Update - JavaPolis 2007Guillaume Laforge
 
Rust Workshop - NITC FOSSMEET 2017
Rust Workshop - NITC FOSSMEET 2017 Rust Workshop - NITC FOSSMEET 2017
Rust Workshop - NITC FOSSMEET 2017 pramode_ce
 
PHP 8: Process & Fixing Insanity
PHP 8: Process & Fixing InsanityPHP 8: Process & Fixing Insanity
PHP 8: Process & Fixing InsanityGeorgePeterBanyard
 
AST Transformations at JFokus
AST Transformations at JFokusAST Transformations at JFokus
AST Transformations at JFokusHamletDRC
 
C# Starter L03-Utilities
C# Starter L03-UtilitiesC# Starter L03-Utilities
C# Starter L03-UtilitiesMohammad Shaker
 
Kotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projectsKotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projectsBartosz Kosarzycki
 
PVS-Studio in 2021 - Error Examples
PVS-Studio in 2021 - Error ExamplesPVS-Studio in 2021 - Error Examples
PVS-Studio in 2021 - Error ExamplesAndrey Karpov
 
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 KotlinKai Koenig
 
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 analyzerAndrey Karpov
 
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 @drpicoxDavid Rodenas
 
Dart, unicorns and rainbows
Dart, unicorns and rainbowsDart, unicorns and rainbows
Dart, unicorns and rainbowschrisbuckett
 
Typescript tips & tricks
Typescript tips & tricksTypescript tips & tricks
Typescript tips & tricksOri Calvo
 
Groovy Ast Transformations (greach)
Groovy Ast Transformations (greach)Groovy Ast Transformations (greach)
Groovy Ast Transformations (greach)HamletDRC
 
Dart structured web apps
Dart   structured web appsDart   structured web apps
Dart structured web appschrisbuckett
 
Better DSL Support for Groovy-Eclipse
Better DSL Support for Groovy-EclipseBetter DSL Support for Groovy-Eclipse
Better DSL Support for Groovy-EclipseAndrew Eisenberg
 
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
 

Was ist angesagt? (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"
 

Andere mochten auch

Getting Started with OpenGL ES
Getting Started with OpenGL ESGetting Started with OpenGL ES
Getting Started with OpenGL ESJohn Wilker
 
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.John Wilker
 
Introtoduction to cocos2d
Introtoduction to  cocos2dIntrotoduction to  cocos2d
Introtoduction to cocos2dJohn Wilker
 
2010 Middle East Internet State
2010 Middle East Internet State2010 Middle East Internet State
2010 Middle East Internet StateAbbas Badran
 
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 11John Wilker
 

Andere mochten auch (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
 
ΑΤΜΟΣΦΑΙΡΙΚΗ ΠΙΕΣΗ
ΑΤΜΟΣΦΑΙΡΙΚΗ  ΠΙΕΣΗΑΤΜΟΣΦΑΙΡΙΚΗ  ΠΙΕΣΗ
ΑΤΜΟΣΦΑΙΡΙΚΗ ΠΙΕΣΗ
 

Ähnlich wie Google Dart

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
 
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
 
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
 
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?PVS-Studio
 

Ähnlich wie 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?
 

Mehr von adesso AG

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)adesso AG
 
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 SNMPadesso AG
 
Mythos High Performance Teams
Mythos High Performance TeamsMythos High Performance Teams
Mythos High Performance Teamsadesso AG
 
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 AGadesso 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!adesso AG
 
Continuous Delivery praktisch
Continuous Delivery praktischContinuous Delivery praktisch
Continuous Delivery praktischadesso AG
 
Agilität, Snapshots und Continuous Delivery
Agilität, Snapshots und Continuous DeliveryAgilität, Snapshots und Continuous Delivery
Agilität, Snapshots und Continuous Deliveryadesso AG
 
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?adesso AG
 
Getriebene Anwendungslandschaften
Getriebene AnwendungslandschaftenGetriebene Anwendungslandschaften
Getriebene Anwendungslandschaftenadesso AG
 
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 2013adesso 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
 
OOP 2013 NoSQL Suche
OOP 2013 NoSQL SucheOOP 2013 NoSQL Suche
OOP 2013 NoSQL Sucheadesso AG
 
NoSQL in der Cloud - Why?
NoSQL in der Cloud -  Why?NoSQL in der Cloud -  Why?
NoSQL in der Cloud - Why?adesso AG
 
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.adesso AG
 
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 CDIadesso AG
 
Zehn Hinweise für Architekten
Zehn Hinweise für ArchitektenZehn Hinweise für Architekten
Zehn Hinweise für Architektenadesso AG
 
Agile Praktiken
Agile PraktikenAgile Praktiken
Agile Praktikenadesso AG
 
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 adesso AG
 
Neue EBusiness Perspektiven durch HTML5
Neue EBusiness Perspektiven durch HTML5Neue EBusiness Perspektiven durch HTML5
Neue EBusiness Perspektiven durch HTML5adesso AG
 
CloudConf2011 Introduction to Google App Engine
CloudConf2011 Introduction to Google App EngineCloudConf2011 Introduction to Google App Engine
CloudConf2011 Introduction to Google App Engineadesso AG
 

Mehr von 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
 

Kürzlich hochgeladen

MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
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 FresherRemote DBA Services
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
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 Processorsdebabhi2
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKJago de Vreede
 
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 educationjfdjdjcjdnsjd
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Zilliz
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
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 businesspanagenda
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfOrbitshub
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfOverkill Security
 

Kürzlich hochgeladen (20)

MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
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
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
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
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
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
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
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
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdf
 

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