SlideShare a Scribd company logo
1 of 50
The Moby Scheme Compiler  for Smartphones (Is That a Parenthesis in Your Pocket? ) Danny Yoo Zhe Zhang Kathi Fisler Shriram Krishnamurthi
 
Vital Statistics ,[object Object],[object Object],[object Object],[object Object],[object Object]
 
Bad News ,[object Object]
 
Program = Design   + Programming System   + Execution Model
Program Execution Model
Pascal
[object Object],[object Object],[object Object],[object Object]
begin … end; begin … … end; begin … … … end; begin … … end; begin … … … … … … … … … … end; begin … … … … … … … … … … … … end. begin … end; .
flights from PVD to CDG list of flights the third outward flight restricted list of return flights the second return flight ok must remember  list of flights must remember  restricted list of return flights
user typed ‘(’ ok user moved mouse ok user clicked mouse button ok different kinds of handlers
user moved right 10 yards ok user tilted phone left ok user moved left 10 yards ok loc: (10,0) loc: (0,0) loc: (10,0) loc: (10,0) loc: (0,0) loc: (10,0)
void void void
database, memory store, remote Web service
database, hidden fields, cont’ns
Why is this Bad?
[object Object],[object Object]
[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object]
void void void Why  void ? The hostile operating system Why hostile? Because it’s neutral But neutrality    hostility Neutrals can cooperate (impartially)
User OS Callback “ World” “ World” “ World” “ World”
Current value of World New value  of World Might be  enriched with additional event information Phone example: World is current location Will invoke  event-specific functions (define (on-move w d)   (posn+ w d)) (define (on-tilt w o)   w)
on-tick  ::  w      w on-move  ::  w    dist      w on-tilt  ::  w    incl      w on-key  ::  w    key      w on-click  ::  w    btn      w on-redraw  ::  w      scene stop-when  ::  w      bool
 
[object Object],[object Object],[object Object],[object Object],(define (incr-time w) (add1 w)) (define (render-world w) (place-image PLANE (* w 10) (image-height PLANE) (empty-scene width height))) (big-bang width height 1/10 (on-tick incr-time) (on-redraw render-world))
World World Scene World World World
World World Scene World World Bool
Moby
What It’s Not ,[object Object]
What It Is ,[object Object],[object Object],[object Object],[object Object]
A Little More ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Baseline ,[object Object],[object Object]
Rolling Out of Time
 
 
[object Object],[object Object],[object Object],[object Object],(define-struct world (posn r vel)) (define initial-w  (make-world (make-posn …)   30 (make-vel 0 0))) ;; game-ends?: world -> boolean (define (game-ends? w) (or (<= (world-r w) 1) (collide? w)))
[object Object],[object Object],;; tilt: world number number number -> world (define (tilt w azimuth pitch roll) (make-world (world-posn w)   (world-r w)   (make-vel roll (- pitch)))) (big-bang WIDTH HEIGHT 1/20 initial-w   (on-redraw render)   (on-tick tick)   (on-tilt tilt)    (stop-when game-ends?)) (define (tilt w azimuth pitch roll)   (update-world-vel   w   (make-vel roll (- pitch))))
Minding the Store
 
[object Object],[object Object],[object Object],(big-bang ...   (on-redraw render)   (on-location-change update-loc)) ;; update-loc: world number number -> world (define (update-loc w lat long) (make-loc lat long))
[object Object],[object Object],;; description: world -> string (define (description w) (items->string (matching-items-nearby w))) ;; matching-items-nearby: world -> (listof item) (define (matching-items-nearby w) (places-matching-items   (nearby-places ALL-PLACES w)))
Homeward Bound
 
 
The World is Not Enough
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
On the Internet,  nobody knows you’re a Scheme program JavaScript Java Processing J2ME Flash/ActionScript Objective-C NXT NXC RobotC BricxCC Design Programming system Execution model {
[object Object],[object Object],Thanks : Danny Yoo Zhe Zhang Kathi Fisler Emmanuel Schanzer Matthias Felleisen (rest  )

More Related Content

Similar to The Moby Scheme Compiler for Smartphones

The Glass Class Lecture 5: Prototyping with Processing
The Glass Class Lecture 5: Prototyping with ProcessingThe Glass Class Lecture 5: Prototyping with Processing
The Glass Class Lecture 5: Prototyping with Processing
Mark Billinghurst
 
Gdc09 Minigames
Gdc09 MinigamesGdc09 Minigames
Gdc09 Minigames
Susan Gold
 
building_games_with_ruby_rubyconf
building_games_with_ruby_rubyconfbuilding_games_with_ruby_rubyconf
building_games_with_ruby_rubyconf
tutorialsruby
 
building_games_with_ruby_rubyconf
building_games_with_ruby_rubyconfbuilding_games_with_ruby_rubyconf
building_games_with_ruby_rubyconf
tutorialsruby
 
mobl - model-driven engineering lecture
mobl - model-driven engineering lecturemobl - model-driven engineering lecture
mobl - model-driven engineering lecture
zefhemel
 

Similar to The Moby Scheme Compiler for Smartphones (20)

mobl
moblmobl
mobl
 
用 OPENRNDR 將 Chatbot 訊息視覺化
用 OPENRNDR 將 Chatbot 訊息視覺化用 OPENRNDR 將 Chatbot 訊息視覺化
用 OPENRNDR 將 Chatbot 訊息視覺化
 
Clojure for Data Science
Clojure for Data ScienceClojure for Data Science
Clojure for Data Science
 
A More Flash Like Web?
A More Flash Like Web?A More Flash Like Web?
A More Flash Like Web?
 
The Glass Class Lecture 5: Prototyping with Processing
The Glass Class Lecture 5: Prototyping with ProcessingThe Glass Class Lecture 5: Prototyping with Processing
The Glass Class Lecture 5: Prototyping with Processing
 
Gdc09 Minigames
Gdc09 MinigamesGdc09 Minigames
Gdc09 Minigames
 
Introduction to Coding
Introduction to CodingIntroduction to Coding
Introduction to Coding
 
Playing With Fire - An Introduction to Node.js
Playing With Fire - An Introduction to Node.jsPlaying With Fire - An Introduction to Node.js
Playing With Fire - An Introduction to Node.js
 
building_games_with_ruby_rubyconf
building_games_with_ruby_rubyconfbuilding_games_with_ruby_rubyconf
building_games_with_ruby_rubyconf
 
building_games_with_ruby_rubyconf
building_games_with_ruby_rubyconfbuilding_games_with_ruby_rubyconf
building_games_with_ruby_rubyconf
 
Ankara Jug - Practical Functional Programming with Scala
Ankara Jug - Practical Functional Programming with ScalaAnkara Jug - Practical Functional Programming with Scala
Ankara Jug - Practical Functional Programming with Scala
 
Programming the cloud with Skywriting
Programming the cloud with SkywritingProgramming the cloud with Skywriting
Programming the cloud with Skywriting
 
MongoDB In Production At Sailthru
MongoDB In Production At SailthruMongoDB In Production At Sailthru
MongoDB In Production At Sailthru
 
HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?
 
Emerging Languages: A Tour of the Horizon
Emerging Languages: A Tour of the HorizonEmerging Languages: A Tour of the Horizon
Emerging Languages: A Tour of the Horizon
 
Guidelines to clean coding
Guidelines to clean codingGuidelines to clean coding
Guidelines to clean coding
 
mobl - model-driven engineering lecture
mobl - model-driven engineering lecturemobl - model-driven engineering lecture
mobl - model-driven engineering lecture
 
Google's HTML5 Work: what's next?
Google's HTML5 Work: what's next?Google's HTML5 Work: what's next?
Google's HTML5 Work: what's next?
 
My favorite slides
My favorite slidesMy favorite slides
My favorite slides
 
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
 

Recently uploaded

Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptxHarnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
FIDO Alliance
 
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider  Progress from Awareness to Implementation.pptxTales from a Passkey Provider  Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
FIDO Alliance
 
Revolutionizing SAP® Processes with Automation and Artificial Intelligence
Revolutionizing SAP® Processes with Automation and Artificial IntelligenceRevolutionizing SAP® Processes with Automation and Artificial Intelligence
Revolutionizing SAP® Processes with Automation and Artificial Intelligence
Precisely
 

Recently uploaded (20)

Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptxHarnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
 
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider  Progress from Awareness to Implementation.pptxTales from a Passkey Provider  Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
 
Event-Driven Architecture Masterclass: Challenges in Stream Processing
Event-Driven Architecture Masterclass: Challenges in Stream ProcessingEvent-Driven Architecture Masterclass: Challenges in Stream Processing
Event-Driven Architecture Masterclass: Challenges in Stream Processing
 
The Metaverse: Are We There Yet?
The  Metaverse:    Are   We  There  Yet?The  Metaverse:    Are   We  There  Yet?
The Metaverse: Are We There Yet?
 
AI mind or machine power point presentation
AI mind or machine power point presentationAI mind or machine power point presentation
AI mind or machine power point presentation
 
Google I/O Extended 2024 Warsaw
Google I/O Extended 2024 WarsawGoogle I/O Extended 2024 Warsaw
Google I/O Extended 2024 Warsaw
 
Extensible Python: Robustness through Addition - PyCon 2024
Extensible Python: Robustness through Addition - PyCon 2024Extensible Python: Robustness through Addition - PyCon 2024
Extensible Python: Robustness through Addition - PyCon 2024
 
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
 
Frisco Automating Purchase Orders with MuleSoft IDP- May 10th, 2024.pptx.pdf
Frisco Automating Purchase Orders with MuleSoft IDP- May 10th, 2024.pptx.pdfFrisco Automating Purchase Orders with MuleSoft IDP- May 10th, 2024.pptx.pdf
Frisco Automating Purchase Orders with MuleSoft IDP- May 10th, 2024.pptx.pdf
 
Design and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data ScienceDesign and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data Science
 
Revolutionizing SAP® Processes with Automation and Artificial Intelligence
Revolutionizing SAP® Processes with Automation and Artificial IntelligenceRevolutionizing SAP® Processes with Automation and Artificial Intelligence
Revolutionizing SAP® Processes with Automation and Artificial Intelligence
 
Oauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoftOauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoft
 
Cyber Insurance - RalphGilot - Embry-Riddle Aeronautical University.pptx
Cyber Insurance - RalphGilot - Embry-Riddle Aeronautical University.pptxCyber Insurance - RalphGilot - Embry-Riddle Aeronautical University.pptx
Cyber Insurance - RalphGilot - Embry-Riddle Aeronautical University.pptx
 
ADP Passwordless Journey Case Study.pptx
ADP Passwordless Journey Case Study.pptxADP Passwordless Journey Case Study.pptx
ADP Passwordless Journey Case Study.pptx
 
Using IESVE for Room Loads Analysis - UK & Ireland
Using IESVE for Room Loads Analysis - UK & IrelandUsing IESVE for Room Loads Analysis - UK & Ireland
Using IESVE for Room Loads Analysis - UK & Ireland
 
TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024
 
Intro to Passkeys and the State of Passwordless.pptx
Intro to Passkeys and the State of Passwordless.pptxIntro to Passkeys and the State of Passwordless.pptx
Intro to Passkeys and the State of Passwordless.pptx
 
ChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps ProductivityChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps Productivity
 
Generative AI Use Cases and Applications.pdf
Generative AI Use Cases and Applications.pdfGenerative AI Use Cases and Applications.pdf
Generative AI Use Cases and Applications.pdf
 
UiPath manufacturing technology benefits and AI overview
UiPath manufacturing technology benefits and AI overviewUiPath manufacturing technology benefits and AI overview
UiPath manufacturing technology benefits and AI overview
 

The Moby Scheme Compiler for Smartphones

  • 1. The Moby Scheme Compiler for Smartphones (Is That a Parenthesis in Your Pocket? ) Danny Yoo Zhe Zhang Kathi Fisler Shriram Krishnamurthi
  • 2.  
  • 3.
  • 4.  
  • 5.
  • 6.  
  • 7. Program = Design + Programming System + Execution Model
  • 10.
  • 11. begin … end; begin … … end; begin … … … end; begin … … end; begin … … … … … … … … … … end; begin … … … … … … … … … … … … end. begin … end; .
  • 12. flights from PVD to CDG list of flights the third outward flight restricted list of return flights the second return flight ok must remember list of flights must remember restricted list of return flights
  • 13. user typed ‘(’ ok user moved mouse ok user clicked mouse button ok different kinds of handlers
  • 14. user moved right 10 yards ok user tilted phone left ok user moved left 10 yards ok loc: (10,0) loc: (0,0) loc: (10,0) loc: (10,0) loc: (0,0) loc: (10,0)
  • 16. database, memory store, remote Web service
  • 18. Why is this Bad?
  • 19.
  • 20.
  • 21.
  • 22. void void void Why void ? The hostile operating system Why hostile? Because it’s neutral But neutrality  hostility Neutrals can cooperate (impartially)
  • 23. User OS Callback “ World” “ World” “ World” “ World”
  • 24. Current value of World New value of World Might be enriched with additional event information Phone example: World is current location Will invoke event-specific functions (define (on-move w d) (posn+ w d)) (define (on-tilt w o) w)
  • 25. on-tick :: w  w on-move :: w  dist  w on-tilt :: w  incl  w on-key :: w  key  w on-click :: w  btn  w on-redraw :: w  scene stop-when :: w  bool
  • 26.  
  • 27.
  • 28. World World Scene World World World
  • 29. World World Scene World World Bool
  • 30. Moby
  • 31.
  • 32.
  • 33.
  • 34.
  • 36.  
  • 37.  
  • 38.
  • 39.
  • 41.  
  • 42.
  • 43.
  • 45.  
  • 46.  
  • 47. The World is Not Enough
  • 48.
  • 49. On the Internet, nobody knows you’re a Scheme program JavaScript Java Processing J2ME Flash/ActionScript Objective-C NXT NXC RobotC BricxCC Design Programming system Execution model {
  • 50.