2025-03-05 10:38:30 +01:00

156 lines
4.1 KiB
TeX

\documentclass{beamer}
\usepackage{beamerthemesplit}
\usepackage[norsk]{babel}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{listings}
\beamertemplateshadingbackground{red!10}{structure!10}
\beamertemplatetransparentcovereddynamic
\beamertemplateballitem
\beamertemplatenumberedballsectiontoc
\beamertemplatenavigationsymbolsempty
\title{Pragmatisk LISP-oppsett}
\author{Einar Ryeng}
\begin{document}
\frame{\titlepage}
\section{Introduksjon}
\frame{
\frametitle{Defsystem}
Den til nå vanligste pakken for å definere systemer i Common Lisp
kalles defsystem, og i frie CL-varianter brukes implementasjonen MK-Defsystem
}
\frame{
\frametitle{Defsystem}
\texttt{defsystem} is to Lisp as \texttt{make} is to C. Which is to say,
\begin{itemize}
\item thoroughly incomprehensible at first sight
\item not standard, but incompatible versions are provided by most vendors
\end{itemize}
\emph{--- Dan Burlow}
}
\frame{
\frametitle{Another System Definition Facility}
\begin{itemize}
\item Modellert etter defsystem 3
\item Bruker CLOS
\item Henter id\'eer fra spesifikasjonen til defsystem 4
\item Portabelt mellom ANSI CL-implementasjoner
\end{itemize}
}
\section{Systemer}
\subsection{asd-filer}
\frame{
En asd-fil inneholder normalt byggeinstruksjoner for et sett med
lisp-filer. De byggeinstruksjonene som defineres i en asd-fil kalles
et \emph{system}, og inkluderer oftest:
\begin{itemize}
\item Hvilke kildekodefiler som inngår
\item Avhengigheter mellom filene
\item Avhengigheter til andre systemer
\item Annen informasjon (opphavsmann, versjon, lisens, ...)
\end{itemize}
}
\frame{
\frametitle{Et enkelt eksempel}
Et minimalt asdf-system som ikke gjør annet enn at andre systemer
kan ha avhengigheter til det.
\lstinputlisting{enkel.asd}
}
\frame{
\frametitle{Et realistisk eksempel}
\lstinputlisting{md5.asd}
}
\subsection{Filstruktur}
\frame{
\frametitle{Plassering av asd-filer}
\begin{itemize}
\item Lag en hovedkatalog for CL-prosjekter
\item Lag subkataloger for source og systems
\item Legg hvert prosjekt i en subkatalog
\item Symlink til asd-filen fra systems-katalogen
\item Inkluder systems-katalogen i \texttt{asdf:*central-registry*}
\lstinputlisting{init.lisp}
\end{itemize}
}
\subsection{Komponenter}
\frame{
Komponentene i ASDF er ordnet i en trestruktur. De viktigste
attributtene for komponenter er
\begin{itemize}
\item :name
\item :depends-on
\item :components
\item :in-order-to
\item :version
\end{itemize}
}
\frame{
Dependency-lister spesifiseres med \texttt{:in-order-to} for en gitt
komponent, og det vanlige er å spesifisere dependecies på en eller
begge av
\begin{itemize}
\item \texttt{:load-op} og
\item \texttt{:compile-op}
\end{itemize}
Operasjoner kan arves, så dersom man trenger sære ting er det stort
sett mulig å gjøre det man vil med litt fikling.
}
\section{Refleksjon}
\frame{
\frametitle{Refleksjon}
Det finnes en rekke funksjoner for å spørre systemet om lastede
systemer og komponenter
\begin{itemize}
\item \texttt{find-system} returnerer et system.
\item \texttt{find-component} returnerer en komponent i et gitt
system.
\item \texttt{component-pathname} returnerer path til en
komponent.
\item \texttt{component-relative-pathname}
\item \texttt{component-version}
\item ...
\end{itemize}
}
\section{ASDF i EMACS}
\frame{
\frametitle{ASDF i EMACS}
Om man bruker emacs er det greit å få asd-filer opp i lisp-mode
automatisk. Dette kan gjøres ved å legge til følgende i
\texttt{.emacs}
\lstinputlisting{dotemacs}
}
\section{Referanser}
\frame{
\frametitle{For mer informasjon:}
\begin{itemize}
\item \texttt{README}-filen til ASDF
\item Eksempelsystemene som følger med ASDF
\item \texttt{\#lisp} på freenode, hvor hovedutvikleren ofte er innom
\item Nyhetsgruppen \texttt{comp.lang.lisp} som leses av mange veldig
oppegådende LISP-folk, inklusive Dan Burlow.
\item Nyhetsgruppen \texttt{no.it.programmering.lisp} dersom du
foretrekker å skrive på norsk.
\end{itemize}
}
\end{document}