#+LaTeX_CLASS: beamer #+LaTeX_CLASS_OPTIONS: [presentation] #+BEAMER_FRAME_LEVEL: 2 #+TITLE: Evolving ASDF #+DATE: International Lisp Conference, 19 October 2010 #+AUTHOR: Fran\c{c}ois-Ren\'e Rideau and Robert P. Goldman \newline{} ITA and SIFT (respectively) #+BEAMER_HEADER_EXTRA: \usetheme{default}\usecolortheme{default} \subtitle{More cooperation, less coordination} #+COLUMNS: %45ITEM %10BEAMER_env(Env) %10BEAMER_envargs(Env Args) %4BEAMER_col(Col) %8BEAMER_extra(Extra) #+PROPERTY: BEAMER_col_ALL 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 :ETC * COMMENT Org-principles for this document ** Just like outline mode --- More "*" in header means deeper nesting ** Simple markup --- if you like! --- we can add this later *** /slashes/ for ital *** *stars* for bold *** =equal= signs for monospace ** Slide structure *** Single-star headings are sections *** Double-star headings are individual slides For this reason there are some things that look odd, where we have only a single sub-bullet under a major header. ** Outline proper starts in the following items * COMMENT Structure ** Suggest we have 15-18 slides ** I have 20 slides in the current draft * Summary ** COMMENT Only 1 slide here ** In a nutshell *** What were we doing? **** Fixing up ASDF ***** Trying not to wreck a key piece of CL community plumbing in the process *** We discovered **** Interesting technical challenges ***** From hot-patching ***** From CL pathnames **** Interesting social challenges *** Some principles **** Don't wreck backward compatibility **** Configuration ***** Let users configure based on what they know ***** Let library authors configure based on what /they/ know * What is ASDF? ** COMMENT 4 slides here ** ASDF is the dominant build system for CL *** Plays a role superficially akin to =make= or =ant= *** But must do more **** Not just build, but load **** Maintain coherence of long-lived CL images ***** Not always going back to a clean slate like other tools *** Built on the shoulders of giants **** =MK-DEFSYSTEM= **** Symbolics and other proprietary =DEFSYSTEM= versions **** =BUILD= *** Brilliant key idea establishes ASDF dominance **** Use =*load-truename*= to find system component files **** Suddenly, installing CL systems is easy + No more wrestling with logical pathnames + Especially since logical pathnames are insufficiently portable ** ASDF system definitions + Contain /metadata/ + Contain /components/ + Contain /dependencies/ - external - internal ** How does ASDF work? #+BEGIN_BEAMER \only<1>{\centerline{\includegraphics[width=10cm]{talk-images/find-system}}} \only<2>{\centerline{\includegraphics[width=10cm]{talk-images/defsystem}}} \only<3>{\centerline{\includegraphics[width=10cm]{talk-images/traverse}}} \only<4>{\centerline{\includegraphics[width=10cm]{talk-images/execute}}} #+END_BEAMER ** Three things I wish you knew about ASDF 1. ASDF doesn't just build: it makes a /plan/ to build, and then executes the plan 2. Operating on a module is not /wrapped around/ the operations on components + =:around= methods don't work for customization 3. You can tell ASDF about system versions + Say what the version of your system is + $x.y.z$, please + Please don't skimp on the high-order numbers or ASDF won't detect incompatibilities + Say what library versions it depends on * Hot-patching ASDF ** COMMENT 4 slides here ** Hot-patching ASDF *** Loading ASDF into a running CL image containing ASDF *** Why is this critical? **** If people can't load a new ASDF on top of an old one, they can never write portable code using new features **** /Unless/ all the implementations get together and /simultaneously/ update their packaged versions **** Hot-patching allows ASDF to evolve *** Why is this hard? **** We are replacing bits of ASDF /while it is running/ **** While it is running /to build and load itself/ **** COMMENT image of snake eating its own tail... * Configuration ** COMMENT 4 slides here ** Configuring ASDF *** Need to be able to find systems **** We can find system components from the system definition **** But we still need to find the system definitions! *** Need to place compiled files /Explain the need here/ ** Key issues are wrestling with CL pathnames * Best practices ** COMMENT 2 slides here * Lessons learned ** COMMENT 2 slides here * Future directions ** COMMENT 2 slides here ** Future directions *** There is still a lot of room for improvement with ASDF *** New features, which we'll talk about in a minute *** Better documentation * Conclusions ** COMMENT 1 slide here ** Conclusions *** ASDF 2 is now available **** Download and load into your implementation of choice **** Bundled with an increasing number of implementations ***** SBCL ***** ABCL ***** ECL /Are there others?/ **** =:asdf2= in =*features*= *** ASDF 2 needs maintainers *** But please remember --- ASDF is the glue that holds the CL community together **** Be gentle with it!