NIM: 1801382963
Kali ini saya akan menjawab Assignment #10 dari Chapter 10 Programming Language Concepts R Sebesta
Review Questions
6. What is
the difference between an activation record and an activation record instance?
*An
activation record is the format, or layout, of the moncode part of a
subprogram. An activation record instance is a concrete example of an activation
record, a collection of data in the form of an activation record.
7. Why are
the return address, dynamic link, and parameters placed in the bottom of the
activation record?
*It's
because the entry must appear first.
8. What
kind of machines often use registers to pass parameters?
*RISC
Machines often use registers to pass parameters.
9. What are
the two steps in locating a nonlocal variable in a static-scoped language with
stack-dynamic local variables and nested subprograms?
*First
step, find correct activation record (the harder part) and then the second step
is determine the offset within that activation record (easy part).
10. Define
static chain, static_depth, nesting_depth, and chain_offset.
*Static
chain is chain of static links connecting an activation record to all of it's
static ancestors (it's enclosing subprograms).
Static
depth is depth of the nesting for each enclosing static scope.
Nesting
depth is the difference between the static depth of the reference and that of
the scope where it was declared.
Chain
offset is same as nesting depth.
Problem Set
6. Although
local variables in Java methods are dynamically allocated at the beginning of
each activation, under what circumstances could the value of a local variable
in a particular activation retain the value of the previous activation?
*Each
activation allocates variables in exactly the same order. Variables are not
initialized to any value unless the program contains an initialization
statement for the variable – they simply have whatever value is stored in the
location they are allocated. If a procedure finishes executing, returns, and is
immediately reinvoked, a variable would be assigned the same stack location it
had on the previous invocation, and would have the last value from that
previous invocation.
7. It is
stated in this chapter that when nonlocal variables are accessed in a
dynamic-scoped language using the dynamic chain, variable names must be stored
in the activation records with the values. If this were actually done, every
nonlocal access would require a sequence of costly string comparisons on names.
Design an alternative to these string comparisons that would be faster.
*Using
approach that uses an auxiliary data structure called a display. Or, to write
variable names as integers. These integers act like an array. So when the
activation happens, the comparisons will be faster.
8. Pascal
allows gotos with nonlocal targets. How could such statements be handled if
static chains were used for nonlocal variable access? Hint: Consider the way
the correct activation record instance of the static parent of a newly enacted
procedure is found (see Section 10.4.2).
*Based on
the hint statement, the target of every goto in a program could be represented
as an address and a nesting depth, where the nesting depth is the difference
between the nesting level of the procedure that contains the goto and that of
the procedure containing the target. Then, when a goto is executed, the static
chain is followed by the number of links indicated in the nesting depth of the
goto target. The stack top pointer is reset to the top of the activation record
at the end of the chain.
9. The
static-chain method could be expanded slightly by using two static links in
each activation record instance where the second points to the static
grandparent activation record instance. How would this approach affect the time
required for subprogram linkage and nonlocal references?
*Including
two static links would reduce the access time to nonlocals that are defined in
scopes two steps away to be equal to that for nonlocals that are one step away.
Overall, because most nonlocal references are relatively close, this could
significantly increase the execution efficiency of many programs.
10. Design
a skeletal program and a calling sequence that results in an activation record
instance in which the static and dynamic links point to different
activation-recorded instances in the run-time stack.
*\\
\emph{Answer}:\\
procedure
Main\_2 is\\
\verb+ + X : Integer;\\
\verb+ +procedure Bigsub is\\
\verb+ +\verb+
+ A, B, C : Integer;\\
\verb+ +\verb+
+ procedure Sub1 is\\
\verb+ +\verb+
+\verb+ + A, D : Integer;\\
\verb+ +\verb+
+\verb+ + begin -- of Sub1\\
\verb+ +\verb+
+\verb+ + A := B + C; $\longleftarrow$ 1\\
\verb+ +\verb+
+\verb+ + ...\\
\verb+ +
end; -- of Sub1\\
\verb+ +
procedure Sub2(X : Integer) is\\
\verb+ +\verb+
+ B, E : Integer;\\
\verb+ +\verb+
+ procedure Sub3 is\\
\verb+ +\verb+
+\verb+ + C, E : Integer;\\
\verb+ +\verb+
+\verb+ + begin -- of Sub3\\
\verb+ +\verb+
+\verb+ + ...\\
\verb+ +\verb+
+\verb+ + Sub1;\\
\verb+ +\verb+
+\verb+ + ...\\
\verb+ +\verb+
+\verb+ + E := B + A; $\longleftarrow$ 2\\
\verb+ +\verb+
+ end; -- of Sub3\\
\verb+ +\verb+
+ begin -- of Sub2\\
\verb+ +\verb+
+ ...\\
\verb+ +\verb+
+ Sub3;\\
\verb+ +\verb+
+ ...\\
\verb+ +\verb+
+ A := D + E;
$\longleftarrow$ 3\\
\verb+ +
end; -- of Sub2\\
\verb+ +
begin -- of Bigsub\\
\verb+ +\verb+
+ ...\\
\verb+ +\verb+
+ Sub2(7);\\
\verb+ +\verb+
+ ...\\
\verb+ +
end; -- of Bigsub\\
begin -- of Main\_2\\
\verb+ +
...\\
\verb+ +
Bigsub;\\
\verb+ +
...\\
end; -- of
Main\_2\\
\\
The
sequence of procedure calls is:\\
Main\_2
calls Bigsub\\
Bigsub
calls Sub2\\
Sub2 calls
Sub3\\
Sub3 calls
Sub1\\
\\
The
activation records with static and dynamic links is as follows:\\
\begin{figure}
\centering
\includegraphics[scale=0.5]{ari}
\end{figure}
At position 1 in procedure Sub1, the
reference is to the local variable,
A, not to
the nonlocal variable A from Bigsub. This reference to A has the
chain\_offset/local\_offset
pair (0, 3). The reference to B is to the nonlocal B
from
Bigsub. It can be represented by the pair (1, 4). The local\_offset is 4,
because a 3
offset would be the first local variable (Bigsub has no parameters). Notice
that if the dynamic link were used to do a simple search for
an
activation record instance with a declaration for the variable B, it would
find the
variable B declared in Sub2, which would be incorrect. If the (1, 4)
pair were
used with the dynamic chain, the variable E from Sub3 would be
used. The
static link, however, points to the activation record for Bigsub,
which has
the correct version of B . The variable B in Sub2 is not in the
referencing
environment at this point and is (correctly) not accessible. The
reference
to C at point 1 is to the C defined in Bigsub, which is represented
by the pair
(1, 5).\\
\\
\noindent