summaryrefslogtreecommitdiff
path: root/Homework/cs5300/homework-one/compilers-one.tex
diff options
context:
space:
mode:
authorElizabeth Alexander Hunt <me@liz.coffee>2026-07-02 11:55:17 -0700
committerElizabeth Alexander Hunt <me@liz.coffee>2026-07-02 11:55:17 -0700
commit6bf4b90c90f15f4ab60833bddf5b5756d1a6b1f6 (patch)
treeed97e39ec77c5231ffd2c394493e68d00ddac5a4 /Homework/cs5300/homework-one/compilers-one.tex
downloadmisc-undergrad-6bf4b90c90f15f4ab60833bddf5b5756d1a6b1f6.tar.gz
misc-undergrad-6bf4b90c90f15f4ab60833bddf5b5756d1a6b1f6.zip
Diffstat (limited to 'Homework/cs5300/homework-one/compilers-one.tex')
-rw-r--r--Homework/cs5300/homework-one/compilers-one.tex191
1 files changed, 191 insertions, 0 deletions
diff --git a/Homework/cs5300/homework-one/compilers-one.tex b/Homework/cs5300/homework-one/compilers-one.tex
new file mode 100644
index 0000000..223758a
--- /dev/null
+++ b/Homework/cs5300/homework-one/compilers-one.tex
@@ -0,0 +1,191 @@
+% Created 2023-01-16 Mon 13:28
+% Intended LaTeX compiler: pdflatex
+\documentclass[11pt]{article}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{graphicx}
+\usepackage{longtable}
+\usepackage{wrapfig}
+\usepackage{rotating}
+\usepackage[normalem]{ulem}
+\usepackage{amsmath}
+\usepackage{amssymb}
+\usepackage{capt-of}
+\usepackage{hyperref}
+\noindent \notag \usepackage{ dsfont }
+\author{Logan Hunt}
+\date{\today}
+\title{Homework - Chapter One}
+\hypersetup{
+ pdfauthor={Logan Hunt},
+ pdftitle={Homework - Chapter One},
+ pdfkeywords={},
+ pdfsubject={},
+ pdfcreator={Emacs 28.2 (Org mode 9.5.5)},
+ pdflang={English}}
+\begin{document}
+
+\maketitle
+
+\section{Question One}
+\label{sec:orge85a534}
+A compiler is a program that reads source in one language, and translates it to an equivalent program to another language,
+which can immediately be run in that language. An interpreter, on the other hand, directly executes the source as the
+program continues.
+
+\section{Question Two}
+\label{sec:orgb550d55}
+\subsection{a}
+\label{sec:org1f4ed7b}
+Compiled machine code is typically much faster than interpreted instructions.
+\subsection{b}
+\label{sec:orga3b0952}
+An interpreter can give better error diagnostics.
+
+\section{Question Three}
+\label{sec:orgdddbe9a}
+In terms of portability, compiled programs are less so than interpreters. Compiled programs (to machine code) target
+a single architecture, and thus require seperate compilation, or cross-compilation over all target architectures.
+Interpreted programs on the other hand will run anywhere, as long as there is an interpreter implementation for the
+architecture.
+
+\section{Question Four}
+\label{sec:org348f3da}
+Java is a shady devil that likes to play both sides. Java source is compiled to intermediate Java bytecodes, which
+are then interpreted by the Java Virtual Machine. The compilation aspect of Java here, is in the translation to JVM
+bytecode instructions.
+
+\section{Question Five}
+\label{sec:org2f098fc}
+One might want to view generated assembly code to debug an issue in their code and step through the compiler's
+output, understand any optimizations the compiler may make, or to just explore its output.
+
+\section{Question Six}
+\label{sec:org50a4a97}
+\begin{verbatim}
+R1 = 20
+R2 = 12
+\end{verbatim}
+
+\section{Question Seven}
+\label{sec:org199da87}
+id2 is not a register
+
+\section{Question Eight}
+\label{sec:org3216fe2}
+\begin{verbatim}
+1. R1 = 9
+2. R2 = 2
+3. R1 = 11
+4. R1 = 6.0
+5. id3 = R1 = 6.0
+\end{verbatim}
+
+\section{Question Nine}
+\label{sec:org2cf7709}
+\subsection{JavaScript}
+\label{sec:org769857f}
+\begin{itemize}
+\item imperative
+\item declarative
+\item third-generation
+\item object-oriented (through prototypes)
+\item functional
+\item scripting
+\end{itemize}
+\subsection{Python}
+\label{sec:orgb53d3f0}
+\begin{itemize}
+\item imperative
+\item declarative
+\item third-generation
+\item object-oriented
+\item functional
+\item scripting
+\end{itemize}
+
+\section{Question Ten}
+\label{sec:org6722ba8}
+According to the book, "A distinguishing feature of object-oriented programming is the ability of each object to invoke the appropriate
+method in response to a message." In C, this is not possible as structs do not have support
+for methods.
+
+\section{Question Eleven}
+\label{sec:orgc3a76ec}
+\begin{enumerate}
+\item Self-Hosted compilers, themselves. Compiling a compiler with an optimization bug in the hosted compiler would probably
+be a nightmare to fix.
+\item Anything in the Linux kernel that runs in user space.
+\item \texttt{malloc}
+\end{enumerate}
+
+\section{Question Twelve}
+\label{sec:org5f61a58}
+This contrived program:
+\begin{verbatim}
+int main() {
+ int i;
+ for (i = 0; i < 10000000; i++);
+ return 0;
+}
+\end{verbatim}
+
+It wouldn't be so bad for the compiler to just set i = 10000000.
+
+\section{Question Thirteen}
+\label{sec:orgebfa92b}
+\begin{center}
+\begin{tabular}{ll}
+Declaration & Scope\\[0pt]
+\texttt{int b = 1} & B\textsubscript{1} - B\textsubscript{2}\\[0pt]
+\texttt{int a = 2} & B\textsubscript{2} - B\textsubscript{4}\\[0pt]
+\texttt{int b = 2} & B\textsubscript{2} - B\textsubscript{3} - B\textsubscript{4}\\[0pt]
+\texttt{int b = 3} & B\textsubscript{3}\\[0pt]
+\texttt{int a = 4} & B\textsubscript{4} - B\textsubscript{5}\\[0pt]
+\texttt{int b = 4} & B\textsubscript{4}\\[0pt]
+\texttt{int a = 5} & B\textsubscript{5}\\[0pt]
+\end{tabular}
+\end{center}
+
+\section{Question Fourteen}
+\label{sec:org5304edd}
+\begin{verbatim}
+i = 5
+j = 8
+ i = 4[
+j = 9
+w = j - i = 9 - 4 = 5
+x = j - i = 9 - 5 = 4
+ j = 10
+y = j - i = 10 - 5 = 5
+i = 3
+z = j - i = 9 - 3 = 6
+\end{verbatim}
+
+Thus, \texttt{w = 5, x = 4, y = 5, z = 6}.
+
+\section{Question Fifteen}
+\label{sec:org9f74779}
+\begin{verbatim}
+i = 2
+j = 5
+ i = 3
+w = i + j = 3 + 2 = 5
+x = i + j = 2 + 5 = 7
+ j = 9
+i = 7
+y = i + j = 7 + 9 = 16
+i = 6
+z = i + j = 6 + 5 = 11
+\end{verbatim}
+
+Thus, \texttt{w = 5, x = 7, y = 16, z = 11}
+
+\section{Question Sixteen}
+\label{sec:org31a90e4}
+b : x = 4 \(\Rightarrow\) x = (x+3)-1 \(\Rightarrow\) x = 6
+
+c : x = 1 \(\Rightarrow\) (x + 3) \(\Rightarrow\) 4
+
+"6,4"
+\end{document} \ No newline at end of file