three useful categories
play

Three useful categories Learning a programming language involves: - PowerPoint PPT Presentation

Three useful categories Learning a programming language involves: Syntax: The grammar rules defning a program f ragment. Semantics: The meaning o f various programming f ragments. Pragmatics: How to effectively use language f eatures, libs, IDEs,


  1. Three useful categories Learning a programming language involves: Syntax: The grammar rules defning a program f ragment. Semantics: The meaning o f various programming f ragments. Pragmatics: How to effectively use language f eatures, libs, IDEs, … All three o f these are important in how easy it is to easily write high-quality so f tware. For all categories, consider: Principle o f least surprise. 1

  2. Some vocabulary Do not con f use the f ollowing f our! • value: • variable: • type: • expression: 2

  3. Some vocabulary Do not con f use the f ollowing f our! • value: a datum – the f undamental piece o f in f ormation that can be represented in the program E.g. 37 or "hi" . Values can be passed to f unctions, returned, stored in variables. • variable: • type: • expression: 3

  4. Some vocabulary Do not con f use the f ollowing f our! • value: a datum – the f undamental piece o f in f ormation that can be represented in the program E.g. 37 or "hi" . Values can be passed to f unctions, returned, stored in variables. • variable: an identi f er which, at run time, evaluates to some particular value. • type: • expression: 4

  5. Some vocabulary Do not con f use the f ollowing f our! • value: a datum – the f undamental piece o f in f ormation that can be represented in the program E.g. 37 or "hi" . Values can be passed to f unctions, returned, stored in variables. • variable: an identi f er which, at run time, evaluates to some particular value. • type: a set o f values E.g. Java’s short = {-32768,..., -1,0,+1,+2, ..., +32767}. • expression: 5

  6. Some vocabulary Do not con f use the f ollowing f our! • value: a datum – the f undamental piece o f in f ormation that can be represented in the program E.g. 37 or "hi" . Values can be passed to f unctions, returned, stored in variables. • variable: an identi f er which, at run time, evaluates to some particular value. • type: a set o f values E.g. Java’s short = {-32768,..., -1,0,+1,+2, ..., +32767}. • expression: a piece o f syntax which evaluates to some particular value. E.g. 3+4*5 or sqrt(16) . 6

  7. Some vocabulary (cont.) • literal: a piece o f syntax which evaluates immediately to a particular value. E.g. Java 37 or 045 are both literals representing the value 37, which is o f type int . And 37. , 37d , 37e0 are each literal double s. (We will o f ten con f ate a literal with the value it represents, and only say “literal” when we’re emphasizing that we’re dealing with syntax.) 7

  8. trivia: Interning Java string-literals Literals occur in the source-code text, and can be processed at compile-time. In Java, string literals are “interned”: I f the same string-literal occurs twice, the the compiler is smart enough to only make one object(*), and use the same re f erence in both places. "Cathay".substring(3).equals("hay") Morever: string-literals with + are computed at compile-time. (*) This optimization is only safe because Java strings are immutable. 8

  9. trivia: Interning Java string-literals Literals occur in the source-code text, and can be processed at compile-time. In Java, string literals are “interned”: I f the same string-literal occurs twice, the the compiler is smart enough to only make one object(*), and use the same re f erence in both places. "Cathay".substring(3).equals("hay") // true Morever: string-literals with + are computed at compile-time. (*) This optimization is only safe because Java strings are immutable. 9

  10. trivia: Interning Java string-literals Literals occur in the source-code text, and can be processed at compile-time. In Java, string literals are “interned”: I f the same string-literal occurs twice, the the compiler is smart enough to only make one object(*), and use the same re f erence in both places. "Cathay".substring(3).equals("hay") // true "Cathay".substring(3) == "hay" Morever: string-literals with + are computed at compile-time. (*) This optimization is only safe because Java strings are immutable. 1 �

  11. trivia: Interning Java string-literals Literals occur in the source-code text, and can be processed at compile-time. In Java, string literals are “interned”: I f the same string-literal occurs twice, the the compiler is smart enough to only make one object(*), and use the same re f erence in both places. "Cathay".substring(3).equals("hay") // true "Cathay".substring(3) == "hay" // false Morever: string-literals with + are computed at compile-time. (*) This optimization is only safe because Java strings are immutable. 11

  12. trivia: Interning Java string-literals Literals occur in the source-code text, and can be processed at compile-time. In Java, string literals are “interned”: I f the same string-literal occurs twice, the the compiler is smart enough to only make one object(*), and use the same re f erence in both places. "Cathay".substring(3).equals("hay") // true "Cathay".substring(3) == "hay" // false "Cathay" == "Cathay") Morever: string-literals with + are computed at compile-time. (*) This optimization is only safe because Java strings are immutable. 12

  13. trivia: Interning Java string-literals Literals occur in the source-code text, and can be processed at compile-time. In Java, string literals are “interned”: I f the same string-literal occurs twice, the the compiler is smart enough to only make one object(*), and use the same re f erence in both places. "Cathay".substring(3).equals("hay") // true "Cathay".substring(3) == "hay" // false "Cathay" == "Cathay") // true (!) Morever: string-literals with + are computed at compile-time. (*) This optimization is only safe because Java strings are immutable. 13

  14. trivia: Interning Java string-literals Literals occur in the source-code text, and can be processed at compile-time. In Java, string literals are “interned”: I f the same string-literal occurs twice, the the compiler is smart enough to only make one object(*), and use the same re f erence in both places. "Cathay".substring(3).equals("hay") // true "Cathay".substring(3) == "hay" // false "Cathay" == "Cathay") // true (!) Morever: string-literals with + are computed at compile-time. "Cat".concat("hay") == "Cathay" (*) This optimization is only safe because Java strings are immutable. 14

  15. trivia: Interning Java string-literals Literals occur in the source-code text, and can be processed at compile-time. In Java, string literals are “interned”: I f the same string-literal occurs twice, the the compiler is smart enough to only make one object(*), and use the same re f erence in both places. "Cathay".substring(3).equals("hay") // true "Cathay".substring(3) == "hay" // false "Cathay" == "Cathay") // true (!) Morever: string-literals with + are computed at compile-time. "Cat".concat("hay") == "Cathay" // false (*) This optimization is only safe because Java strings are immutable. 15

  16. trivia: Interning Java string-literals Literals occur in the source-code text, and can be processed at compile-time. In Java, string literals are “interned”: I f the same string-literal occurs twice, the the compiler is smart enough to only make one object(*), and use the same re f erence in both places. "Cathay".substring(3).equals("hay") // true "Cathay".substring(3) == "hay" // false "Cathay" == "Cathay") // true (!) Morever: string-literals with + are computed at compile-time. "Cat".concat("hay") == "Cathay" // false (*) This optimization is only safe because Java strings are immutable. 16

  17. trivia: Interning Java string-literals Literals occur in the source-code text, and can be processed at compile-time. In Java, string literals are “interned”: I f the same string-literal occurs twice, the the compiler is smart enough to only make one object(*), and use the same re f erence in both places. "Cathay".substring(3).equals("hay") // true "Cathay".substring(3) == "hay" // false "Cathay" == "Cathay") // true (!) Morever: string-literals with + are computed at compile-time. "Cat".concat("hay") == "Cathay" // false "Cat" + "hay" == "Cathay" // true (!) (*) This optimization is only safe because Java strings are immutable. 17

  18. typing: when? statically-typed: At compile-time, the types o f all declared names are known. Can be provided by programmer and checked by type-system, or in f erred by the language (ML, Haskell). (C# allows simple var n = 5; and in f ers n ∈ int). dynamically-typed: Language knows the type o f every value. But a variable might hold values o f di ff erent types, over its li f etime. php, javascript, racket. Each value may include some extra bits, indicating its type. 18

  19. typing: other approaches duck typing: Care about an object having a feld/method, not any inheritance. E.g. javascript untyped: E.g. assembly type-safe: Any type error is caught (either dynamically or statically). Note that C is not type-sa f e, due to casting. Java’s casting is type-sa f e (since a bad cast will f ail at run-time). 19

Recommend


More recommend