156 lines
4.1 KiB
TeX
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}
|