handouts/amm-ho.tex
changeset 917 89e05a230d2d
parent 870 739039774cee
child 924 6ad0f63e1968
--- a/handouts/amm-ho.tex	Sat Sep 09 14:14:31 2023 +0100
+++ b/handouts/amm-ho.tex	Sun Sep 10 12:24:55 2023 +0100
@@ -2,35 +2,43 @@
 \usepackage{../style}
 \usepackage{../langs}
 \usepackage{marvosym}
+\usepackage{tcolorbox}
+%% \usepackage[]{hvextern}
 
 %cheat sheet
 %http://worldline.github.io/scala-cheatsheet/
 
 \begin{document}
-\fnote{\copyright{} Christian Urban, King's College London, 2020, 2021}
+\fnote{\copyright{} Christian Urban, King's College London, 2020, 2021, 2023}
 
-\section*{Scala in 6CCS3CFL}
+\section*{Scala 3 in 6CCS3CFL}
 
 For the coursework in this module you are free to use any programming
 language you like, but I will show you all my code using Scala---I
-hope you have fond memories of Scala from PEP. If you need a reminder
-of the Scala handouts for PEP have a look
-\hr{http://talisker.nms.kcl.ac.uk/cgi-bin/repos.cgi/pep-material/raw-file/tip/handouts/pep-ho.pdf}
-
+hope you have fond memories of Scala from PEP. The only difference
+with PEP is that I will use the current
+stable version of Scala, which at teh time of writing is Scala 3.3.1.
 
-But as said, you do not need to use Scala for your own
-code.\footnote{Haskell, Rust, Ocaml were other languages that have
-  been used previously in CFL. I recommend to not use Java or C for
+\begin{tcolorbox}[colback=red!5!white,colframe=red!75!black]
+If you intend to submit your code for the CW in Scala, you \underline{MUST} submit code that
+is compatible with Scala 3!! This is to make it easier for me to test
+your code and the changes between Scala 2 from last year PEP to Scala
+3 in CFL are not that great. In fact, most changes are just some new
+syntax.
+\end{tcolorbox}\medskip
+
+\noindent
+If you need a reminder of the Scala handouts from PEP updated to Scala 3
+have a look here
+\hr{http://talisker.nms.kcl.ac.uk/cgi-bin/repos.cgi/pep-material/raw-file/tip/handouts/pep-ho.pdf}. But as said, you do not need to use Scala for the CWs.\footnote{Haskell, Rust, Ocaml were other languages that have
+  been used previously in CFL. I do not recommend to use Java or C or C++ for
   writing a compiler, but if you insist, feel free. It has been done
-before.}  I will use the
-current stable version of Scala, which is 2.13.6. For various reasons,
-I am NOT GOING TO USE THE LATEST VERSION OF SCALA 3.0! Please be
-aware of this when you run my code.
+  before.}  
 \bigskip
 
 \noindent
-The main difference to the Scala I showed you in PEP is that in CFL
-I will use the Ammonite REPL
+The other difference between the Scala I showed you in PEP is that in CFL
+I will use the Ammonite REPL (with underlying Scala Version 3):
 
 \begin{quote}
 \url{https://ammonite.io/#Ammonite-REPL}
@@ -42,12 +50,15 @@
 
 \begin{lstlisting}[language={},numbers=none,basicstyle=\ttfamily\small]
 $ amm
-Loading...  
-Welcome to the Ammonite Repl 2.4.0 (Scala 2.13.6 Java 9)
+Loading...
+Welcome to the Ammonite Repl 2.5.9 (Scala 3.2.2 Java 17.0.7)
 scala> 1 + 2
 res0: Int = 3
 \end{lstlisting} %% $
 
+%%\runExtCmd[redirect]{ls -la}{voss}
+
+
 \noindent
 Ammonite uses the same Scala compiler, just adds some useful features
 on top of it. It is quite main-stream in the Scala community and it should
@@ -56,30 +67,29 @@
 is by using \texttt{curl}:
 
 \begin{lstlisting}[numbers=none,language={},basicstyle=\ttfamily\small]
-$ curl -L https://github.com/com-lihaoyi/Ammonite/
-                 releases/download/2.4.0/2.13-2.4.0 --output amm
-\end{lstlisting}  
+$ curl -L https://github.com/com-lihaoyi/Ammonite/releases/\
+  download/2.5.9/3.2-2.5.9 --output amm
+\end{lstlisting} %% $  
 
-
+\noindent
 The big advantage of Ammonite is that it comes with some additional
 libraries already built-in and also allows one to easily break up code
 into smaller modules. For example reading and writing files in
 Ammonite can be achieved with
 
 \begin{lstlisting}[numbers=none,language=Scala]
-scala> import os._  
-  
+scala> import os._
+scala> write.over(pwd / "file.name", "foo bar")  
 scala> read(pwd / "file.name")   
-res1: String = """..."""
-
-scala> write.over(pwd / "file.name", "foo bar")
+res1: String = "foo bar"
 \end{lstlisting}
 
 \noindent
-The latter writes the string \code{"foo bar"} into the file
+The second line writes the string \code{"foo bar"} into the file
 \code{"file.name"}, which is located in the current working
-directory. For loading and accessing code from another Scala file, you
-can import it as follows:
+directory (\code{pwd}). For loading and accessing code from
+another Scala file, you can import the code into Ammonite
+as follows:
 
 \begin{lstlisting}[numbers=none,language=Scala]
 import $file.name-of-the-file
@@ -93,9 +103,8 @@
 for the compiler we implement in CFL, because it allows us to easily
 break up the code into the lexer, parser and code generator.
 
-Another feature which exists in Ammonite, but not yet in the
-current version of Scala (it will be in the next version called dotty)
-is that you can mark functions as \texttt{@main}. For example
+Another handy feature of Ammonite is that you can mark functions as
+\texttt{@main}. For example
 
 \begin{lstlisting}[numbers=none,language=Scala]
 @main
@@ -126,7 +135,7 @@
 \end{lstlisting} %% $
 
 \noindent
-What is also good in Ammonite that you can specify more than one
+What is also good in Ammonite is that you can specify more than one
 function to be ``main'' and then specify on the command line which
 function you want to run as entry-point.
 
@@ -139,7 +148,7 @@
 \end{lstlisting} %% $
 
 \noindent Of course this requires that you use \texttt{println} for
-inspecting any data, as otherwise nothing will be displayed at the
+inspecting any data as otherwise nothing will be displayed at the
 commandline.
 \bigskip