Recover from microbel

This commit is contained in:
Kursmester 2025-03-05 10:36:12 +01:00 committed by h7x4
commit df54a1caf1
Signed by: oysteikt
GPG Key ID: 9F2F7D8250F35146
8 changed files with 4682 additions and 0 deletions

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

@ -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

@ -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

@ -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

@ -0,0 +1,10 @@
(defpackage :foo (:use :cl))
(in-package :foo)
(export 'foo)
(assert *bar*)
(defun foo ()
(format t "foo!~%")
(bar))

4439
poster.ps Normal file

File diff suppressed because it is too large Load Diff

BIN
pragmatic-cl.pdf Normal file

Binary file not shown.

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}