Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, www.idc.ac.il/tecs, Chapter 9: High Level Language slide 1www.idc.ac.il/tecs Chapter.

Slides:



Advertisements
Similar presentations
Chapter 4: Machine Language
Advertisements

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 1: Boolean Logic slide 1www.idc.ac.il/tecs Chapter 1: Boolean.
Based on Java Software Development, 5th Ed. By Lewis &Loftus
Semantic Analysis Chapter 6. Two Flavors  Static (done during compile time) –C –Ada  Dynamic (done during run time) –LISP –Smalltalk  Optimization.
Programming Languages and Paradigms
Programming Paradigms Introduction. 6/15/2005 Copyright 2005, by the authors of these slides, and Ateneo de Manila University. All rights reserved. L1:
Assembly Language for Intel-Based Computers, 4 th Edition Chapter 1: Basic Concepts (c) Pearson Education, All rights reserved. You may modify and.
Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 5: Computer Architecture slide 1www.idc.ac.il/tecs Chapter.
George Blank University Lecturer. CS 602 Java and the Web Object Oriented Software Development Using Java Chapter 4.
Datalogi A 1: 8/9. Book: Cay Horstmann: Big Java or Java Consepts.
CS-341 Dick Steflik Introduction. C++ General purpose programming language A superset of C (except for minor details) provides new flexible ways for defining.
CS-341 Dick Steflik Introduction. C++ General purpose programming language A superset of C (except for minor details) provides new flexible ways for defining.
COMP 14: Primitive Data and Objects May 24, 2000 Nick Vallidis.
Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 3: Sequential Logic slide 1www.idc.ac.il/tecs Chapter 3:
Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 8: VM II: Program Control slide 1www.idc.ac.il/tecs Chapter.
Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 7: VM I: Stack Arithmetic slide 1www.idc.ac.il/tecs Chapter.
CMSC 341 Introduction to Java Based on tutorial by Rebecca Hasti at
OOP Languages: Java vs C++
Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Introduction: Hello, World Below slide 1www.idc.ac.il/tecs Introduction:
Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 10: Compiler I: Syntax Analysis slide 1www.idc.ac.il/tecs.
Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 2: Boolean Logic slide 1www.idc.ac.il/tecs Chapter 2: Boolean.
Programming Languages and Paradigms Object-Oriented Programming.
CSM-Java Programming-I Spring,2005 Introduction to Objects and Classes Lesson - 1.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 10: Compiler I: Syntax Analysis slide 1www.idc.ac.il/tecs Compiler.
Imperative Programming
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 7: Virtual Machine I: Stack Arithmetic slide 1www.nand2tetris.org.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 7: Virutal Machine, Part I slide 1www.idc.ac.il/tecs Virtual Machine.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 4: Machine Language slide 1www.idc.ac.il/tecs Machine Language.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 6: Assembler slide 1www.idc.ac.il/tecs Assembler Elements of Computing.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 5: Computer Architecture slide 1www.idc.ac.il/tecs Computer Architecture.
Slide 1/8Jack IDE Tutorial, Index This program is part of the software suite that accompanies the book The Elements of Computing.
CS 11 java track: lecture 1 Administrivia need a CS cluster account cgi-bin/sysadmin/account_request.cgi need to know UNIX
Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 12: Operating System slide 1www.idc.ac.il/tecs Chapter 12:
Java Programming, Second Edition Chapter One Creating Your First Java Program.
Building a Modern Computer From First Principles
Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 11: Compiler II: Code Generation slide 1www.idc.ac.il/tecs.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 1: Boolean Logic slide 1www.nand2tetris.org Building a Modern.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 1: Boolean Logic slide 1www.idc.ac.il/tecs Boolean Logic Elements.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 2: Boolean Arithmetic slide 1www.nand2tetris.org Building a Modern.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 8: Virtual Machine, Part II slide 1www.idc.ac.il/tecs Virtual Machine.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 8: Virtual Machine, Part II slide 1www.nand2tetris.org Building.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 1: Compiler II: Code Generation slide 1www.nand2tetris.org Building.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 11: Compiler II: Code Generation slide 1www.nand2tetris.org Building.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 7: Virutal Machine, Part I slide 1www.nand2tetris.org Building.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 9: High-Level Language slide 1www.nand2tetris.org Building a Modern.
Using Data Within a Program Chapter 2.  Classes  Methods  Statements  Modifiers  Identifiers.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 3: Sequential Logic slide 1www.idc.ac.il/tecs Sequential Logic.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 3: Sequential Logic slide 1www.nand2tetris.org Building a Modern.
Programming for Beginners Martin Nelson Elizabeth FitzGerald Lecture 2: Variables & Data Types.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 10: Compiler I: Syntax Analysis slide 1www.nand2tetris.org Building.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 10: Compiler I: Syntax Analysis slide 1www.nand2tetris.org Building.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 12: Operating System slide 1www.nand2tetris.org Operating Systems.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 12: Operating System slide 1www.nand2tetris.org Operating Systems.
Lecture 101 CS110 Lecture 10 Thursday, February Announcements –hw4 due tonight –Exam next Tuesday (sample posted) Agenda –questions –what’s on.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 9: High-Level Language slide 1www.nand2tetris.org Building a Modern.
Building a Modern Computer From First Principles
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 7: Virutal Machine, Part I slide 1www.nand2tetris.org Building.
School of Computer Science & Information Technology G6DICP - Lecture 4 Variables, data types & decision making.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 9: High-Level Language slide 1www.nand2tetris.org Building a Modern.
Spring 2009 Programming Fundamentals I Java Programming XuanTung Hoang Lecture No. 8.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 6: Assembler slide 1www.nand2tetris.org Building a Modern Computer.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 12: Operating System slide 1www.nand2tetris.org Operating Systems.
72 4/11/98 CSE 143 Abstract Data Types [Sections , ]
Chapter 3 Implementing Classes
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 12: Operating System slide 1www.nand2tetris.org Operating Systems.
Introduction: From Nand to Tetris
Data types and variables
Compiler I: Sytnax Analysis
Programming Languages 2nd edition Tucker and Noonan
CS100J Lecture 7 Previous Lecture This Lecture Java Constructs
Presentation transcript:

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 1www.idc.ac.il/tecs Chapter 9: High Level Language Elements of Computing Systems, Nisan & Schocken, MIT Press, Usage and Copyright Notice: Copyright 2005 © Noam Nisan and Shimon Schocken This presentation contains lecture materials that accompany the textbook “The Elements of Computing Systems” by Noam Nisan & Shimon Schocken, MIT Press, The book web site, features 13 such presentations, one for each book chapter. Each presentation is designed to support about 3 hours of classroom or self-study instruction. You are welcome to use or edit this presentation for instructional and non-commercial purposes. If you use our materials, we will appreciate it if you will include in them a reference to the book’s web site. And, if you have any comments, you can reach us at

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 2www.idc.ac.il/tecs Where we are at: Assembler Chapter 6 H.L. Language & Operating Sys. abstract interface Compiler Chapters VM Translator Chapters Computer Architecture Chapters Gate Logic Chapters Electrical Engineering Physics Virtual Machine abstract interface Software hierarchy Assembly Language abstract interface Hardware hierarchy Machine Language abstract interface Hardware Platform abstract interface Chips & Logic Gates abstract interface Human Thought Abstract design Chapters 9, 12

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 3www.idc.ac.il/tecs Brief history of programming languages (some milestones) Machine language Assembler: symbolic programming Fortran: formula translation Algol: structured programming, dynamic memory Pascal, C: industrial strength compilers C++: OO Java, C#: OO done well Other paradigms.

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 4www.idc.ac.il/tecs The OO approach to programming Object = entity associated with properties (fields) and operations (methods) Objects are instances of classes E.g. bank account, employee, transaction, window, gameSession, … OO programming: identifying, designing and implementing classes Each class is typically: A template for generating and manipulating objects and/or A collection of related subroutines.

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 5www.idc.ac.il/tecs An OO programming language can be used for … Procedural programming Abstract data types Concrete objects Abstract objects Graphical objects Software libraries And more.

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 6www.idc.ac.il/tecs Jack: a typical OO language -- sample applications

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 7www.idc.ac.il/tecs Disclaimer Although Jack is a real programming language, we don’t view it as an end Rather, we view Jack as a means through which we explain: How to build a compiler How the compiler and the language interface with an OS How the topmost piece in the software hierarchy fits into the picture Jack’s most important virtue: it can be learned (and un-learned) it in 1 hour.

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 8www.idc.ac.il/tecs Example 0: hello world /** Hello World program. */ class Main { function void main() { /* Prints some text using the standard library. */ do Output.printString(”Hello World”); do Output.println(); // New line return; } /** Hello World program. */ class Main { function void main() { /* Prints some text using the standard library. */ do Output.printString(”Hello World”); do Output.println(); // New line return; } Java-like syntax Comments Standard library.

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 9www.idc.ac.il/tecs Example 1: procedural programming Jack program = collection of one or more classes Jack class = collection of one or more subroutines Jack subroutine: Function Method Constructor (the example on the left has functions only, as it is “object-less”) There must be one Main class, and one of its methods must be main. class Main { /* Sums up n */ function int sum(int n) { var int i, sum; let sum = 0; let i = 1; while (~(i>n)) { let sum = sum + i; let i = i + 1; } return sum; } function void main() { var int n, x; let n = Keyboard.readInt(”Enter n: ”); let x = Main.sum(n); do Output.printString("The result is: "); do Output.printInt(sum); do Output.println(); return; } } // Main class Main { /* Sums up n */ function int sum(int n) { var int i, sum; let sum = 0; let i = 1; while (~(i>n)) { let sum = sum + i; let i = i + 1; } return sum; } function void main() { var int n, x; let n = Keyboard.readInt(”Enter n: ”); let x = Main.sum(n); do Output.printString("The result is: "); do Output.printInt(sum); do Output.println(); return; } } // Main

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 10www.idc.ac.il/tecs Example 2: OO programming class BankAccount { static int nAccounts; // account properties field int id; field String owner; field int balance; /* Constructs a new bank account. */ constructor BankAccount new(String aOwner) { let id = nAccounts; let nAccounts = nAccounts + 1; let owner = aOwner; let balance = 0; return this; } //... More BankAccount methods. } // BankAccount class BankAccount { static int nAccounts; // account properties field int id; field String owner; field int balance; /* Constructs a new bank account. */ constructor BankAccount new(String aOwner) { let id = nAccounts; let nAccounts = nAccounts + 1; let owner = aOwner; let balance = 0; return this; } //... More BankAccount methods. } // BankAccount... var int sum; var BankAccount b, c; let b=BankAccount.new(”Joe”);... var int sum; var BankAccount b, c; let b=BankAccount.new(”Joe”);...

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 11www.idc.ac.il/tecs class BankAccount { static int nAccounts; // account properties field int id; field String owner; field int balance; // Constructor... (omitted) /* Deposits money in this account. */ method void deposit(int amount) { let balance = balance + amount; return; } /* Withdraws money from this account. */ method void withdraw(int amount){ if (balance > amount) { let balance = balance - amount; } return; } //... More BankAccount methods. } // BankAccount class BankAccount { static int nAccounts; // account properties field int id; field String owner; field int balance; // Constructor... (omitted) /* Deposits money in this account. */ method void deposit(int amount) { let balance = balance + amount; return; } /* Withdraws money from this account. */ method void withdraw(int amount){ if (balance > amount) { let balance = balance - amount; } return; } //... More BankAccount methods. } // BankAccount... var int sum; var BankAccount b, c; let b=BankAccount.new(”Joe”); do b.deposit(5000); let c=BankAccount.new(”jane”); let sum = 1000; do b.withdraw(sum);... var int sum; var BankAccount b, c; let b=BankAccount.new(”Joe”); do b.deposit(5000); let c=BankAccount.new(”jane”); let sum = 1000; do b.withdraw(sum);... Example 2: typical OO programming (cont.)

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 12www.idc.ac.il/tecs Example 2: typical OO programming (cont.) class BankAccount { static int nAccounts; // account properties field int id; field String owner; field int balance; // Constructor... (omitted) /* Prints information about this account. */ method void printInfo() { do Output.printInt(ID); do Output.printString(owner); do Output.printInt(balance); return; } /* Destroys this account. */ method void dispose() { do Memory.deAlloc(this); return; } //... More BankAccount methods. } // BankAccount class BankAccount { static int nAccounts; // account properties field int id; field String owner; field int balance; // Constructor... (omitted) /* Prints information about this account. */ method void printInfo() { do Output.printInt(ID); do Output.printString(owner); do Output.printInt(balance); return; } /* Destroys this account. */ method void dispose() { do Memory.deAlloc(this); return; } //... More BankAccount methods. } // BankAccount... var int sum; var BankAccount b, c; // Construct and manipulate // b and c... do b.printInfo(); do b.dispose();... var int sum; var BankAccount b, c; // Construct and manipulate // b and c... do b.printInfo(); do b.dispose();...

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 13www.idc.ac.il/tecs Example 3: abstract data types (API + usage) Fraction API Using the Fraction API (example) Motivation: Jack has only 3 primitive data type: int, char, boolean API = public contract Interface / implementation.

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 14www.idc.ac.il/tecs Example 3: abstract data types (implementation)

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 15www.idc.ac.il/tecs Example 3: abstract data types (implementation cont.)

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 16www.idc.ac.il/tecs Example 4: linked list /** Provides a linked list abstraction. */ class List { field int data; field List next; /* Creates a new List object. */ constructor List new(int car, List cdr) { let data = car; let next = cdr; return this; } /* Disposes this List by recursively disposing its tail. */ method void dispose() { if (~(next = null)) { do next.dispose(); } do Memory.deAlloc(this); return; }... } // class List. /** Provides a linked list abstraction. */ class List { field int data; field List next; /* Creates a new List object. */ constructor List new(int car, List cdr) { let data = car; let next = cdr; return this; } /* Disposes this List by recursively disposing its tail. */ method void dispose() { if (~(next = null)) { do next.dispose(); } do Memory.deAlloc(this); return; }... } // class List. class Foo {... // Creates a list holding the numbers (2,3,5). function void create235() { var List v; let v = List.new(5,null); let v = List.new(2,List.new(3,v));... } class Foo {... // Creates a list holding the numbers (2,3,5). function void create235() { var List v; let v = List.new(5,null); let v = List.new(2,List.new(3,v));... }

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 17www.idc.ac.il/tecs Jack language specification Syntax Data types Variable kinds Expressions Statements Subroutine calling Program structure Standard library (for complete coverage, see chapter 9 in the book).

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 18www.idc.ac.il/tecs Jack syntax

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 19www.idc.ac.il/tecs Jack syntax (cont.)

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 20www.idc.ac.il/tecs Jack data types Primitive: Int 16-bit 2’s complement (15, -2, 3,...) Boolean 0 and –1, standing for true and false Char unicode character (‘a’, ‘x’, ‘+’, ‘%’,...) Abstract data types (supplied by the OS or by the user): String Fraction List... Application-specific objects: BankAccount Bat / Ball...

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 21www.idc.ac.il/tecs Jack data types: memory allocation Object types are represented by a class name and implemented as a reference, i.e. a memory address Memory allocation: Primitive variables are allocated memory space when they are declared Object variables are allocated memory space when they are created via a constructor.

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 22www.idc.ac.il/tecs Jack variable kinds and scope

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 23www.idc.ac.il/tecs Jack expressions No operator priority!

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 24www.idc.ac.il/tecs Jack Statements let variable = expression; or let variable [ expression ] = expression ; let variable = expression; or let variable [ expression ] = expression ; if ( expression ) { statements } else { statements } if ( expression ) { statements } else { statements } while ( expression ) { statements } while ( expression ) { statements } do function-or-method-call ; return expression ; or return; return expression ; or return;

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 25www.idc.ac.il/tecs Jack subroutine calls general syntax: subroutineName ( arg1, arg2, … ) Each argument is a valid Jack expression Parameter passing is by value Example: suppose we have function int sqrt(int n) This function can be invoked as follows: sqrt(17) sqrt(x) sqrt(a*c-17) sqrt(a*sqrt(c-17)+3) Etc.

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 26www.idc.ac.il/tecs Jack subroutine calls (cont.)

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 27www.idc.ac.il/tecs Jack program structure Each class in a separate file (compilation unit) Jack program = collection of classes, containing a Main.main()

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 28www.idc.ac.il/tecs Jack standard library = language extensions = OS class Math { function void init() function int abs(int x) function int multiply(int x, int y) function int divide(int x, int y) function int min(int x, int y) function int max(int x, int y) function int sqrt(int x) } class Math { function void init() function int abs(int x) function int multiply(int x, int y) function int divide(int x, int y) function int min(int x, int y) function int max(int x, int y) function int sqrt(int x) } Class String { constructor String new(int maxLength) method void dispose() method int length() method char charAt(int j) method void setCharAt(int j, char c) method String appendChar(char c) method void eraseLastChar() method int intValue() method void setInt(int j) function char backSpace() function char doubleQuote() function char newLine() } Class String { constructor String new(int maxLength) method void dispose() method int length() method char charAt(int j) method void setCharAt(int j, char c) method String appendChar(char c) method void eraseLastChar() method int intValue() method void setInt(int j) function char backSpace() function char doubleQuote() function char newLine() } Class Array { function Array new(int size) method void dispose() } Class Array { function Array new(int size) method void dispose() } class Output { function void moveCursor(int i, int j) function void printChar(char c) function void printString(String s) function void printInt(int i) function void println() function void backSpace() } class Output { function void moveCursor(int i, int j) function void printChar(char c) function void printString(String s) function void printInt(int i) function void println() function void backSpace() } Class Screen { function void clearScreen() function void setColor(boolean b) function void drawPixel(int x, int y) function void drawLine(int x1, int y1, int x2, int y2) function void drawRectangle(int x1, int y1, int x2, int y2) function void drawCircle(int x, int y, int r) } Class Screen { function void clearScreen() function void setColor(boolean b) function void drawPixel(int x, int y) function void drawLine(int x1, int y1, int x2, int y2) function void drawRectangle(int x1, int y1, int x2, int y2) function void drawCircle(int x, int y, int r) } class Memory { function int peek(int address) function void poke(int address, int value) function Array alloc(int size) function void deAlloc(Array o) } class Memory { function int peek(int address) function void poke(int address, int value) function Array alloc(int size) function void deAlloc(Array o) } Class Keyboard { function char keyPressed() function char readChar() function String readLine(String message) function int readInt(String message) } Class Keyboard { function char keyPressed() function char readChar() function String readLine(String message) function int readInt(String message) } Class Sys { function void halt(): function void error(int errorCode) function void wait(int duration) } Class Sys { function void halt(): function void error(int errorCode) function void wait(int duration) }

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 29www.idc.ac.il/tecs Perspective Jack is an object-based language: no inheritance Primitive type system Standard library Our hidden agenda: gearing up to understand how to develop a: Compiler (chapters 10-11) OS (chapter 12).