Recover from microbel
This commit is contained in:
22
README.md
Normal file
22
README.md
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Pragmatisk LISP-oppsett
|
||||||
|
|
||||||
|
- **Dato:** Mandag 27. oktober 2004
|
||||||
|
- **Tid:** 18:15 til 20:00
|
||||||
|
- **Sted:** Gløshaugen
|
||||||
|
- **Pris:** 0,- / 0,-
|
||||||
|
- **Påmelding:** [kurs@pvv.org](kurs@pvv.org)
|
||||||
|
|
||||||
|
PVV arrangerer et møte for lisp-interesserte om hvordan å sette opp et
|
||||||
|
arbeidsmiljø for Common Lisp. Det vil først bli gjennomgang av
|
||||||
|
verktøyene ASDF og SLIME før vi åpner for diskusjon og
|
||||||
|
deling av erfaring mellom deltagerne sammen med litt kaffe.
|
||||||
|
|
||||||
|
ASDF står for *Another System Definition Facility* og er et
|
||||||
|
make-lignende system for Common Lisp. Det er laget for å erstatte
|
||||||
|
mk-defsystem, og har et godt sett av features både for automatisert
|
||||||
|
kompilering og loading av lisp-kode og for å kompilere opp filer i andre
|
||||||
|
språk.
|
||||||
|
|
||||||
|
SLIME (*Superior Lisp Interaction Mode for Emacs*) er det beste
|
||||||
|
grensesnittet for å jobbe interaktivt mot Common Lisp, med blant annet et
|
||||||
|
godt grensesnitt mot CLs debugger og for oppslag i HyperSpecen.
|
||||||
37
foo/all.txt
Normal file
37
foo/all.txt
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
; -*- Mode: lisp -*-
|
||||||
|
;-------- foo.asd ------------------------
|
||||||
|
|
||||||
|
(defpackage :foo-system (:use :asdf :cl))
|
||||||
|
(in-package :foo-system)
|
||||||
|
|
||||||
|
(defsystem foo
|
||||||
|
:name "foo"
|
||||||
|
:version "0.1"
|
||||||
|
:components ((:file "bar")
|
||||||
|
(:file "foo"
|
||||||
|
:in-order-to ((:load-op (:load-op "bar"))))))
|
||||||
|
|
||||||
|
;-------- foo.lisp -----------------------
|
||||||
|
|
||||||
|
(defpackage :foo (:use :cl))
|
||||||
|
(in-package :foo)
|
||||||
|
|
||||||
|
(export 'foo)
|
||||||
|
|
||||||
|
(assert *bar*)
|
||||||
|
|
||||||
|
(defun foo ()
|
||||||
|
(format t "foo!~%")
|
||||||
|
(bar))
|
||||||
|
|
||||||
|
;-------- bar.lisp ------------------------
|
||||||
|
|
||||||
|
(defpackage :foo (:use :cl))
|
||||||
|
(in-package :foo)
|
||||||
|
(export 'bar)
|
||||||
|
|
||||||
|
(defvar *bar* t)
|
||||||
|
|
||||||
|
(defun bar ()
|
||||||
|
(format t "bar?~%"))
|
||||||
|
|
||||||
9
foo/bar.lisp
Normal file
9
foo/bar.lisp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
(defpackage :foo (:use :cl))
|
||||||
|
(in-package :foo)
|
||||||
|
(export 'bar)
|
||||||
|
|
||||||
|
(defvar *bar* t)
|
||||||
|
|
||||||
|
(defun bar ()
|
||||||
|
(format t "bar?~%"))
|
||||||
|
|
||||||
10
foo/foo.asd
Normal file
10
foo/foo.asd
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
|
||||||
|
(defpackage :foo-system (:use :asdf :cl))
|
||||||
|
(in-package :foo-system)
|
||||||
|
|
||||||
|
(defsystem foo
|
||||||
|
:name "foo"
|
||||||
|
:version "0.1"
|
||||||
|
:components ((:file "bar")
|
||||||
|
(:file "foo"
|
||||||
|
:in-order-to ((:load-op (:load-op "bar"))))))
|
||||||
10
foo/foo.lisp
Normal file
10
foo/foo.lisp
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
(defpackage :foo (:use :cl))
|
||||||
|
(in-package :foo)
|
||||||
|
|
||||||
|
(export 'foo)
|
||||||
|
|
||||||
|
(assert *bar*)
|
||||||
|
|
||||||
|
(defun foo ()
|
||||||
|
(format t "foo!~%")
|
||||||
|
(bar))
|
||||||
BIN
pragmatic-cl.pdf
Normal file
BIN
pragmatic-cl.pdf
Normal file
Binary file not shown.
155
pragmatic-cl.tex
Normal file
155
pragmatic-cl.tex
Normal file
@@ -0,0 +1,155 @@
|
|||||||
|
\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}
|
||||||
Reference in New Issue
Block a user