1 CS 163 Data Structures Chapter 12 Side Effects Herbert G. Mayer, PSU Status 5/11/2015.

12
1 CS 163 Data Structures Chapter 12 Side Effects Herbert G. Mayer, PSU Herbert G. Mayer, PSU Status 5/11/2015 Status 5/11/2015

Transcript of 1 CS 163 Data Structures Chapter 12 Side Effects Herbert G. Mayer, PSU Status 5/11/2015.

Page 1: 1 CS 163 Data Structures Chapter 12 Side Effects Herbert G. Mayer, PSU Status 5/11/2015.

1

CS 163Data Structures

Chapter 12Side Effects

Herbert G. Mayer, PSUHerbert G. Mayer, PSUStatus 5/11/2015Status 5/11/2015

Page 2: 1 CS 163 Data Structures Chapter 12 Side Effects Herbert G. Mayer, PSU Status 5/11/2015.

2

Syllabus

Side EffectsSide Effects

Language and Side EffectLanguage and Side Effect

Sample Side EffectSample Side Effect

ReferencesReferences

Page 3: 1 CS 163 Data Structures Chapter 12 Side Effects Herbert G. Mayer, PSU Status 5/11/2015.

3

Side EffectsSide EffectsSide Effects in an executing imperative program are: in an executing imperative program are:

Actions performed by a function Changing the program state In a way that is generally surprising Due to their unnatural location or time! – loaded term! As a consequence, side effects are hard to track, their impact

difficult to account for, and programs generating them are hard to maintain

What Side Effects are NOT!What Side Effects are NOT! These changes are not caused by agents other than the

programmer; instead you/the programmer put them there for a reason, sometimes good reasons

Side effects are not bad per se! Functional languages: designed to be free from side effects!

Page 4: 1 CS 163 Data Structures Chapter 12 Side Effects Herbert G. Mayer, PSU Status 5/11/2015.

4

Side EffectsWhy do side effects occur? Why are they practiced?Why do side effects occur? Why are they practiced?

For “convenience” lumped together with action proper of a function

For efficiency, to avoid invoking another, separate function Fair to say: They are frequently just short-cuts

How to avoid Side Effects?How to avoid Side Effects? Either use a functional language, or Assuming the impact of the Side Effect is needed: Separate the Side Effect out in an imperative language, thus

simulating the behaviour/constraint of a functional language

Why avoid Side Effects?Why avoid Side Effects? A program written with Side Effects, no matter how well designed,

is more difficult to read --harder to maintain– than a program without Side Effects

But watch out for ‘snake-oil” propaganda : The work of the Side Effect has to be accomplished somehow

Page 5: 1 CS 163 Data Structures Chapter 12 Side Effects Herbert G. Mayer, PSU Status 5/11/2015.

5

Language and Side Effect

Imperative languages (e.g. C++) generally encourage Imperative languages (e.g. C++) generally encourage side effectsside effects Underlying compute model is Turing Machine Side Effect means: a change in machine/program state Enabled by references to, and changes of, global objects Can change globals directly, or indirectly via reference

parameters or pointers Can change files, state, condition codes, any machine

resource Languages prone to side effects: Fortran, PL/I, Pascal, Ada,

C, C++

Page 6: 1 CS 163 Data Structures Chapter 12 Side Effects Herbert G. Mayer, PSU Status 5/11/2015.

6

Language and Side EffectCan be worse (more obscure) in languages other than C/C++Can be worse (more obscure) in languages other than C/C++

More complex languages with nested procedural scope offer even more chances for side effects; C has no lexically nested functions

E.g. PL/I, Ada, Pascal, Modula-2, Algol-60, Algol68, …

How do Functional languages Avoid Side Effects?How do Functional languages Avoid Side Effects? Underlying compute model generally is Lambda Calculus One goal is to eliminate side effect E.g. Haskell, ML, Prolog, …

CaveatCaveat Watch out for PR! The language proponents generally have an

agenda, maybe even a noble one. But don’t be fooled like people are with Global Warming propaganda to justify added taxation

Functional language are not inherently better, just because they reduce chances for side effects; they are different, have pros and cons

Imperative languages with nested procedural scope are not inherently better, just because they allow better data sharing

Page 7: 1 CS 163 Data Structures Chapter 12 Side Effects Herbert G. Mayer, PSU Status 5/11/2015.

7

Sample Side Effect#include <stdio.h>#include <stdio.h>#define MAX 10#define MAX 10 // arbitrary array bound// arbitrary array bound

int global_i = 5;int global_i = 5; // arbitrary number within array bounds// arbitrary number within array boundsint arr[ ] = { 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 };int arr[ ] = { 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 };

int one()int one() // bad function with side effect// bad function with side effect{ // one{ // one

global_i++;global_i++;return 1;return 1;

} //end one} //end one

void print()void print(){ // print{ // print

for ( int i = 0; i < MAX; i++ ) {for ( int i = 0; i < MAX; i++ ) {printf( "arr[%d] = %2d\n", i, arr[ i ] );printf( "arr[%d] = %2d\n", i, arr[ i ] );

} //end for} //end for} //end print} //end print

int main()int main(){ // main{ // main

arr[ one() + global_i ] = arr[ one() + global_i ];arr[ one() + global_i ] = arr[ one() + global_i ];print();print();

} //end main} //end main

Page 8: 1 CS 163 Data Structures Chapter 12 Side Effects Herbert G. Mayer, PSU Status 5/11/2015.

8

Sample Side Effect, Output

arr[0] = 0arr[0] = 0arr[1] = 1arr[1] = 1arr[2] = 4arr[2] = 4arr[3] = 9arr[3] = 9arr[4] = 16arr[4] = 16arr[5] = 25arr[5] = 25arr[6] = 36arr[6] = 36arr[7] = 64 arr[7] = 64 element arr[ 7 ] overridden with arr[ 8 ] element arr[ 7 ] overridden with arr[ 8 ]arr[8] = 64arr[8] = 64arr[9] = 81arr[9] = 81

Page 9: 1 CS 163 Data Structures Chapter 12 Side Effects Herbert G. Mayer, PSU Status 5/11/2015.

9

Sample Side Effect, Output

arr[ one() + global_i ]arr[ one() + global_i ]= arr[ one() + global_i ]= arr[ one() + global_i ]= arr[ one() + global_i ];= arr[ one() + global_i ];

For the following assignment, what is the output:For the following assignment, what is the output:

Page 10: 1 CS 163 Data Structures Chapter 12 Side Effects Herbert G. Mayer, PSU Status 5/11/2015.

10

Sample Side Effect, Output

arr[0] = 0arr[0] = 0arr[1] = 1arr[1] = 1arr[2] = 4arr[2] = 4arr[3] = 9arr[3] = 9arr[4] = 16arr[4] = 16arr[5] = 25arr[5] = 25arr[6] = 36arr[6] = 36arr[7] = 81 arr[7] = 81 element arr[ 7 ] overridden with arr[ 9 ] element arr[ 7 ] overridden with arr[ 9 ]arr[8] = 81 arr[8] = 81 element arr[ 8 ] overridden with arr[ 9 ] element arr[ 8 ] overridden with arr[ 9 ]arr[9] = 81arr[9] = 81

Page 11: 1 CS 163 Data Structures Chapter 12 Side Effects Herbert G. Mayer, PSU Status 5/11/2015.

11

Sample Side EffectWas the correct element overridden?Was the correct element overridden?

Was the right element referenced?Was the right element referenced?

Which language rule should apply?Which language rule should apply?

Must left-hand side of assignment operator = be Must left-hand side of assignment operator = be evaluated first? Or the right-hand side? And every evaluated first? Or the right-hand side? And every part of it?part of it?

Should the function Should the function main()main() be allowed to change be allowed to change global_iglobal_i or any other global? or any other global?

Did the programmer do something wrong?Did the programmer do something wrong?

Page 12: 1 CS 163 Data Structures Chapter 12 Side Effects Herbert G. Mayer, PSU Status 5/11/2015.

12

References1.1. Side effect: Side effect:

http://en.wikipedia.org/wiki/Side_effect_(computer_shttp://en.wikipedia.org/wiki/Side_effect_(computer_science)cience)

2.2. Functional language: Functional language: http://en.wikipedia.org/wiki/List_of_programming_lahttp://en.wikipedia.org/wiki/List_of_programming_languages_by_category#Functional_languagesnguages_by_category#Functional_languages

3.3. Turing Machine: Turing Machine: http://plato.stanford.edu/entries/turing-machine/http://plato.stanford.edu/entries/turing-machine/

4.4. Functional vs. Imperative: Functional vs. Imperative: https://msdn.microsoft.com/en-us/library/bb669144.ahttps://msdn.microsoft.com/en-us/library/bb669144.aspxspx