-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprogramming_languages.lyx
2042 lines (1716 loc) · 46 KB
/
programming_languages.lyx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
#LyX 2.1 created this file. For more info see http://www.lyx.org/
\lyxformat 474
\begin_document
\begin_header
\textclass article
\use_default_options true
\maintain_unincluded_children false
\language english
\language_package default
\inputencoding auto
\fontencoding global
\font_roman default
\font_sans default
\font_typewriter default
\font_math auto
\font_default_family default
\use_non_tex_fonts false
\font_sc false
\font_osf false
\font_sf_scale 100
\font_tt_scale 100
\graphics default
\default_output_format default
\output_sync 0
\bibtex_command default
\index_command default
\paperfontsize default
\spacing single
\use_hyperref true
\pdf_bookmarks true
\pdf_bookmarksnumbered false
\pdf_bookmarksopen false
\pdf_bookmarksopenlevel 1
\pdf_breaklinks true
\pdf_pdfborder true
\pdf_colorlinks false
\pdf_backref false
\pdf_pdfusetitle true
\papersize default
\use_geometry true
\use_package amsmath 1
\use_package amssymb 1
\use_package cancel 1
\use_package esint 1
\use_package mathdots 0
\use_package mathtools 1
\use_package mhchem 1
\use_package stackrel 1
\use_package stmaryrd 1
\use_package undertilde 1
\cite_engine basic
\cite_engine_type default
\biblio_style plain
\use_bibtopic false
\use_indices false
\paperorientation portrait
\suppress_date false
\justification true
\use_refstyle 0
\index Index
\shortcut idx
\color #008000
\end_index
\leftmargin 1in
\topmargin 1in
\rightmargin 1in
\bottommargin 1in
\secnumdepth 3
\tocdepth 1
\paragraph_separation indent
\paragraph_indentation default
\quotes_language english
\papercolumns 1
\papersides 1
\paperpagestyle default
\tracking_changes false
\output_changes false
\html_math_output 0
\html_css_as_file 0
\html_be_strict false
\end_header
\begin_body
\begin_layout Title
Programming Languages
\begin_inset Foot
status collapsed
\begin_layout Plain Layout
\series bold
Disclaimer
\series default
: These notes have been prepared with the
\series bold
only
\series default
purpose to help me pass the Computer Science qualifiying exam at the University
of Illinois at Chicago.
They are distributed as they are (including errors, typos, omissions, etc.)
to help other students pass this exam (and possibly relieving them from
part of the pain associated with such a process).
I take
\series bold
no responsibility
\series default
for the material contained in these notes (which means that you can't sue
me if you don't pass the qual!) Moreover, this pdf version is distributed
together with the original LaTeX (and LyX) sources hoping that someone
else will improve and correct them.
I mean in absolute no way to violate copyrights and/or take credit stealing
the work of others.
The ideas contained in these pages are
\series bold
not mine
\series default
but I've just aggregated information scattered all over the internet.
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareA
like 3.0 Unported License.
\end_layout
\end_inset
\end_layout
\begin_layout Standard
\begin_inset CommandInset toc
LatexCommand tableofcontents
\end_inset
\end_layout
\begin_layout Section
Important programming paradigms
\end_layout
\begin_layout Subsection
Procedural PLs (Imperative)
\end_layout
\begin_layout Description
Sample
\begin_inset space ~
\end_inset
languages: C, ADA, Pascal, ALGOL, ...
\end_layout
\begin_layout Standard
Based on procedures (functions).
Modularity.
\end_layout
\begin_layout Subsection
Object Oriented PLs (Imperative)
\end_layout
\begin_layout Description
Sample
\begin_inset space ~
\end_inset
languages: COBOL, Simula, ADA, Smalltalk, C++, Java, Eiffel...
\end_layout
\begin_layout Standard
They are based on the use of units called objects which are a mixture of
data and methods to manipulate them.
Core features of OOP are:
\emph on
encapsulation
\emph default
,
\emph on
inheritance
\emph default
,
\emph on
polymorphism
\emph default
,
\emph on
dynamic dispatch
\emph default
(runtime decision on the method to execute) and
\emph on
open recursion
\emph default
(this keyword).
\end_layout
\begin_layout Subsection
Functional (Declarative)
\end_layout
\begin_layout Description
Sample
\begin_inset space ~
\end_inset
languages: LISP, ML, Haskell, Erlang,...
\end_layout
\begin_layout Standard
They try to mimic mathematical functions and therefore they DON'T make use
of variables "freeing" the programmer from details related to the memory
space at execution (however this makes them extremely inefficient).
This implies there are NO loops and repetition is achieved through recursion.
Programming is reduced to writing functions while execution consists of
an evaluation of those functions.
\end_layout
\begin_layout Standard
\emph on
Referential transparency
\emph default
: evaluation of the same function with the same parameters always produces
the same result.
\end_layout
\begin_layout Standard
They provide a set of primitive functions, a set of functional forms (i.e.
composition) to construct more complex functions (from the primitive ones),
a function application operation and some structures to hold the data.
\end_layout
\begin_layout Subsection
Logic (Declarative)
\end_layout
\begin_layout Description
Sample
\begin_inset space ~
\end_inset
languages: Prolog,...
\end_layout
\begin_layout Standard
Their approach is to express programs in form of symbolic logic and use
a logical inferencing process to produce results.
Since they are declarative only the specifications of the desired results
are stated rather than detailed procedures to produce them.
\end_layout
\begin_layout Section
Binding
\end_layout
\begin_layout Standard
Programs deal with
\emph on
entities
\emph default
: variables, subprograms, expressions, statements, etc.
All program entities have propertied, called
\emph on
attributes
\emph default
, which characterize them.
\end_layout
\begin_layout Standard
In a general sense, a
\emph on
binding
\emph default
is an association between an
\emph on
attribute
\emph default
(name, scope, value, type,...) and an
\emph on
entity
\emph default
(function, variable,...) or between an operation and a symbol.
\end_layout
\begin_layout Standard
The moment when this association takes place is called
\emph on
binding time
\emph default
.
Bindings can take place at language design time (e.g.
meaning of * symbol), language implementation time (e.g.
name of a variable), compile time (e.g.
overloading of + symbol), link time, load time or run time (e.g.
value of a variable).
\end_layout
\begin_layout Standard
Also, binding can, in some cases, never happen! (e.g.
variable type in assembly) In such a case, it is useful to see the unbound
parameter as optional.
\end_layout
\begin_layout Subsubsection
Static & dynamic binding
\end_layout
\begin_layout Itemize
A binding is
\emph on
static
\emph default
if it occurs before run time and remains unchanged throughout program execution.
\end_layout
\begin_layout Itemize
If a binding first occurs during run time or can change in the course of
program execution, it is called
\emph on
dynamic
\emph default
.
\end_layout
\begin_layout Section
Variables
\end_layout
\begin_layout Standard
A program
\emph on
variable
\emph default
is an abstraction of a computer memory cell or collection of cells.
A variable can be characterized as a sextuple:
\end_layout
\begin_layout Description
Name: the string used to identify the variable.
\end_layout
\begin_layout Description
Type: determines the range of values the variable can have and the set of
operations that are defined for values of the type.
\end_layout
\begin_layout Description
Scope: portion of program where the variable is visible.
\end_layout
\begin_layout Description
Lifetime: time during which the variable is bound to a memory location.
\end_layout
\begin_layout Description
Address
\begin_inset space ~
\end_inset
(or
\begin_inset space ~
\end_inset
l-value): it's the memory location associated with the variable.
When more than one variable name can be used to access a single memory
location, the names are called
\emph on
aliases
\emph default
.
(see overloading)
\end_layout
\begin_layout Description
Value
\begin_inset space ~
\end_inset
(or
\begin_inset space ~
\end_inset
r-value): it's the content of the memory cell (or cells) associated with
the variable.
\end_layout
\begin_layout Standard
A detailed explanation of each one of these elements follows.
\end_layout
\begin_layout Subsection
Names
\end_layout
\begin_layout Standard
A
\emph on
name
\emph default
is a string of characters used to identify some entity in a program.
\end_layout
\begin_layout Subsubsection
Overloading
\end_layout
\begin_layout Standard
We say a name is overloaded when the same name refers to two different entities.
However, the specific occurrence provides enough information for the binding
to be unambiguous.
\end_layout
\begin_layout Standard
Not to be confused with aliasing where two names refer to the same entity.
(see l-value and r-value below)
\end_layout
\begin_layout Subsection
Data types
\end_layout
\begin_layout Standard
The
\emph on
data
\emph default
\emph on
type
\emph default
of a variable determines the range of values the variable can have and
the set of operations that are defined for values of the type.
Before a variable can be referenced in a program, it must be bound to a
data type.
The two important aspects of this binding are
\emph on
how
\emph default
the type is specified and
\emph on
when
\emph default
the binding takes place.
\end_layout
\begin_layout Standard
Note that a language can be also
\emph on
typeless
\emph default
: type is an abstraction which is useful but not necessary.
\end_layout
\begin_layout Standard
Each language provides some p
\emph on
rimitive data types
\emph default
(which usually include: numeric types, Boolean types and character types)
and constructs to assemble user-defined data types.
\end_layout
\begin_layout Subsubsection
Static typing through variable declaration
\end_layout
\begin_layout Standard
An
\emph on
explicit declaration
\emph default
is a statement in a program that lists variable names and specifies that
they are a particular type.
An
\emph on
implicit declaration
\emph default
is a means of associating variables with types through default conventions
instead of declaration statements.
In this case, the first appearance of a variable name in a program constitutes
its implicit declaration.
\begin_inset Foot
status collapsed
\begin_layout Plain Layout
In C and C++, we must sometimes distinguish between declarations and definitions.
Declarations specify types and other attributes but do not cause allocation
of storage.
Definitions specify attributes and cause storage allocations.
\end_layout
\end_inset
\end_layout
\begin_layout Standard
Both explicit and implicit declarations create
\emph on
static bindings
\emph default
to types.
\end_layout
\begin_layout Subsubsection
Dynamic typing
\end_layout
\begin_layout Standard
The variable is bound to a type when it is assigned a value in an assignment
statement.
When the assignment statement is executed, the variable being assigned
is bound to the type of the value, variable, or expression on the right
side of the assignment.
\end_layout
\begin_layout Subsubsection
Comparison between the two strategies
\end_layout
\begin_layout Standard
The primary advantage of dynamic over static binding of variables to types
is that it provides a great deal of
\emph on
programming flexibility
\emph default
.
\end_layout
\begin_layout Standard
There are two disadvantages to dynamic type binding.
\end_layout
\begin_layout Standard
First, the error detection (type checking) capability of the compiler is
diminished compared to a compiler for a language with static bindings,
because any two types can appear at opposite sides of the assignment operator.
\end_layout
\begin_layout Standard
Second, the cost of implementing dynamic attribute binding is considerable,
particularly in execution time, since type checking must be done at run
time.
\end_layout
\begin_layout Subsection
Type checking
\end_layout
\begin_layout Standard
\emph on
Type checking
\emph default
is the activity of ensuring that the operands of an operator (including
subprograms and assignment statements) are compatible types.
A
\emph on
compatible
\emph default
type is one that is either legal for the operator or is allowed under language
rules to be implicitly converted by compiler-generated code to a legal
type.
This automatic conversion is called a
\emph on
coercion
\emph default
.
A type error is the application of an operator to an operand of an inappropriat
e type.
\end_layout
\begin_layout Subsubsection
Strong typing
\end_layout
\begin_layout Standard
We define a programming language to be
\emph on
strongly typed
\emph default
if type errors are always detected.
This requires that:
\end_layout
\begin_layout Itemize
each name in a program in the language has a single type associated with
it, and that type is known at compile time.
(i.e.
all the types are statically bound)
\end_layout
\begin_layout Itemize
the types of all operands can be determined, either at compile time or at
run time.
\end_layout
\begin_layout Subsubsection
Compatibility
\end_layout
\begin_layout Standard
There are two different compatibility methods:
\end_layout
\begin_layout Description
Name
\begin_inset space ~
\end_inset
type
\begin_inset space ~
\end_inset
compatibility means that two variables have compatible types only if they
are in either the same declaration or in declarations that use the same
type names.
This is easy to implement but is highly restrictive.
\end_layout
\begin_layout Description
Structure
\begin_inset space ~
\end_inset
type
\begin_inset space ~
\end_inset
compatibility means that two variables have compatible types if their types
have identical structures.
This is more flexible but is more difficult to implement.
\end_layout
\begin_layout Subsection
Scope
\end_layout
\begin_layout Standard
The
\emph on
scope
\emph default
of a variable is the range of statements over which it is visible.
A variable is visible in a statement if it can be referenced in that statement.
A
\emph on
referencing environment
\emph default
is the collection of all names that are visible in the statement.
\end_layout
\begin_layout Standard
We have two types of scope:
\end_layout
\begin_layout Description
Static: their scope of the variable can be determined before the execution
starts.
The referencing environment for a statement is made of all the local variables
plus all the variables in the static ancestors.
\end_layout
\begin_deeper
\begin_layout Labeling
\labelwidthstring 00.00.0000
Cons: too many functions/data are visible to children procedures, hard restructu
ring of code
\end_layout
\begin_layout Labeling
\labelwidthstring 00.00.0000
Pros: easy to read, local variable hidden, higher reliability
\end_layout
\end_deeper
\begin_layout Description
Dynamic: the scope is determined by the calling sequence of subprograms.
The referencing environment for a statement is made of all the local variables
plus all the visible variables in all active subprograms.
(a subprogram is active if its execution has begun but has not yet terminated)
\end_layout
\begin_deeper
\begin_layout Labeling
\labelwidthstring 00.00.0000
Cons: no static type check, low readability, longer access to non-locals
(chain lookup)
\end_layout
\begin_layout Labeling
\labelwidthstring 00.00.0000
Pros: variables in the caller are implicitly visible in the called
\end_layout
\end_deeper
\begin_layout Standard
Note that, for both static and dynamic scoping, the most specific variable
overrides the less specific.
\end_layout
\begin_layout Subsection
Lifetime
\end_layout
\begin_layout Standard
The
\emph on
lifetime
\emph default
of a variable is the time during which it is bound to a particular memory
cell, that is, the time between it's
\emph on
allocation
\emph default
and
\emph on
deallocation
\emph default
.
\end_layout
\begin_layout Standard
To investigate storage bindings of variables, it is convenient to separate
scalar variables into four categories:
\end_layout
\begin_layout Description
Static Static variables are those that are bound to a memory cell before
program execution begins.
(
\family typewriter
static
\family default
variables in C, C++ and Java).
\end_layout
\begin_layout Description
Stack-dynamic Stack-dynamic variables are those whose storage bindings are
created when their declaration statements are elaborated, but whose types
are statically bound.
(local variables in C)
\end_layout
\begin_layout Description
Explicit
\begin_inset space ~
\end_inset
Heap-dynamic Explicit Heap-dynamic variables are nameless (abstract) memory
cells that are allocated and deallocated by explicit directives, specified
by the programmer.
These variables, which are allocated from and deallocated to the heap,
can only be referenced through pointer or reference variables (objects
in Java,
\family typewriter
new
\family default
and
\family typewriter
delete
\family default
in C++)
\end_layout
\begin_layout Description
Implicit
\begin_inset space ~
\end_inset
Heap-dynamic: Implicit Heap-dynamic variables are bound to heap storage
only when they are assigned values.
In fact, all their attributes are bound every time they are assigned: in
a sense, they are just names that adapt to whatever use they are asked
to serve.
(variables in JavaScript and all the major scripting languages)
\end_layout
\begin_layout Subsubsection
Scoping and lifetime
\end_layout
\begin_layout Standard
The scope and the lifetime of a variable are clearly not the same because
static scope is a textual, or spatial, concept whereas lifetime is a temporal
concept.
This means you can't compare them!
\end_layout
\begin_layout Subsection
l-value and r-value
\end_layout
\begin_layout Standard
The
\emph on
l-value
\emph default
of a variable (or its
\emph on
address
\emph default
) is the memory address (i.e.
the storage area) with which it is associated.
\end_layout
\begin_layout Standard
The
\emph on
r-value
\emph default
(or simply
\emph on
value
\emph default
) is the actual data that is stored in such a memory location.
\end_layout
\begin_layout Subsubsection
Aliases
\end_layout
\begin_layout Standard
When more than one variable name can be used to access a single memory address,
the names are called
\emph on
aliases
\emph default
.
Aliases decrease readability of programs and allow variables to be changed
by manipulation of other variables.
\end_layout
\begin_layout Section
Subprograms
\end_layout
\begin_layout Standard
A
\emph on
subprogram
\emph default
(also called
\emph on
subroutine
\emph default
,
\emph on
procedure
\emph default
,
\emph on
method
\emph default
,
\emph on
function
\emph default
, or
\emph on
routine
\emph default
) is a portion of code within a larger program that performs a specific
task and is relatively independent of the remaining code.
A subprogram can be characterized as a 5-tuple:
\end_layout
\begin_layout Description
Name: the string used to identify the subprogram.
\end_layout
\begin_layout Description
Scope: generally each subprogram has its scope (for other statements to
reference them) and is also allowed to define its own variables (local
variables), thereby defining its own local referencing environment.
\end_layout
\begin_layout Description
l-value: it's the memory location associated with the subprogram.
This is used by those languages that allow pointers to subprograms.
\end_layout
\begin_layout Description
r-value: the executable statements of the subprogram.
\end_layout
\begin_layout Description
Signature: the input parameters and return types of the subprogram.
\end_layout
\begin_layout Subsection
Parameter passing
\end_layout
\begin_layout Standard
The parameters in the subprogram header are called
\emph on
formal parameters
\emph default
.
When a subprogram is called, a list of parameters to be bound to the formal
parameters of the subroutine, is required: these are called
\emph on
actual parameters
\emph default
.
There are two ways the binding can take place:
\end_layout
\begin_layout Description
positional
\begin_inset space ~
\end_inset
parameters, in which the first actual parameter is bound to the first formal
parameter and so on, and
\end_layout
\begin_layout Description
keyword
\begin_inset space ~
\end_inset
parameters, where the name of the formal parameter to which an actual parameter
is to be bound, is specified with the actual parameter.
\end_layout
\begin_layout Standard
There are three semantics models to transfer parameters to a subprogram:
\emph on
in mode
\emph default
,
\emph on
out mode
\emph default
and
\emph on
in-out mode
\emph default
.
There are also two conceptual models of how data transfers take place:
either the
\emph on
actual value
\emph default
is physically moved or an
\emph on
access path
\emph default
to the data is transmitted.
The previous can be combined in various ways, yielding to the following
parameter passing methods:
\end_layout
\begin_layout Description
Pass-by-value: the value of the actual parameter is used to initialize the
corresponding formal parameter, which then acts as a local variable in
the subprogram.
Main disadvantages: could require expensive physical move.
Also, if a function is passed as parameter it needs to be evaluated and,
if the function never returns, the call will never be executed.
\end_layout
\begin_layout Description
Pass-by-result: the formal parameter acts as a local variable and, right
before the control is transferred back to the caller, its value is passed
back to the caller.
Main disadvantages: same as pass-by-value, assignment ordering problem
(e.g.
\family typewriter
sub(p1,p1)
\family default
)
\end_layout
\begin_layout Description
Pass-by-value-result: combination of the previous two...
\end_layout
\begin_layout Description
Pass-by-reference: transmits an access path, usually the variable address,
to the called program.
\begin_inset Foot
status collapsed