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

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend