Language Systems

Language Systems
Chapter Four
Modern Programming Languages, 2nd ed.
1
Outline
n
The classical sequence
n
Variations on the classical sequence
n
Binding times
n
Debuggers
n
Runtime support
Chapter Four
Modern Programming Languages, 2nd ed.
2
The Classical Sequence
n
Integrated development environments are
wonderful, but…
n
Old-fashioned, un-integrated systems make the
steps involved in running a program more clear
n
We will look the classical sequence of steps
involved in running a program
n
(The example is generic: details vary from
machine to machine)
Chapter Four
Modern Programming Languages, 2nd ed.
3
Creating
n
The programmer uses an editor to create a text file
containing the program
n
A high-level language: machine independent
n
This C-like example program calls 
fred
 100
times, passing each 
i
 from 1 to 100:
Chapter Four
Modern Programming Languages, 2nd ed.
4
int i;
void main() { 
  for (i=1; i<=100; i++)
    fred(i);
}
Compiling
n
Compiler translates to assembly language
n
Machine-specific
n
Each line represents either a piece of data,
or a single machine-level instruction
n
Programs used to be written directly in
assembly language, before Fortran (1957)
n
Now used directly only when the compiler
does not do what you want, which is rare
Chapter Four
Modern Programming Languages, 2nd ed.
5
Chapter Four
Modern Programming Languages, 2nd ed.
6
int i;
void main() { 
  for (i=1; i<=100; i++)
    fred(i);
}
i:     data word 0
main:  move 1 to i
t1:    compare i with 100
       jump to t2 if greater
       push i
       call fred
       add 1 to i
       go to t1
t2:    return
compiler
Assembling
n
Assembly language is still not directly
executable
Still text format, readable by people
Still has names, not memory addresses
n
Assembler converts each assembly-
language instruction into the machine’s
binary format: its 
machine language
n
Resulting object file not readable by people
Chapter Four
Modern Programming Languages, 2nd ed.
7
Chapter Four
Modern Programming Languages, 2nd ed.
8
i:     data word 0
main:  move 1 to i
t1:    compare i with 100
       jump to t2 if greater
       push i
       call fred
       add 1 to i
       go to t1
t2:    return
assembler
 
Linking
n
Object file 
still
 not directly executable
Missing some parts
Still has some names
Mostly machine language, but not entirely
n
Linker collects and combines all the different parts
n
In our example, 
fred
 was compiled separately,
and may even have been written in a different
high-level language
n
Result is the executable file
Chapter Four
Modern Programming Languages, 2nd ed.
9
Chapter Four
Modern Programming Languages, 2nd ed.
10
linker
 
 
Loading
n
“Executable” file 
still
 not directly
executable
Still has some names
Mostly machine language, but not entirely
n
Final step: when the program is run, the
loader loads it into memory and replaces
names with addresses
Chapter Four
Modern Programming Languages, 2nd ed.
11
A Word About Memory
n
For our example, we are assuming a very simple
kind of memory architecture
n
Memory organized as an array of bytes
n
Index of each byte in this array is its 
address
n
Before loading, language system does not know
where in this array the program will be placed
n
Loader finds an address for every piece and
replaces names with addresses
Chapter Four
Modern Programming Languages, 2nd ed.
12
Chapter Four
Modern Programming Languages, 2nd ed.
13
loader
 
 
 
Running
n
After loading, the program is entirely
machine language
All names have been replaced with memory
addresses
n
Processor begins executing its instructions,
and the program runs
Chapter Four
Modern Programming Languages, 2nd ed.
14
The Classical Sequence
Chapter Four
Modern Programming Languages, 2nd ed.
15
 
editor
compiler
assembler
loader
linker
source
file
assembly-
language file
object
file
executable
file
running program
in memory
About Optimization
n
Code generated by a compiler is usually
optimized
 to make it faster, smaller, or both
n
Other optimizations may be done by the
assembler, linker, and/or loader
n
A misnomer: the resulting code is better,
but not guaranteed to be optimal
Chapter Four
Modern Programming Languages, 2nd ed.
16
Example
n
Original code:
n
Improved code, with loop invariant moved:
Chapter Four
Modern Programming Languages, 2nd ed.
17
int i = 0;
while (i < 100) {
  a[i++] = x*x*x;
}
int i = 0;
int temp = x*x*x;
while (i < 100) {
  a[i++] = temp;
}
Example
n
Loop invariant removal is handled by most
compilers
n
That is, most compilers generate the same
efficient code from both of the previous
examples
n
So it is a waste of the programmer’s time to
make the transformation manually
Chapter Four
Modern Programming Languages, 2nd ed.
18
Other Optimizations
n
Some, like LIR, add variables
n
Others remove variables, remove code, add
code, move code around, etc.
n
All make the connection between source
code and object code more complicated
n
A simple question, such as “What assembly
language code was generated for this
statement?” may have a complicated answer
Chapter Four
Modern Programming Languages, 2nd ed.
19
Outline
n
The classical sequence
n
Variations on the classical sequence
n
Binding times
n
Debuggers
n
Runtime support
Chapter Four
Modern Programming Languages, 2nd ed.
20
Variation: Hiding The Steps
n
Many language systems make it possible to do the
compile-assemble-link part with one command
n
Example: 
gcc
 command on a Unix system:
Chapter Four
Modern Programming Languages, 2nd ed.
21
gcc main.c
gcc main.c –S
as main.s –o main.o
ld …
 
Compile, then assemble,
then link
Compile-assemble-link
Compiling to Object Code
n
Many modern compilers incorporate all the
functionality of an assembler
n
They generate object code directly
Chapter Four
Modern Programming Languages, 2nd ed.
22
Variation: Integrated
Development Environments
n
A single interface for editing, running and
debugging programs
n
Integration can add power at every step:
Editor knows language syntax
System may keep a database of source code (not
individual text files) and object code
System may maintain versions, coordinate
collaboration
Rebuilding after incremental changes can be
coordinated, like Unix 
make
 but language-specific
Debuggers can benefit (more on this in a minute…)
Chapter Four
Modern Programming Languages, 2nd ed.
23
Variation: Interpreters
n
To 
interpret
 a program is to carry out the steps it
specifies, without first translating into a lower-
level language
n
Interpreters are usually much slower
Compiling takes more time up front, but program runs
at hardware speed
Interpreting starts right away, but each step must be
processed in software
n
Sounds like a simple distinction…
Chapter Four
Modern Programming Languages, 2nd ed.
24
Virtual Machines
n
A language system can produce code in a machine
language for which there is no hardware: an
intermediate code
n
Virtual machine must be simulated in software –
interpreted, in fact
n
Language system may do the whole classical
sequence, but then interpret the resulting
intermediate-code program
n
Why?
Chapter Four
Modern Programming Languages, 2nd ed.
25
Why Virtual Machines
n
Cross-platform execution
Virtual machine can be implemented in
software on many different platforms
Simulating physical machines is harder
n
Heightened security
Running program is never directly in charge
Interpreter can intervene if the program tries to
do something it shouldn’t
Chapter Four
Modern Programming Languages, 2nd ed.
26
The Java Virtual Machine
n
Java languages systems usually compile to
code for a virtual machine: the JVM
n
JVM language is sometimes called 
bytecode
n
Bytecode interpreter is part of almost every
Web browser
n
When you browse a page that contains a
Java applet, the browser runs the applet by
interpreting its bytecode
Chapter Four
Modern Programming Languages, 2nd ed.
27
Intermediate Language Spectrum
n
Pure interpreter
Intermediate language = high-level language
n
Tokenizing interpreter
Intermediate language = token stream
n
Intermediate-code compiler
Intermediate language = virtual machine language
n
Native-code compiler
Intermediate language = physical machine language
Chapter Four
Modern Programming Languages, 2nd ed.
28
Delayed Linking
n
Delay linking step
n
Code for library functions is not included in
the executable file of the calling program
Chapter Four
Modern Programming Languages, 2nd ed.
29
Delayed Linking: Windows
n
Libraries of functions for delayed linking are
stored in 
.dll
 files: dynamic-link library
n
Many language systems share this format
n
Two flavors
Load-time dynamic linking
n
Loader finds 
.dll
 files (which may already be in memory)
and links the program to functions it needs, just before running
Run-time dynamic linking
n
Running program makes explicit system calls to find 
.dll
files and load specific functions
Chapter Four
Modern Programming Languages, 2nd ed.
30
Delayed Linking: Unix
n
Libraries of functions for delayed linking are
stored in 
.so
 files: shared object
n
Suffix 
.so
 followed by version number
n
Many language systems share this format
n
Two flavors
Shared libraries
n
Loader links the program to functions it needs before running
Dynamically loaded libraries
n
Running program makes explicit system calls to find library
files and load specific functions
Chapter Four
Modern Programming Languages, 2nd ed.
31
Delayed Linking: Java
n
JVM automatically loads and links classes
when a program uses them
n
Class loader does a lot of work:
May load across Internet
Thoroughly checks loaded code to make sure it
complies with JVM requirements
Chapter Four
Modern Programming Languages, 2nd ed.
32
Delayed Linking Advantages
n
Multiple programs can share a copy of
library functions: one copy on disk and in
memory
n
Library functions can be updated
independently of programs: all programs
use repaired library code next time they run
n
Can avoid loading code that is never used
Chapter Four
Modern Programming Languages, 2nd ed.
33
Profiling
n
The classical sequence runs twice
n
First run of the program collects statistics:
parts most frequently executed, for example
n
Second compilation uses this information to
help generate better code
Chapter Four
Modern Programming Languages, 2nd ed.
34
Dynamic Compilation
n
Some compiling takes place after the program
starts running
n
Many variations:
Compile each function only when called
Start by interpreting, compile only those pieces that are
called frequently
Compile roughly at first (for instance, to intermediate
code); spend more time on frequently executed pieces
(for instance, compile to native code and optimize)
n
Just-in-time (JIT) compilation
Chapter Four
Modern Programming Languages, 2nd ed.
35
Outline
n
The classical sequence
n
Variations on the classical sequence
n
Binding times
n
Debuggers
n
Runtime support
Chapter Four
Modern Programming Languages, 2nd ed.
36
Binding
n
Binding means associating two things—
especially, associating some property with an
identifier from the program
n
In our example program:
What set of values is associated with 
int
?
What is the type of 
fred
?
What is the address of the object code for 
main
?
What is the value of 
i
?
Chapter Four
Modern Programming Languages, 2nd ed.
37
int i;
void main() { 
  for (i=1; i<=100; i++)
    fred(i);
}
Binding Times
n
Different bindings take place at different times
n
There is a standard way of describing binding
times with reference to the classical sequence:
Language definition time
Language implementation time
Compile time
Link time
Load time
Runtime
Chapter Four
Modern Programming Languages, 2nd ed.
38
Language Definition Time
n
Some properties are bound when the
language is defined:
Meanings of keywords: 
void
, 
for
, etc.
Chapter Four
Modern Programming Languages, 2nd ed.
39
int i;
void main() { 
  for (i=1; i<=100; i++)
    fred(i);
}
Language Implementation Time
n
Some properties are bound when the language
system is written:
range of values of type 
int
 in C (but in Java, these are
part of the language definition)
implementation limitations: max identifier length, max
number of array dimensions, etc
Chapter Four
Modern Programming Languages, 2nd ed.
40
int i;
void main() { 
  for (i=1; i<=100; i++)
    fred(i);
}
Compile Time
n
Some properties are bound when the program is
compiled or prepared for interpretation:
Types of variables, in languages like C and ML that use
static typing
Declaration that goes with a given use of a variable, in
languages that use static scoping (most languages)
Chapter Four
Modern Programming Languages, 2nd ed.
41
int i;
void main() { 
  for (i=1; i<=100; i++)
    fred(i);
}
Link Time
n
Some properties are bound when separately-
compiled program parts are combined into
one executable file by the linker:
Object code for external function names
Chapter Four
Modern Programming Languages, 2nd ed.
42
int i;
void main() { 
  for (i=1; i<=100; i++)
    fred(i);
}
Load Time
n
Some properties are bound when the program is
loaded into the computer’s memory, but before it
runs:
Memory locations for code for functions
Memory locations for static variables
Chapter Four
Modern Programming Languages, 2nd ed.
43
int i;
void main() { 
  for (i=1; i<=100; i++)
    fred(i);
}
Run Time
n
Some properties are bound only when the code in
question is executed:
Values of variables
Types of variables, in languages like Lisp that use
dynamic typing
Declaration that goes with a given use of a variable (in
languages that use dynamic scoping)
n
Also called 
late
 or 
dynamic
 binding (everything
before run time is 
early
 or 
static
)
Chapter Four
Modern Programming Languages, 2nd ed.
44
Late Binding, Early Binding
n
The most important question about a
binding time: late or early?
Late: generally, this is more flexible at runtime
(as with types, dynamic loading, etc.)
Early: generally, this is faster and more secure
at runtime (less to do, less that can go wrong)
n
You can tell a lot about a language by
looking at the binding times
Chapter Four
Modern Programming Languages, 2nd ed.
45
Outline
n
The classical sequence
n
Variations on the classical sequence
n
Binding times
n
Debuggers
n
Runtime support
Chapter Four
Modern Programming Languages, 2nd ed.
46
Debugging Features
n
Examine a snapshot, such as a core dump
n
Examine a running program on the fly
Single stepping, breakpointing, modifying variables
n
Modify currently running program
Recompile, relink, reload parts while program runs
n
Advanced debugging features require an
integrated development environment
Chapter Four
Modern Programming Languages, 2nd ed.
47
Debugging Information
n
Where is it executing?
n
What is the traceback of calls leading there?
n
What are the values of variables?
n
Source-level information from machine-level code
Variables and functions by name
Code locations by source position
n
Connection between levels can be hard to
maintain, for example because of optimization
Chapter Four
Modern Programming Languages, 2nd ed.
48
Outline
n
The classical sequence
n
Variations on the classical sequence
n
Binding times
n
Debuggers
n
Runtime support
Chapter Four
Modern Programming Languages, 2nd ed.
49
Runtime Support
n
Additional code the linker includes even if the
program does not refer to it explicitly
Startup processing: initializing the machine state
Exception handling: reacting to exceptions
Memory management: allocating memory, reusing it
when the program is finished with it
Operating system interface: communicating between
running program and operating system for I/O, etc.
n
An important hidden player in language systems
Chapter Four
Modern Programming Languages, 2nd ed.
50
Conclusion
n
Language systems implement languages
n
Today: a quick introduction
n
More implementation issues later,
especially:
Chapter 12: memory locations for variables
Chapter 14: memory management
Chapter 18: parameters
Chapter 21: cost models
Chapter Four
Modern Programming Languages, 2nd ed.
51
Slide Note
Embed
Share

Explore the classical sequence of running a program, from creating code in a high-level language to compiling it into machine-specific assembly language, and the role of integrated development environments. Discover insights into modern programming languages and the evolving process of developing and executing code efficiently.

  • Programming Languages
  • Modern Programming
  • Integrated Development Environments
  • Classical Sequence
  • Compilation

Uploaded on Apr 18, 2024 | 6 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author.If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

You are allowed to download the files provided on this website for personal or commercial use, subject to the condition that they are used lawfully. All files are the property of their respective owners.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author.

E N D

Presentation Transcript


  1. Language Systems Chapter Four Modern Programming Languages, 2nd ed. 1

  2. Outline The classical sequence Variations on the classical sequence Binding times Debuggers Runtime support Chapter Four Modern Programming Languages, 2nd ed. 2

  3. The Classical Sequence Integrated development environments are wonderful, but Old-fashioned, un-integrated systems make the steps involved in running a program more clear We will look the classical sequence of steps involved in running a program (The example is generic: details vary from machine to machine) Chapter Four Modern Programming Languages, 2nd ed. 3

  4. Creating The programmer uses an editor to create a text file containing the program A high-level language: machine independent This C-like example program calls fred 100 times, passing each i from 1 to 100: int i; void main() { for (i=1; i<=100; i++) fred(i); } Chapter Four Modern Programming Languages, 2nd ed. 4

  5. Compiling Compiler translates to assembly language Machine-specific Each line represents either a piece of data, or a single machine-level instruction Programs used to be written directly in assembly language, before Fortran (1957) Now used directly only when the compiler does not do what you want, which is rare Chapter Four Modern Programming Languages, 2nd ed. 5

  6. int i; void main() { for (i=1; i<=100; i++) fred(i); } i: data word 0 main: move 1 to i t1: compare i with 100 jump to t2 if greater push i call fred add 1 to i go to t1 t2: return compiler Chapter Four Modern Programming Languages, 2nd ed. 6

  7. Assembling Assembly language is still not directly executable Still text format, readable by people Still has names, not memory addresses Assembler converts each assembly- language instruction into the machine s binary format: its machine language Resulting object file not readable by people Chapter Four Modern Programming Languages, 2nd ed. 7

  8. i: data word 0 main: move 1 to i t1: compare i with 100 jump to t2 if greater push i call fred add 1 to i go to t1 t2: return i: 0 main: xxxx i xx i x xxxxxx xxxx i x fred xxxx i xxxxxx xxxxxx assembler Chapter Four Modern Programming Languages, 2nd ed. 8

  9. Linking Object file still not directly executable Missing some parts Still has some names Mostly machine language, but not entirely Linker collects and combines all the different parts In our example, fred was compiled separately, and may even have been written in a different high-level language Result is the executable file Chapter Four Modern Programming Languages, 2nd ed. 9

  10. i: 0 i: 0 main: xxxx i xx i x xxxxxx xxxx i x fred xxxx i xxxxxx xxxxxx main: xxxx i xx i x xxxxxx xxxx i x fred xxxx i xxxxxx xxxxxx linker fred: xxxxxx xxxxxx xxxxxx Chapter Four Modern Programming Languages, 2nd ed. 10

  11. Loading Executable file still not directly executable Still has some names Mostly machine language, but not entirely Final step: when the program is run, the loader loads it into memory and replaces names with addresses Chapter Four Modern Programming Languages, 2nd ed. 11

  12. A Word About Memory For our example, we are assuming a very simple kind of memory architecture Memory organized as an array of bytes Index of each byte in this array is its address Before loading, language system does not know where in this array the program will be placed Loader finds an address for every piece and replaces names with addresses Chapter Four Modern Programming Languages, 2nd ed. 12

  13. 0: i: 0 20: xxxx 80 xx 80 x xxxxxx xxxx 80 x 60 xxxx 80 xxxxxx xxxxxx (main) main: xxxx i xx i x xxxxxx xxxx i x fred xxxx i xxxxxx xxxxxx loader 60: xxxxxx xxxxxx xxxxxx (fred) fred: xxxxxx xxxxxx xxxxxx 80: (i) 0 Chapter Four Modern Programming Languages, 2nd ed. 13

  14. Running After loading, the program is entirely machine language All names have been replaced with memory addresses Processor begins executing its instructions, and the program runs Chapter Four Modern Programming Languages, 2nd ed. 14

  15. The Classical Sequence source file assembly- language file object file editor compiler assembler executable file running program in memory linker loader Chapter Four Modern Programming Languages, 2nd ed. 15

  16. About Optimization Code generated by a compiler is usually optimized to make it faster, smaller, or both Other optimizations may be done by the assembler, linker, and/or loader A misnomer: the resulting code is better, but not guaranteed to be optimal Chapter Four Modern Programming Languages, 2nd ed. 16

  17. Example Original code: int i = 0; while (i < 100) { a[i++] = x*x*x; } Improved code, with loop invariant moved: int i = 0; int temp = x*x*x; while (i < 100) { a[i++] = temp; } Chapter Four Modern Programming Languages, 2nd ed. 17

  18. Example Loop invariant removal is handled by most compilers That is, most compilers generate the same efficient code from both of the previous examples So it is a waste of the programmer s time to make the transformation manually Chapter Four Modern Programming Languages, 2nd ed. 18

  19. Other Optimizations Some, like LIR, add variables Others remove variables, remove code, add code, move code around, etc. All make the connection between source code and object code more complicated A simple question, such as What assembly language code was generated for this statement? may have a complicated answer Chapter Four Modern Programming Languages, 2nd ed. 19

  20. Outline The classical sequence Variations on the classical sequence Binding times Debuggers Runtime support Chapter Four Modern Programming Languages, 2nd ed. 20

  21. Variation: Hiding The Steps Many language systems make it possible to do the compile-assemble-link part with one command Example: gcc command on a Unix system: gcc main.c gcc main.c S as main.s o main.o ld Compile-assemble-link Compile, then assemble, then link Chapter Four Modern Programming Languages, 2nd ed. 21

  22. Compiling to Object Code Many modern compilers incorporate all the functionality of an assembler They generate object code directly Chapter Four Modern Programming Languages, 2nd ed. 22

  23. Variation: Integrated Development Environments A single interface for editing, running and debugging programs Integration can add power at every step: Editor knows language syntax System may keep a database of source code (not individual text files) and object code System may maintain versions, coordinate collaboration Rebuilding after incremental changes can be coordinated, like Unix make but language-specific Debuggers can benefit (more on this in a minute ) Chapter Four Modern Programming Languages, 2nd ed. 23

  24. Variation: Interpreters To interpret a program is to carry out the steps it specifies, without first translating into a lower- level language Interpreters are usually much slower Compiling takes more time up front, but program runs at hardware speed Interpreting starts right away, but each step must be processed in software Sounds like a simple distinction Chapter Four Modern Programming Languages, 2nd ed. 24

  25. Virtual Machines A language system can produce code in a machine language for which there is no hardware: an intermediate code Virtual machine must be simulated in software interpreted, in fact Language system may do the whole classical sequence, but then interpret the resulting intermediate-code program Why? Chapter Four Modern Programming Languages, 2nd ed. 25

  26. Why Virtual Machines Cross-platform execution Virtual machine can be implemented in software on many different platforms Simulating physical machines is harder Heightened security Running program is never directly in charge Interpreter can intervene if the program tries to do something it shouldn t Chapter Four Modern Programming Languages, 2nd ed. 26

  27. The Java Virtual Machine Java languages systems usually compile to code for a virtual machine: the JVM JVM language is sometimes called bytecode Bytecode interpreter is part of almost every Web browser When you browse a page that contains a Java applet, the browser runs the applet by interpreting its bytecode Chapter Four Modern Programming Languages, 2nd ed. 27

  28. Intermediate Language Spectrum Pure interpreter Intermediate language = high-level language Tokenizing interpreter Intermediate language = token stream Intermediate-code compiler Intermediate language = virtual machine language Native-code compiler Intermediate language = physical machine language Chapter Four Modern Programming Languages, 2nd ed. 28

  29. Delayed Linking Delay linking step Code for library functions is not included in the executable file of the calling program Chapter Four Modern Programming Languages, 2nd ed. 29

  30. Delayed Linking: Windows Libraries of functions for delayed linking are stored in .dll files: dynamic-link library Many language systems share this format Two flavors Load-time dynamic linking Loader finds .dll files (which may already be in memory) and links the program to functions it needs, just before running Run-time dynamic linking Running program makes explicit system calls to find .dll files and load specific functions Chapter Four Modern Programming Languages, 2nd ed. 30

  31. Delayed Linking: Unix Libraries of functions for delayed linking are stored in .so files: shared object Suffix .so followed by version number Many language systems share this format Two flavors Shared libraries Loader links the program to functions it needs before running Dynamically loaded libraries Running program makes explicit system calls to find library files and load specific functions Chapter Four Modern Programming Languages, 2nd ed. 31

  32. Delayed Linking: Java JVM automatically loads and links classes when a program uses them Class loader does a lot of work: May load across Internet Thoroughly checks loaded code to make sure it complies with JVM requirements Chapter Four Modern Programming Languages, 2nd ed. 32

  33. Delayed Linking Advantages Multiple programs can share a copy of library functions: one copy on disk and in memory Library functions can be updated independently of programs: all programs use repaired library code next time they run Can avoid loading code that is never used Chapter Four Modern Programming Languages, 2nd ed. 33

  34. Profiling The classical sequence runs twice First run of the program collects statistics: parts most frequently executed, for example Second compilation uses this information to help generate better code Chapter Four Modern Programming Languages, 2nd ed. 34

  35. Dynamic Compilation Some compiling takes place after the program starts running Many variations: Compile each function only when called Start by interpreting, compile only those pieces that are called frequently Compile roughly at first (for instance, to intermediate code); spend more time on frequently executed pieces (for instance, compile to native code and optimize) Just-in-time (JIT) compilation Chapter Four Modern Programming Languages, 2nd ed. 35

  36. Outline The classical sequence Variations on the classical sequence Binding times Debuggers Runtime support Chapter Four Modern Programming Languages, 2nd ed. 36

  37. Binding Binding means associating two things especially, associating some property with an identifier from the program In our example program: What set of values is associated with int? What is the type of fred? What is the address of the object code for main? What is the value of i? int i; void main() { for (i=1; i<=100; i++) fred(i); } Chapter Four Modern Programming Languages, 2nd ed. 37

  38. Binding Times Different bindings take place at different times There is a standard way of describing binding times with reference to the classical sequence: Language definition time Language implementation time Compile time Link time Load time Runtime Chapter Four Modern Programming Languages, 2nd ed. 38

  39. Language Definition Time Some properties are bound when the language is defined: Meanings of keywords: void, for, etc. int i; void main() { for (i=1; i<=100; i++) fred(i); } Chapter Four Modern Programming Languages, 2nd ed. 39

  40. Language Implementation Time Some properties are bound when the language system is written: range of values of type int in C (but in Java, these are part of the language definition) implementation limitations: max identifier length, max number of array dimensions, etc int i; void main() { for (i=1; i<=100; i++) fred(i); } Chapter Four Modern Programming Languages, 2nd ed. 40

  41. Compile Time Some properties are bound when the program is compiled or prepared for interpretation: Types of variables, in languages like C and ML that use static typing Declaration that goes with a given use of a variable, in languages that use static scoping (most languages) int i; void main() { for (i=1; i<=100; i++) fred(i); } Chapter Four Modern Programming Languages, 2nd ed. 41

  42. Link Time Some properties are bound when separately- compiled program parts are combined into one executable file by the linker: Object code for external function names int i; void main() { for (i=1; i<=100; i++) fred(i); } Chapter Four Modern Programming Languages, 2nd ed. 42

  43. Load Time Some properties are bound when the program is loaded into the computer s memory, but before it runs: Memory locations for code for functions Memory locations for static variables int i; void main() { for (i=1; i<=100; i++) fred(i); } Chapter Four Modern Programming Languages, 2nd ed. 43

  44. Run Time Some properties are bound only when the code in question is executed: Values of variables Types of variables, in languages like Lisp that use dynamic typing Declaration that goes with a given use of a variable (in languages that use dynamic scoping) Also called late or dynamic binding (everything before run time is early or static) Chapter Four Modern Programming Languages, 2nd ed. 44

  45. Late Binding, Early Binding The most important question about a binding time: late or early? Late: generally, this is more flexible at runtime (as with types, dynamic loading, etc.) Early: generally, this is faster and more secure at runtime (less to do, less that can go wrong) You can tell a lot about a language by looking at the binding times Chapter Four Modern Programming Languages, 2nd ed. 45

  46. Outline The classical sequence Variations on the classical sequence Binding times Debuggers Runtime support Chapter Four Modern Programming Languages, 2nd ed. 46

  47. Debugging Features Examine a snapshot, such as a core dump Examine a running program on the fly Single stepping, breakpointing, modifying variables Modify currently running program Recompile, relink, reload parts while program runs Advanced debugging features require an integrated development environment Chapter Four Modern Programming Languages, 2nd ed. 47

  48. Debugging Information Where is it executing? What is the traceback of calls leading there? What are the values of variables? Source-level information from machine-level code Variables and functions by name Code locations by source position Connection between levels can be hard to maintain, for example because of optimization Chapter Four Modern Programming Languages, 2nd ed. 48

  49. Outline The classical sequence Variations on the classical sequence Binding times Debuggers Runtime support Chapter Four Modern Programming Languages, 2nd ed. 49

  50. Runtime Support Additional code the linker includes even if the program does not refer to it explicitly Startup processing: initializing the machine state Exception handling: reacting to exceptions Memory management: allocating memory, reusing it when the program is finished with it Operating system interface: communicating between running program and operating system for I/O, etc. An important hidden player in language systems Chapter Four Modern Programming Languages, 2nd ed. 50

Related


More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#