SlideShare a Scribd company logo
Structured web programming

  Created by Lars Bak & Gilad Bracha


        Come to the Dart side.
                  Gilad Bracha in an interview on Dart
What is DART?

 ● New programming language
 ● Open Source Project
 ● Simple OO programming language
 ● Class-based single inheritance with interfaces
 ● Optional static types
 ● Real lexical scoping
 ● Single-threaded
 ● Familiar Syntax
 ● It's still a Technology Preview
Hello World!
Dart is NOT the competition of
           JavaScript

● Dart is meant to fill a vacuum, not to replace
  JavaScript, but rather to fill the vacuum left by
  fragmented mobile platforms.

● It seems they are targeting the problem of
  programming in Java-like for android, Objective-C
  for iOS and so forth.

● It's not done.
Type-Checker
● Dart has a different type-checker.

● The conventional type-checker tries to prove a program
  obeys the type system.

● If it can't construct a proof - the program is considered
  invalid, "Guilty until proven innocent"

● In Dart, you are innocent until proven guilty.

● During development one can choose to validate types.
Optional Types
 ● Static checker provides warnings; tuned to be unobtrusive

 ● Type annotations have no effect except ...

 ● During development, you can check dynamic types against
   declarations
    ○ T x = o;        assert(o === null || o is T);

 ● By default, type annotations have no effect and no cost
    ○ Code runs free
Example
Classes
 ● Single class inheritance (Object is the default)
 ● Interfaces
 ● Constructor assign
   Greeter.withPrefix(this.prefix); //A constructor
   var greeter = new Greeter.withPrefix('Howdy');
 ● Setters and Getters
   class Greeter {
     String _prefix = 'Hello,'; // Hidden instance variable.
     String get prefix() => _prefix; // Getter for prefix.
     void set prefix(String value) {...} // Setter for prefix.
   }
   greeter.prefix = 'Howdy,'; // Set prefix.


Example
ISOLATES

 ● Inspired by Erlang, Dart has isolates
 ● Lightweight units of execution
     ○ Each isolate is conceptually a process
     ○ Nothing is shared
     ○ All communication takes place via message passing

 ● Isolates support concurrent execution
 ● Which gives us Actor based concurrency

Isolates
DART EXECUTION
SNAPSHOTTING IN THE DART VM

● Process of serializing the heap after loading the application

● Loading 54173 lines of Dart code takes 640 ms

● Loading same application from a snapshot takes 60 ms

● Startup > 10x faster
How to use Dart?

One can run Dart code in several ways:
● Translate Dart code to JavaScript that can run in any
  modern browser:
   ○ Chrome
   ○ Safari 5+
   ○ Firefox 4+

● Execute Dart code directly in a VM on the server side
●
● Use Dartboard to write, modify, and execute small Dart
  programs within any browser window
Embedding Dart in HTML

● Using the HTML script tag with type='application/dart'.

● Like other script tags, the script contents can be inlined as the
  body of the script tag or specified by reference via a URL using the
  script tag’s src attribute.

● The Dart script can have optional #source and #import directives.
  It must have a visible top-level function called main(), either
  declared directly in the script or in a sourced/imported file. The
  browser will invoke main() when the page is loaded.
Fundamental differences from JavaScript


● Isolated script tags
    ○ Each script tag runs in isolation.
    ○ Use #import to use code from other URL
    ○ Each script tag requires a main() to be run.
● Delayed Execution
    ○ Each script's main() is called on DOMContentLoaded
      event
    ○ Ordering is not guaranteed
    ○ Dart code executes after page load.
    ○ We can assume the DOM is fully loaded.
● No inline event listeners
Improving the DOM
● Better Querying
                 Old                                New
 elem.getElementById('foo');           elem.query('#foo');

 elem.getElementsByTagName('div');     elem.queryAll('div');

 elem.getElementsByName('foo');        elem.queryAll('[name="foo"]');

 elem.getElementsByClassName('foo');   elem.queryAll('.foo');

 elem.querySelector('.foo .bar');      elem.query('.foo .bar');

 elem.querySelectorAll('.foo .bar');   elem.queryAll('.foo .bar');
Improving the DOM
● Use real collections
   ○ The queries return collections which are objects that implement the
     Dart core library's built-in collection interfaces.
   ○ This way we get rid of a lot of special methods & made attributes a
     map
                    Old                                   New
   elem.hasAttribute('name');            elem.attributes.contains('name');

   elem.getAttribute('name');            elem.attributes['name'];

   elem.setAttribute('name', 'value');   elem.attributes['name'] = 'value';

   elem.removeAttribute('name');         elem.attributes.remove('name');

   elem.hasChildNodes();                 elem.nodes.isEmpty();

   elem.firstChild();                    elem.nodes[0];

   elem.appendChild(child);              elem.nodes.add(child);
Improving the DOM
● Use constructors
   Old
        document.createElement('div')
   New
        new Element.tag('div')

   Or
        TableElement table = new Element.html(
          '<table><tr><td>Hello <em>Dart!</em></table>');
Improving the DOM
● Events
    ○ There are no inline events like 'onclick()'
    ○ New ElementEvents class. For each of the known event types, there is
      a property on that class: click, mouseDown, etc
    ○ There are event objects that can add and remove listeners and
      dispatch events.

                  Old                                        New
elem.addEventListener('click', (event) =>   elem.on.click.add( (event) => print
print('click!'), false);                    ('click!'));
elem.removeEventListener( 'click', elem.on.click.remove(listener);
listener);
A technology preview on




  dartlang.org
  dart.googlecode.com
  http://gototoday.dk/2011/10/10/lars-bak-on-dart/
  http://www.2ality.com/2011/10/dart-launch.html
  http://dartinside.com/
  @DartInside

More Related Content

What's hot (20)

PPTX
Dart
Pritam Tirpude
 
PPT
Andy On Closures
melbournepatterns
 
PDF
Let's Play Dart
Jana Moudrá
 
PDF
Dart, Darrt, Darrrt
Jana Moudrá
 
PDF
OWF12/PAUG Conf Days Dart a new html5 technology, nicolas geoffray, softwar...
Paris Open Source Summit
 
PDF
Google Dart
Eberhard Wolff
 
PPTX
TypeScript - Silver Bullet for the Full-stack Developers
Rutenis Turcinas
 
PPTX
Typescript
Nikhil Thomas
 
PDF
Introduction to the Dart language
Jana Moudrá
 
PDF
Advanced PHP Simplified
Mark Niebergall
 
PDF
Getting Started with TypeScript
Gil Fink
 
PDF
TI1220 Lecture 14: Domain-Specific Languages
Eelco Visser
 
PDF
TypeScript Best Practices
felixbillon
 
PPTX
002. Introducere in type script
Dmitrii Stoian
 
PPTX
AngularConf2015
Alessandro Giorgetti
 
PDF
8 introduction to_java_script
Vijay Kalyan
 
PPTX
Getting started with typescript
C...L, NESPRESSO, WAFAASSURANCE, SOFRECOM ORANGE
 
PPTX
TypeScript
Udaiappa Ramachandran
 
PDF
XKE - Programming Paradigms & Constructs
Nicolas Demengel
 
Andy On Closures
melbournepatterns
 
Let's Play Dart
Jana Moudrá
 
Dart, Darrt, Darrrt
Jana Moudrá
 
OWF12/PAUG Conf Days Dart a new html5 technology, nicolas geoffray, softwar...
Paris Open Source Summit
 
Google Dart
Eberhard Wolff
 
TypeScript - Silver Bullet for the Full-stack Developers
Rutenis Turcinas
 
Typescript
Nikhil Thomas
 
Introduction to the Dart language
Jana Moudrá
 
Advanced PHP Simplified
Mark Niebergall
 
Getting Started with TypeScript
Gil Fink
 
TI1220 Lecture 14: Domain-Specific Languages
Eelco Visser
 
TypeScript Best Practices
felixbillon
 
002. Introducere in type script
Dmitrii Stoian
 
AngularConf2015
Alessandro Giorgetti
 
8 introduction to_java_script
Vijay Kalyan
 
Getting started with typescript
C...L, NESPRESSO, WAFAASSURANCE, SOFRECOM ORANGE
 
XKE - Programming Paradigms & Constructs
Nicolas Demengel
 

Viewers also liked (6)

PPTX
Observatorio ambiental
siralexander
 
PPTX
Magic shop
siralexander
 
PDF
4 Steps to Imaging your gel
Tito Jankowski
 
PDF
elm-d3 @ NYC D3.js Meetup (30 June, 2014)
Spiros
 
PDF
What About Elm?
Scott Smith
 
PDF
Manual sup sppbs thn 1-2011
sabrisahir
 
Observatorio ambiental
siralexander
 
Magic shop
siralexander
 
4 Steps to Imaging your gel
Tito Jankowski
 
elm-d3 @ NYC D3.js Meetup (30 June, 2014)
Spiros
 
What About Elm?
Scott Smith
 
Manual sup sppbs thn 1-2011
sabrisahir
 
Ad

Similar to Structured web programming (20)

PPTX
CSharp presentation and software developement
frwebhelp
 
PDF
Sharable of qualities of clean code
Eman Mohamed
 
PPTX
Dartprogramming
Ali Parmaksiz
 
PPT
The Theory Of The Dom
kaven yan
 
PDF
Flutter tutorial for Beginner Step by Step
Chandramouli Biyyala
 
PDF
What’s new in Google Dart - Seth Ladd
jaxconf
 
PPTX
Robust C++ Task Systems Through Compile-time Checks
Stoyan Nikolov
 
PPTX
Productivity Enhencement with Visual Studio
Ahasan Habib
 
PPT
Oops lecture 1
rehan16091997
 
PPTX
SharePoint Cincy 2012 - jQuery essentials
Mark Rackley
 
PDF
Dart Workshop
Dmitry Buzdin
 
PPTX
jQuery
Vishwa Mohan
 
PPTX
Dart, unicorns and rainbows
chrisbuckett
 
PDF
Angular JS2 Training Session #1
Paras Mendiratta
 
PPTX
Dart structured web apps
chrisbuckett
 
PPTX
Andriy Shalaenko - GO security tips
OWASP Kyiv
 
PDF
Clean Code 2
Fredrik Wendt
 
PPTX
UNIT 1 (7).pptx
DrDhivyaaCRAssistant
 
PDF
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...
Sang Don Kim
 
PDF
Learn Dart And Angular, Get Your Web Development Wings With Kevin Moore
CodeCore
 
CSharp presentation and software developement
frwebhelp
 
Sharable of qualities of clean code
Eman Mohamed
 
Dartprogramming
Ali Parmaksiz
 
The Theory Of The Dom
kaven yan
 
Flutter tutorial for Beginner Step by Step
Chandramouli Biyyala
 
What’s new in Google Dart - Seth Ladd
jaxconf
 
Robust C++ Task Systems Through Compile-time Checks
Stoyan Nikolov
 
Productivity Enhencement with Visual Studio
Ahasan Habib
 
Oops lecture 1
rehan16091997
 
SharePoint Cincy 2012 - jQuery essentials
Mark Rackley
 
Dart Workshop
Dmitry Buzdin
 
jQuery
Vishwa Mohan
 
Dart, unicorns and rainbows
chrisbuckett
 
Angular JS2 Training Session #1
Paras Mendiratta
 
Dart structured web apps
chrisbuckett
 
Andriy Shalaenko - GO security tips
OWASP Kyiv
 
Clean Code 2
Fredrik Wendt
 
UNIT 1 (7).pptx
DrDhivyaaCRAssistant
 
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...
Sang Don Kim
 
Learn Dart And Angular, Get Your Web Development Wings With Kevin Moore
CodeCore
 
Ad

Recently uploaded (20)

PDF
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
PDF
Biography of Daniel Podor.pdf
Daniel Podor
 
PDF
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
PDF
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
PDF
POV_ Why Enterprises Need to Find Value in ZERO.pdf
darshakparmar
 
PDF
July Patch Tuesday
Ivanti
 
PPTX
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
PDF
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PDF
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
PDF
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
PDF
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
PDF
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PPTX
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
PDF
What Makes Contify’s News API Stand Out: Key Features at a Glance
Contify
 
PDF
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
Biography of Daniel Podor.pdf
Daniel Podor
 
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
POV_ Why Enterprises Need to Find Value in ZERO.pdf
darshakparmar
 
July Patch Tuesday
Ivanti
 
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
What Makes Contify’s News API Stand Out: Key Features at a Glance
Contify
 
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 

Structured web programming

  • 1. Structured web programming Created by Lars Bak & Gilad Bracha Come to the Dart side. Gilad Bracha in an interview on Dart
  • 2. What is DART? ● New programming language ● Open Source Project ● Simple OO programming language ● Class-based single inheritance with interfaces ● Optional static types ● Real lexical scoping ● Single-threaded ● Familiar Syntax ● It's still a Technology Preview Hello World!
  • 3. Dart is NOT the competition of JavaScript ● Dart is meant to fill a vacuum, not to replace JavaScript, but rather to fill the vacuum left by fragmented mobile platforms. ● It seems they are targeting the problem of programming in Java-like for android, Objective-C for iOS and so forth. ● It's not done.
  • 4. Type-Checker ● Dart has a different type-checker. ● The conventional type-checker tries to prove a program obeys the type system. ● If it can't construct a proof - the program is considered invalid, "Guilty until proven innocent" ● In Dart, you are innocent until proven guilty. ● During development one can choose to validate types.
  • 5. Optional Types ● Static checker provides warnings; tuned to be unobtrusive ● Type annotations have no effect except ... ● During development, you can check dynamic types against declarations ○ T x = o; assert(o === null || o is T); ● By default, type annotations have no effect and no cost ○ Code runs free Example
  • 6. Classes ● Single class inheritance (Object is the default) ● Interfaces ● Constructor assign Greeter.withPrefix(this.prefix); //A constructor var greeter = new Greeter.withPrefix('Howdy'); ● Setters and Getters class Greeter { String _prefix = 'Hello,'; // Hidden instance variable. String get prefix() => _prefix; // Getter for prefix. void set prefix(String value) {...} // Setter for prefix. } greeter.prefix = 'Howdy,'; // Set prefix. Example
  • 7. ISOLATES ● Inspired by Erlang, Dart has isolates ● Lightweight units of execution ○ Each isolate is conceptually a process ○ Nothing is shared ○ All communication takes place via message passing ● Isolates support concurrent execution ● Which gives us Actor based concurrency Isolates
  • 9. SNAPSHOTTING IN THE DART VM ● Process of serializing the heap after loading the application ● Loading 54173 lines of Dart code takes 640 ms ● Loading same application from a snapshot takes 60 ms ● Startup > 10x faster
  • 10. How to use Dart? One can run Dart code in several ways: ● Translate Dart code to JavaScript that can run in any modern browser: ○ Chrome ○ Safari 5+ ○ Firefox 4+ ● Execute Dart code directly in a VM on the server side ● ● Use Dartboard to write, modify, and execute small Dart programs within any browser window
  • 11. Embedding Dart in HTML ● Using the HTML script tag with type='application/dart'. ● Like other script tags, the script contents can be inlined as the body of the script tag or specified by reference via a URL using the script tag’s src attribute. ● The Dart script can have optional #source and #import directives. It must have a visible top-level function called main(), either declared directly in the script or in a sourced/imported file. The browser will invoke main() when the page is loaded.
  • 12. Fundamental differences from JavaScript ● Isolated script tags ○ Each script tag runs in isolation. ○ Use #import to use code from other URL ○ Each script tag requires a main() to be run. ● Delayed Execution ○ Each script's main() is called on DOMContentLoaded event ○ Ordering is not guaranteed ○ Dart code executes after page load. ○ We can assume the DOM is fully loaded. ● No inline event listeners
  • 13. Improving the DOM ● Better Querying Old New elem.getElementById('foo'); elem.query('#foo'); elem.getElementsByTagName('div'); elem.queryAll('div'); elem.getElementsByName('foo'); elem.queryAll('[name="foo"]'); elem.getElementsByClassName('foo'); elem.queryAll('.foo'); elem.querySelector('.foo .bar'); elem.query('.foo .bar'); elem.querySelectorAll('.foo .bar'); elem.queryAll('.foo .bar');
  • 14. Improving the DOM ● Use real collections ○ The queries return collections which are objects that implement the Dart core library's built-in collection interfaces. ○ This way we get rid of a lot of special methods & made attributes a map Old New elem.hasAttribute('name'); elem.attributes.contains('name'); elem.getAttribute('name'); elem.attributes['name']; elem.setAttribute('name', 'value'); elem.attributes['name'] = 'value'; elem.removeAttribute('name'); elem.attributes.remove('name'); elem.hasChildNodes(); elem.nodes.isEmpty(); elem.firstChild(); elem.nodes[0]; elem.appendChild(child); elem.nodes.add(child);
  • 15. Improving the DOM ● Use constructors Old document.createElement('div') New new Element.tag('div') Or TableElement table = new Element.html( '<table><tr><td>Hello <em>Dart!</em></table>');
  • 16. Improving the DOM ● Events ○ There are no inline events like 'onclick()' ○ New ElementEvents class. For each of the known event types, there is a property on that class: click, mouseDown, etc ○ There are event objects that can add and remove listeners and dispatch events. Old New elem.addEventListener('click', (event) => elem.on.click.add( (event) => print print('click!'), false); ('click!')); elem.removeEventListener( 'click', elem.on.click.remove(listener); listener);
  • 17. A technology preview on dartlang.org dart.googlecode.com http://gototoday.dk/2011/10/10/lars-bak-on-dart/ http://www.2ality.com/2011/10/dart-launch.html http://dartinside.com/ @DartInside