CS307: Principles Of Programming Languages

Transcription

CS307:Principles of ProgrammingLanguagesLECTURE 12: NAMES, SCOPES, AND BINDINGS II

INTRODUCTIONLECTURE OUTLINE BINDINGS LIFETIME AND STORAGE MANAGEMENT SCOPE RULES STATIC SCOPING DYNAMIC SCOPING STATIC VS DYNAMIC SCOPING DEEP VS SHALLOW BINDING POLYMORPHISM, DYNAMIC BINDING, GENERIC PROGRAMMING METHOD MATCHING VS BINDING BINDING OF REFERENCE ENVIRONMENTS SEPARATE COMPILATION2CS307 : Principles of Programming Languages - (c) Paul Fodor (CS StonyBrook), Tony Mione (SUNY Korea) and Pearson

SCOPE RULES BINDING SCOPE IS THE TEXTUAL REGION OF THE PROGRAM IN WHICH ABINDING IS ACTIVE A SCOPE IS A PROGRAM SECTION OF MAXIMAL SIZE WHERE NO BINDINGS CHANGE MINIMALLY: NO RE-DECLARATIONS ARE PERMITTED SCOPING RULE EXAMPLE 1: DECLARATION BEFORE USE CAN A NAME BE USED BEFORE IT IS DECLARED? JAVA LOCAL VARS: NO JAVA CLASS PROPERTIES AND METHODS: YES THE SCOPE OF A BINDING IS DETERMINED STATICALLY OR DYNAMICALLY3CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

SCOPING RULES SCOPING RULE EXAMPLE 2:TWO USES OF A GIVEN NAME. DO THEY REFER TO THE SAME BINDING?a 1.def f():a 2b aSCOPING RULES DETERMINE WHETHER OR NOT THIS IS THE CASE4CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

SCOPE RULES KEY IDEA: IN STATIC SCOPE RULES - BINDINGS DEFINED BY THEPHYSICAL (LEXICAL) STRUCTURE OF THE PROGRAM STATIC SCOPING (ALSO CALLED LEXICAL SCOPING) EXAMPLES: ONE BIG SCOPE: (BASIC) SCOPE OF A FUNCTION (VARIABLES LIVE THROUGH A FUNCTIONEXECUTION) BLOCK SCOPE NESTED SUBROUTINES VARIABLES ACTIVE IN ONE OR MORE SCOPES CLOSEST NESTED SCOPE RULE APPLIES LEXICAL/STATIC SCOPING WAS USED BY ALGOL PICKED UP IN MOST LANGUAGES SINCE: (PASCAL, C, JAVA, ETC)5CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

SCOPE RULES IN MOST LANGUAGES WITH SUBROUTINES: OPEN A NEW SCOPE ON SUBROUTINE ENTRY: CREATE BINDINGS FOR NEW LOCAL VARIABLES DEACTIVATE BINDINGS FOR GLOBAL VARIABLES THAT ARE RE-DECLARED THESE [GLOBAL] VARIABLES ARE SAID TO HAVE A "HOLE" IN THEIR SCOPE ON SUBROUTINE EXIT: DESTROY BINDINGS FOR LOCAL VARIABLES REACTIVATE BINDINGS FOR DEACTIVATED GLOBAL VARIABLES6CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

SCOPE RULES ELABORATION PROCESS OF CREATING BINDINGS WHEN ENTERING A SCOPE STORAGE MAY BE ALLOCATED TASKS STARTED EXCEPTIONS MAY BE PROPAGATED AS A RESULT OF THE ELABORATION OFDECLARATIONS7CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

STATIC SCOPING STATIC (LEXICAL) SCOPE RULES A SCOPE IS DEFINED IN TERMS OF THE PHYSICAL (LEXICAL) STRUCTURE OFTHE PROGRAM: SCOPES CAN BE DETERMINED BY COMPILER ALL BINDINGS FOR IDENTIFIERS CAN BE RESOLVED BY EXAMINING PROGRAM TYPICALLY, CHOOSE THE MOST RECENT, ACTIVE BINDING MADE AT COMPILETIME MOST COMPILED LANGUAGES, C, PASCAL, JAVA AND PYTHON INCLUDED, EMPLOYSTATIC SCOPE RULES8CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

STATIC SCOPING NESTED BLOCKS: CLASSICAL EXAMPLE OF STATIC SCOPE RULES: “MOST CLOSELY NESTEDRULE”: AN IDENTIFIER IS KNOWN IN THE SCOPE IN WHICH IT’S DECLARED AND IN EACH ENCLOSED SCOPE UNLESS RE-DECLARED IN AN ENCLOSED SCOPE (ORIGINAL IDENTIFIER IS HIDDEN) TO RESOLVE A REFERENCE TO AN IDENTIFIER: EXAMINE LOCAL SCOPE ANDSTATICALLY ENCLOSING SCOPES UNTIL A BINDING IS FOUND CLASSES (IN ABSTRACTION AND OO LANGUAGES) HAVE EVEN MORESOPHISTICATED (STATIC) SCOPE RULES9CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

ILLUSTRATIONPascal:CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook), Tony Mione(SUNY Korea) and Pearson10

STATIC SCOPING SIMPLEST WAY TO FIND FRAMES OF SURROUNDING SCOPES MAINTAIN A STATIC LINK IN EACH FRAME POINTS TO THE ‘PARENT’ FRAME: THE FRAME OF MOST RECENT INVOCATION OFA LEXICALLY SURROUNDING SUBROUTINE SUBROUTINE DECLARED AT OUTERMOST NESTING WILL HAVE A NULL STATICLINK TO ‘PARENT’ AT RUN TIME SUBROUTINE NESTED K LEVELS DEEP FRAME’S STATIC ‘PARENT’ LINK AND THOSE OF GRANDPARENT, ETC. FORM ASTATIC CHAIN OF LENGTH K AT RUN TIME11CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

ILLUSTRATIONNesting of subroutines:During run time (with links)CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook), Tony Mione(SUNY Korea) and Pearson12

STATIC SCOPING DECLARATION ORDER: SOME EARLY LANGUAGES, (ALGOL 60, LISP, ETC), REQUIRED ALLDECLARATIONS APPEAR AT BEGINNING OF SCOPE PASCAL REQUIREMENT: NAMES MUST BE DECLARED BEFORE USED STILL USES A WHOLE-BLOCK SCOPE (ALSO IMPLEMENTED IN C#) EXAMPLE (C#): DEFINING VARIABLE IN A BLOCK MAKES EVERY EXTERNALDECLARATION HIDDEN THE M N ASSIGNMENT GENERATES A COMPILING ERROR!13CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

DYNAMIC SCOPING DYNAMIC SCOPE RULES BINDINGS DEPEND ON CURRENT STATE OF PROGRAM EXECUTION CANNOT BE RESOLVED BY EXAMINING PROGRAM SOURCE SINCE THEY’REDEPENDENT ON CALLING SEQUENCES BINDING MIGHT DEPEND ON HOW A FUNCTION IS CALLED TO RESOLVE A REFERENCE: USE THE MOST RECENT, ACTIVE BINDING MADE ATRUN TIME14CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

DYNAMIC SCOPING OF BINDINGSEXAMPLE:var total 0def add():total 1def myfunc():var total 0add()add()myfunc()print totalVERY EASY TO IMPLEMENT (STACK OF NAMES)OFTEN HARD TO MAKE EFFICIENTCS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook), Tony Mione(SUNY Korea) and Pearson15

SCOPE RULES DYNAMIC SCOPE RULES USUALLY IN INTERPRETED LANGUAGES EXAMPLES: LISP, PERL, RUBY, C#, THE SHELL LANGUAGES BASH, DASH, ANDPOWERSHELL SUCH LANGUAGES DO NOT ALWAYS HAVE COMPILE TIME TYPE CHECKING TYPE DETERMINATION NOT ALWAYS POSSIBLE WITH DYNAMIC SCOPE RULES16CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

BINDING OF REFERENCEENVIRONMENTS REFERENCE ENVIRONMENT ALL BINDINGS ACTIVE AT A GIVEN TIME TO TAKE A REFERENCE TO A FUNCTION NEED TO DECIDE WHICH REFERENCE ENVIRONMENT TO USE!! DEEP BINDING BINDS ENVIRONMENT AT TIME PROCEDURE IS PASSED AS ANARGUMENT SHALLOW BINDING BINDS ENVIRONMENT AT THE TIME THE PROCEDURE ISACTUALLY CALLED17CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

EXAMPLE: STATIC VS.DYNAMIC SHALLOW VS. DYNAMIC DEEPCS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook), Tony Mione(SUNY Korea) and Pearson18

BINDING OF REFERENCE ENVIRONMENTSx: integer : 1y: integer : 2-DYNAMIC SCOPING WITH DEEP BINDING:-WHEN ADD IS PASSED INTO SECONDENVIRONMENT OF ADD IS x 1, y 3procedure add-THE x IS THE GLOBAL x SO ITx : x yWRITES 4 INTO THE GLOBAL x,-GLOBAL x IS THE ONE PICKED UPprocedure second(P:procedure)BY THE write integerx:integer : 2P()procedure firsty:integer : 3second(add)first()write integer(x)-SHALLOW BINDING:-JUST TRAVERSE UP CALL CHAIN-IT FINDS THE NEAREST VARIABLETHAT CORRESPONS TO THE NAME(THE LOCAL x)-INCREMENTS LOCAL x SOANSWER IS 1CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook), Tony Mione(SUNY Korea) and Pearson19

SCOPE RULES EXAMPLE:STATIC VS. DYNAMICprogram scopes (input,output );var a : integer;procedure first();begina : 1;end;procedure second();var a : integer;beginfirst();end;begina : 2;if read integer() 0second();elsefirst();write(a);end. PROGRAM OUTPUT DEPENDS ON SCOPE RULES IN THE CASE OF DYNAMIC SCOPING, A VALUEREAD AT RUN TIME STATIC SCOPING: THIS PROGRAM PRINTS A 1. DYNAMIC SCOPING: OUTPUT DEPENDS ON VALUE READ BYREAD INTEGER() AT RUN TIME: INPUT IS POSITIVE: THE PROGRAM PRINTS A 2 OTHERWISE: PROGRAM PRINTS A 1 THE ASSIGNMENT TO THE VARIABLE A IN FIRST()REFERS EITHER TO GLOBAL VARIABLE DECLARED IN PROGRAMSCOPES OR TO THE LOCAL VARIABLE DECLARED INSIDESECOND()20CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

SCOPE RULES EXAMPLE: STATIC VS. DYNAMIC STATIC SCOPE RULES REQUIRE REFERENCE TO RESOLVE TO THE MOSTRECENT, COMPILE-TIME BINDING GLOBAL VARIABLE A DYNAMIC SCOPE RULES REQUIRE CHOICE OF THE MOST RECENT, ACTIVEBINDING AT RUN TIME MOST COMMON USE OF DYNAMIC SCOPE RULES MAY BE TO PROVIDEIMPLICIT PARAMETERS TO SUBROUTINES THIS IS CONSIDERED BAD PROGRAMMING PRACTICE TODAY (EXCEPT INFUNCTIONAL LANGUAGES) ALTERNATIVE MECHANISMS EXIST STATIC VARIABLES THAT CAN BE MODIFIED BY AUXILIARY ROUTINES DEFAULT AND OPTIONAL PARAMETERS21CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

SCOPE RULES EXAMPLE: STATIC VS.DYNAMIC AT RUN TIME: CREATE A BINDING FOR A WHEN ENTER MAIN PROGRAMIS ENTERED CREATE ANOTHER BINDING FOR A WHEN CODE ENTERS SECOND() MOST RECENT, ACTIVE BINDING WHEN FIRST() IS EXECUTED SO VARIABLE LOCAL TO SECOND() IS MODIFIED, NOT GLOBAL VARIABLE BUT, WRITE() PRINTS GLOBAL VARIABLE SINCE VARIABLE A LOCAL TOSECOND() IS NO LONGER ACTIVE!22CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

THE MEANING OF NAMES WITHIN A SCOPE ALIASING: TWO NAMES POINT TO THE SAME OBJECT MAKES PROGRAM HARD TO UNDERSTAND MAKES PROGRAM SLOW TO COMPILE23CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

THE MEANING OF NAMES WITHIN A SCOPE ALIASING EXAMPLE PASSING VARIABLE BY REFERENCE TO SUBROUTINE THAT ALSO ACCESSESSAME VARIABLE DIRECTLYdouble sum, sum of squares;.void accumulate(double& x) // x is passed by reference{sum x;sum of squares x * x;}sum passed as an argument to.accumulate(sum);accumulate(), so, sum and xare aliases of one another24CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

THE MEANING OF NAMES WITHIN ASCOPE ALIASING (CONT.): WHAT ARE ALIASES GOOD FOR? SPACE SAVING - MODERN DATA ALLOCATION METHODS ARE BETTER MULTIPLE REPRESENTATIONS - UNIONS ARE BETTER LINKED DATA STRUCTURES – LEGIT USE25CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

THE MEANING OF NAMES WITHIN ASCOPE OVERLOADING: SAME NAME, MORE THAN ONE MEANING SOME OVERLOADING HAPPENS IN ALMOST ALL LANGUAGES INTEGER ‘ ’VS.REAL ‘ ’ READ AND WRITE IN PASCAL METHODS OVERLOADED BASED ON THE NUMBER AND TYPES OF PARAMETERS(DEPENDS ON LANGUAGE). FUNCTION RETURN IN PASCAL SOME LANGUAGES GET INTO OVERLOADING IN A BIG WAY JAVA C 26CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

OVERLOADING & AMBIGUOUS INVOCATIONJava throws compile errorpublic class AmbiguousOverloading{‘max(int,double) is ambiguouspublic static void main(String[] args) {System.out.println(max(1, 2));}public static double max(int num1, double num2) {if (num1 num2)return num1;elsereturn num2;}public static double max(double num1, int num2) {if (num1 num2)return num1;elsereturn num2;}}CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook), Tony Mione(SUNY Korea) and Pearson27

THE MEANING OF NAMES WITHIN ASCOPE WORTH DISTINGUISHING BETWEEN SOME CLOSELY RELATED CONCEPTS: OVERLOADED FUNCTIONS - TWO DIFFERENT METHODS WITH THE SAMENAME. C OVERLOAD NORMint norm (int a) { return a 0 ? a : -a; }complex norm (complex c ) { // . POLYMORPHIC FUNCTIONS - ONE FUNCTION THAT WORKS IN MORE THENONE WAY OVERRIDING IN OO PROGRAMMING GENERIC PROGRAMMING: FUNCTION MIN (A : ARRAY OF INTEGER); GENERIC FUNCTIONS - A SYNTACTIC TEMPLATE THAT CAN BE INSTANTIATED IN MORETHAN ONE WAY AT COMPILE TIME VIA MACRO PROCESSORS IN C (BUILT-IN IN C )28CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

POLYMORPHISM, DYNAMIC BINDINGAND GENERIC PROGRAMMINGpublic class PolymorphismDemo {public static void main(String[] args) {m(new GraduateStudent());m() takes parameter of Object type –m(new Student());can be invoked with any objectm(new Person());m(new Object());}Polymorphism: an object of a subtype can bepublic static void m(Object x) {System.out.println(x.toString());used wherever its super-type value is}required}class GraduateStudent extends Student{ }Dynamic binding: the Java Virtual Machineclass Student extends Person {public String toString() {determines dynamically at runtime whichreturn "Student";implementation is used by the method}}class Person extends Object{When m(Object x) ispublic String toString() {executed, the argument x’s toString()return "Person";}method is invoked}CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook), Tony Mione(SUNY Korea) and Pearson29

DYNAMIC BINDING SUPPOSE AN OBJECT O IS AN INSTANCE OF CLASSES C1, C2, ., CN-1,AND CN C1 IS A SUBCLASS OF C2, C2 IS A SUBCLASS OF C3, ., AND CN-1 IS ASUBCLASS OF CN CN IS MOST GENERAL CLASS; C1 IS MOST SPECIFIC CLASS IF O INVOKES A METHOD P JVM SEARCHES IMPLEMENTATION FOR METHOD P IN C1, C2, ., CN-1 AND CN, INTHIS ORDER, UNTIL FOUND SEARCH STOPS AND FIRST-FOUND IMPLEMENTATION IS INVOKEDSince o is an instance of C1, o is also an instance of C2,C2, , Cn-1, and Cn30CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

DYNAMIC BINDINGpublic class PolymorphismDemo {public static void main(String[] args) {m(new GraduateStudent());m(new Student());m(new Person());m(new Object());}public static void m(Object x) {System.out.println(x.toString());}}class GraduateStudent extends Student { }class Student extends Person {public String toString() {return "Student";}}class Person extends Object {public String toString() {return "Person";}}CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook), Tony Mione(SUNY Korea) and @1234567831

METHOD MATCHING VS. BINDING COMPILER FINDS A MATCHING METHOD AT COMPILATION TIMEACCORDING TO NUMBER OF PARAMETERS PARAMETER TYPES ORDER OF THE PARAMETERS THE JAVA VIRTUAL MACHINE DYNAMICALLY BINDS THEIMPLEMENTATION OF THE METHOD AT RUNTIME [PREVIOUS SLIDE]32CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

BINDING OF REFERENCING ENVIRONMENTS ACCESSING VARIABLES WITH DYNAMIC SCOPE: (1) KEEP A STACK (ASSOCIATION LIST) HOLDS ALL ACTIVE VARIABLES WHEN VARIABLE IS NEEDED, HUNT DOWN FROM TOP OF STACK EQUIVALENT TO SEARCHING ACTIVATION RECORDS ON A DYNAMIC CHAIN (2) KEEP A CENTRAL TABLE WITH ONE SLOT FOR EACH VARIABLE NAME NAMES CANNOT BE CREATED AT RUN TIME: THE TABLE LAYOUT (AND THE LOCATION OF EVERY SLOT) CAN BE FIXED AT COMPILE TIME NAMES CAN BE CREATED AT RUN TIME: NEED A HASH FUNCTION OR OTHER MECHANISM TO DO LOOKUP EVERY SUBROUTINE CHANGES TABLE ENTRIES FOR ITS LOCALS ON ENTRY/EXIT ADD LOCAL VARIABLES ON ENTRY REMOVE LOCAL VARIABLES ON EXIT33CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

BINDING OF REFERENCE ENVIRONMENTS (1) GIVES YOU SLOW ACCESS BUT FAST CALLS (2) GIVES YOU SLOW CALLS BUT FAST ACCESS VARIABLE LOOKUP [DYNAMICALLY-SCOPED] SYMBOL TABLELOOKUP [STATICALLY-SCOPED] STATIC SCOPE RULES USUALLY MORE COMPLICATED DATASTRUCTURE/LOOKUP ALGORITHM ALSO MORE COMPLICATED34CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

SEPARATE COMPILATION SEPARATELY-COMPILED FILES IN C PROVIDE A SORT OF POOR PERSON'SMODULES: RULES FOR HOW VARIABLES WORK ARE MESSY LANGUAGE HAS BEEN JERRY-RIGGED TO MATCH BEHAVIOR OF THE LINKER STATIC ON FUNCTION OR VARIABLE OUTSIDE A FUNCTION USABLE ONLY IN CURRENT SOURCE FILE THIS STATIC IS DIFFERENT FROM STATIC VARIABLES INSIDE A FUNCTION EXTERN ON VARIABLE OR FUNCTION DECLARED IN ANOTHER SOURCE FILE FUNCTION HEADERS WITHOUT BODIES ARE EXTERN BY DEFAULT EXTERN DECLARATIONS INTERPRETED AS FORWARD DECLARATIONS WHENLATER DECLARATION OVERRIDES THEM35CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

SEPARATE COMPILATION SEPARATELY-COMPILED FILES IN C (CONTINUED) VARIABLES OR FUNCTIONS (WITH BODIES) WITHOUT STATIC OR EXTERN EITHER GLOBAL OR COMMON (A FORTRAN TERM) FUNCTIONS AND VARIABLES GIVEN INITIAL VALUES ARE GLOBAL VARIABLES THAT NOT GIVEN INITIAL VALUES ARE COMMON MATCHING COMMON DECLARATIONS IN DIFFERENT FILES REFER TO THESAME VARIABLE ALSO REFER TO THE SAME VARIABLE AS A MATCHING GLOBAL DECLARATION36CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook),Tony Mione (SUNY Korea) and Pearson

MACROSMACROS ARE A WAY OF ASSIGNING A NAME TO SOME SYNTAX.C: TEXTUAL SUBSTITUTION.#define MAX(x, y) (x y ? x : y)BENEFITS:SHORTER CODENO STACKCAN CHOOSE NOT TO EXECUTE SOME OF THE CODEPROBLEMS WITH MACROS:MULTIPLE SIDE EFFECTS: MAX(a , b )BINDING: MAX(1 a, b) - WE HAVE TO CHANGE OUR MACRO TO#define MAX(x, y) ((x) (y) ? (x) : (y))SCOPE CAPTURE: TEMP VAR USED INSIDE MACRO HAS SAME NAMEAS REAL VARCS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook), Tony Mione(SUNY Korea) and Pearson37

QUESTIONS38CS307 : Principles of Programming Languages - (c) Paul Fodor (CS Stony Brook), Tony Mione (SUNY Korea) and Pearson

THIS IS CONSIDERED BAD PROGRAMMING PRACTICE TODAY (EXCEPT IN FUNCTIONAL LANGUAGES) ALTERNATIVE MECHANISMS EXIST STATIC VARIABLES THAT CAN BE MODIFIED BY AUXILIARY ROUTINES DEFAULT AND OPTIONAL PARAMETERS CS307 : Principles of Programming Languages