Recover from microbel
This commit is contained in:
commit
df54a1caf1
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}
|
Loading…
x
Reference in New Issue
Block a user