<?xml version="1.0" encoding="UTF-8"?>

<rss version='2.0'
     xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">
    <channel>
        <!-- This XML Feed shows details for the page Planet Lisp -->
        <creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/
          </creativeCommons:license>
        <title>Planet Lisp</title>
        <description>&lt;p&gt;Planet Lisp&lt;/p&gt;
</description>
                <category>Lisp</category>

        <pubDate>Thu, 20 Oct 2005 18:08:05 -0700</pubDate>
        <lastBuildDate>Wed, 15 Feb 2006 06:11:34 -0800</lastBuildDate>
            
        <item>
            <title>François-René Rideau: Next Boston Lisp Meeting: Monday September 29th 2008, 6pm at MIT 34-401B</title>
            <link>http://swik.net/Lisp/Planet+Lisp/Fran%C3%A7ois-Ren%C3%A9+Rideau%3A+Next+Boston+Lisp+Meeting%3A+Monday+September+29th+2008%2C+6pm+at+MIT+34-401B/cdxyt</link>
            <description>&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;
&lt;p align=&quot;justify&quot;&gt;
&lt;small&gt;
&lt;u&gt;NB&lt;/u&gt;:
&lt;b&gt;&lt;a href=&quot;http://www.itasoftware.com/careers/&quot;&gt;ITA Software&lt;/a&gt;&lt;/b&gt;,
a fine employer of Lisp hackers (disclosure: I work there),
is kindly purchasing a buffet to accompany our Monthly Boston Lisp Meeting.
Anyone who attends is welcome to partake.
We appreciate it if you let us know you&#039;re coming, and what food taboos you have,
so that we can order the right amount of food.
Tell us by sending email to 
&lt;tt&gt;boston-lisp-meeting-register&lt;/tt&gt; at &lt;tt&gt;common-lisp.net&lt;/tt&gt;.
We won&#039;t send any acknowledgment unless requested;
importantly, we&#039;ll keep your identity and address confidential
and won&#039;t communicate
any such information to anyone,
not even to our sponsors.
&lt;/small&gt;
&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;&lt;center&gt;*&lt;/center&gt;&lt;/p&gt;

&lt;p align=&quot;justify&quot;&gt;
&lt;b&gt;&lt;em&gt;Rich Hickey&lt;/em&gt;&lt;/b&gt; will give a 90&#039; talk about
&lt;b&gt;Clojure&lt;/b&gt;.
&lt;/p&gt;
&lt;a name=&quot;cutid2&quot;&gt;&lt;/a&gt;
&lt;p align=&quot;justify&quot;&gt;
Clojure &lt;a href=&quot;http://clojure.org/&quot;&gt;http://clojure.org/&lt;/a&gt;
is a dynamic programming language that targets the Java Virtual Machine.
It is designed to be a general-purpose language,
combining the approachability and interactive development of a scripting language
with an efficient and robust infrastructure for multithreaded programming.
Clojure is a compiled language - it compiles directly to JVM bytecode, yet remains completely dynamic.
Every feature supported by Clojure is supported at runtime.
Clojure provides easy access to the Java frameworks,
with optional type hints and type inference, to ensure that calls to Java can avoid reflection.
&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;
Clojure is a dialect of Lisp, and shares with Lisp the code-as-data philosophy and a powerful macro system.
Clojure is predominantly a functional programming language,
and features a rich set of immutable, persistent data structures.
When mutable state is needed, Clojure offers a software transactional memory system
and reactive Agent system that ensure clean, correct, multithreaded designs.
&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;
Rich Hickey, a New-York based software engineer, is the principal author of Clojure.
&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;&lt;center&gt;* *&lt;/center&gt;&lt;/p&gt;

&lt;p align=&quot;justify&quot;&gt;
&lt;b&gt;The Lisp Meeting will take place on
Monday September 29th at
MIT, Room 34-401B.&lt;/b&gt;
&lt;/p&gt;
&lt;a name=&quot;cutid3&quot;&gt;&lt;/a&gt;
&lt;p align=&quot;justify&quot;&gt;
As the numbers indicate, this is in Building 34, on the 4th floor.
&lt;/p&gt;
&lt;p align=&quot;justify&quot;&gt;
MIT map:
&lt;a href=&quot;http://whereis.mit.edu/bin/map?selection=34&quot;&gt;http://whereis.mit.edu/bin/map?selection=34&lt;/a&gt;
&lt;/p&gt;
&lt;p align=&quot;justify&quot;&gt;
Google map:
&lt;a href=&quot;http://maps.google.com/maps?q=50+Vassar+St,+Cambridge,+MA+02139,+USA&quot;&gt;http://maps.google.com/maps?q=50+Vassar+St,+Cambridge,+MA+02139,+USA&lt;/a&gt;
&lt;/p&gt;
&lt;p align=&quot;justify&quot;&gt;
Many thanks go to Alexey Radul for arranging for the room,
and to MIT for welcoming us.
I unhappily won&#039;t be able to attend for personal reasons,
and I thank Richard Kreuter for accepting to be our Master of Ceremony.
&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;&lt;center&gt;* * *&lt;/center&gt;&lt;/p&gt;

&lt;a name=&quot;cutid4&quot;&gt;&lt;/a&gt;
&lt;p align=&quot;justify&quot;&gt;
The previous Boston Lisp Meeting on July 21st
had only 30 participants.
Jay McCarthy&#039;s presentation was excellent,
and though his code wasn&#039;t Lisp,
the spirit of it was exactly the kind of Metaprogramming
that is dear to Lispers.
&lt;/p&gt;
&lt;p align=&quot;justify&quot;&gt;
We&#039;re always looking for more speakers.
The call for speakers and all the other details are at
&lt;a href=&quot;http://fare.livejournal.com/120393.html&quot;&gt;http://fare.livejournal.com/120393.html&lt;/a&gt;
&lt;/p&gt;
&lt;p align=&quot;justify&quot;&gt;
Please forward this information to people you think would be interested.
Please accept my apologies for your receiving this message multiple times.
&lt;/p&gt;
&lt;p align=&quot;justify&quot;&gt;
For more information, see our new web site
&lt;a href=&quot;http://boston-lisp.org/&quot;&gt;boston-lisp.org&lt;/a&gt;.
For posts related to the Boston Lisp meetings in general, follow this link:
&lt;a href=&quot;http://fare.livejournal.com/tag/boston-lisp-meeting&quot;&gt;http://fare.livejournal.com/tag/boston-lisp-meeting&lt;/a&gt;
or subscribe to our RSS feed:
&lt;a href=&quot;http://fare.livejournal.com/data/rss?tag=boston-lisp-meeting&quot;&gt;http://fare.livejournal.com/data/rss?tag=boston-lisp-meeting
&lt;/a&gt;
&lt;/p&gt;</description>
            
            <pubDate>Sun, 07 Sep 2008 00:00:25 -0700</pubDate>
        </item>
            
        <item>
            <title>John Wiegley: Too much good stuff</title>
            <link>http://swik.net/Lisp/Planet+Lisp/John+Wiegley%3A+Too+much+good+stuff/cdu2a</link>
            <description>A rundown of some of the cool things I&amp;rsquo;ve been playing with lately, which have distracted me from blogging...</description>
            
            <pubDate>Fri, 05 Sep 2008 20:00:35 -0700</pubDate>
        </item>
            
        <item>
            <title>Gary King: hack? features. asdf. enh?</title>
            <link>http://swik.net/Lisp/Planet+Lisp/Gary+King%3A+hack%3F+features.+asdf.+enh%3F/cdtgr</link>
            <description>&lt;p&gt;I use timeouts in &lt;a href=&quot;http://common-lisp.net/project/lift&quot;&gt;lift&lt;/a&gt; (so that you can stop run-away
tests) and in &lt;a href=&quot;http://common-lisp.net/project/trivial-shell&quot;&gt;trivial-shell&lt;/a&gt; (so that you can stop
run-away processes). Both systems have included the file
&lt;code&gt;with-timeout.lisp&lt;/code&gt; and since my god hates duplication of
error, this has long gnawed at the dark toast of my soul.&lt;/p&gt;

&lt;p&gt;Thus is born &lt;a href=&quot;http://common-lisp.net/project/trivial-timeout&quot;&gt;trivial-timeout&lt;/a&gt;. So far, perhaps good. But
(there has to be a but or why post) I don&amp;#8217;t want
trivial-shell or lift to depend on other systems: test
frameworks should stand on their own (a dubious premise but
one I hold) and trivial things should carry their own weight.
How, then, can I get three systems to play well together
without making my own life too painful?&lt;/p&gt;

&lt;p&gt;As is my habit, I decided to leap to the first idea that came
to mind (so that I can write about it and suffer the slings
and arrows of outraging rivers). What I wanted to be able to
do was say &amp;#8220;Yoh, system, don&amp;#8217;t load this file if some
condition holds&amp;#8221;. This is kinda/sorta what features are for
so I thought that something like&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;...
(:module
  &quot;timeout&quot;
  :pathname &quot;dev/&quot;
  :components 
  ((:featurep-source-file 
    &quot;with-timeout&quot;
    :feature (not :com.metabang.trivial-timeout)))) 
...
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;would make sense and make it clear that the system should
only (compile|load|whatever) the file &amp;#8220;with-timeout&amp;#8221; if the
feature &lt;code&gt;:com.metabang.trivial-timeout&lt;/code&gt; was &lt;em&gt;not&lt;/em&gt; present in
the &lt;code&gt;*features*&lt;/code&gt; when it came time to (compile|load|whatever)
it.&lt;/p&gt;

&lt;p&gt;Since this isn&amp;#8217;t part of ASDF, I added the following to my
system defs:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(unless (and (find-symbol (symbol-name &#039;featurep) &#039;#:asdf)
       (fboundp (find-symbol (symbol-name &#039;featurep) &#039;#:asdf)))
(defun asdf::featurep (feature-expression)
  ;; thanks to Richard Kreuter for the initial implementation 
  (when feature-expression
    (etypecase feature-expression
      (symbol
       (member feature-expression *features*))
      (cons
       (let ((bool (intern (car feature-expression) 
         (load-time-value (find-package :keyword)))))
         (ecase bool
           (:and
            (every #&#039;asdf::featurep (rest feature-expression)))
           (:or
            (some #&#039;asdf::featurep (rest feature-expression)))
           (:not
            (not (asdf::featurep (cadr feature-expression)))))))))))

(defclass featurep-source-file (cl-source-file)
  ((feature :initform nil
      :initarg :feature
      :reader feature)))

(defmethod perform :around ((o load-op) (c featurep-source-file))
  (when (asdf::featurep (feature c))
    (call-next-method)))

(defmethod perform :around ((o compile-op) (c featurep-source-file))
  (when (asdf::featurep (feature c))
    (call-next-method)))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This may not be beautiful, but it does work.&lt;/p&gt;

&lt;p&gt;A few notes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;I do know about &lt;code&gt;in-order-to ( ... (feature ...))&lt;/code&gt; but
this doesn&amp;#8217;t seem to have quite the right semantics (or
perhaps I just understand the semantics!)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Currently, I&amp;#8217;ve copied the code into three system files
but I&amp;#8217;m going to arrange for it to live in one place and get
copied around as part of my make process.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I&amp;#8217;d load to hear of other better (or, what the heck,
worse) ways to accomplish this task. Don&amp;#8217;t disappoint me!&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Enjoy the fall.&lt;/p&gt;</description>
            
            <pubDate>Fri, 05 Sep 2008 08:03:00 -0700</pubDate>
        </item>
            
        <item>
            <title>Gary King: reality based reporting</title>
            <link>http://swik.net/Lisp/Planet+Lisp/Gary+King%3A+reality+based+reporting/cdp1n</link>
            <description>&lt;p&gt;&lt;a href=&quot;http://news.yahoo.com/story/ap/20080904/ap_on_el_pr/cvn_fact_check/print&quot;&gt;This piece&lt;/a&gt; from the AP goes out on a limb and actually checks some facts. Just when you thought that reporting was all and only about what people said, someone notices that the best model of the world is the world itself (thanks to Rod Brooks for that last).&lt;/p&gt;

&lt;p&gt;Hope springs eternal.&lt;/p&gt;</description>
            
            <pubDate>Thu, 04 Sep 2008 09:55:10 -0700</pubDate>
        </item>
            
        <item>
            <title>Paul Khuong: SWAR implementation of (some #&#039;zerop ...)</title>
            <link>http://swik.net/Lisp/Planet+Lisp/Paul+Khuong%3A+SWAR+implementation+of+%28some+%23%27zerop+...%29/cdjvp</link>
            <description>&lt;p&gt;SWAR (SIMD Within A Register) codes can portably express short-vector
parallelism for operations on small packed data (e.g. byte or even
nybble vectors).  A trivial application of the technique is when we
test whether any bit in a word is set (equal to 1) by comparing the
whole word against 0. Obviously, that also work to test whether any
field (of arbitrary width) is not filled with 0. &lt;a href=&quot;http://cobweb.ecn.purdue.edu/~hankd/SWAR/over.html&quot;&gt;This document&lt;/a&gt;, from
1997, provides a fairly clear and complete overview.&lt;/p&gt;

&lt;p&gt;Just like testing whether any bit is set, it is easy to find whether
some bit is &lt;em&gt;not&lt;/em&gt; set (it&#039;s simply the opposite of whether every bit
in the word is set).  Things are more complex when the data
are wider than a single bit (but obviously narrower than a full
word).  I found a short implementation (and barely tested it), but
it might be possible to do even shorter.  Skip to the series of
asterisks if you want to solve that puzzle (to efficiently find
whether any field in a sequence of data, itself packed into a single
word, is 0) yourself.&lt;/p&gt;

&lt;p&gt;To simplify the description, I&#039;ll assume that we&#039;re working with
4-bit-wide fields.  It should be clear how the code can be adapted to
other widths or even mixed widths.&lt;/p&gt;

&lt;p&gt;Let &lt;code&gt;x = aaaabbbbccccdddd...&lt;/code&gt; be the input.&lt;/p&gt;

&lt;p&gt;1. &lt;code&gt;x&amp;apos; = x &amp;#124; (x &amp;gt;&amp;gt; 1)&lt;/code&gt;.
The first bit in each field is now, for our purposes, noise. However,
some of the remaining 3 bits are now non-zero iff some the original 4
were.&lt;/p&gt;

&lt;p&gt;2. &lt;code&gt;ones = x&#039; &amp;amp; ~0x8888...&lt;/code&gt;. The noise bits are masked out.&lt;/p&gt;

&lt;p&gt;3. &lt;code&gt;borrow = 0x8888... - ones&lt;/code&gt;. The first bit of each field
in &lt;code&gt;borrow&lt;/code&gt; is 0 iff some of the 3 other bits in &lt;code&gt;ones&lt;/code&gt; aren&#039;t (iff some
of the 4 bits in &lt;code&gt;x&lt;/code&gt; weren&#039;t).&lt;/p&gt;

&lt;p&gt;4. &lt;code&gt;result = borrow &amp;amp; 0x8888...&lt;/code&gt; is zero iff the first bit
of every field in &lt;code&gt;borrow&lt;/code&gt; is 0 (iff every field in &lt;code&gt;x&lt;/code&gt; was non-null).&lt;/p&gt;

&lt;p&gt;And, finally, that is easy to test for, a word at a time. In the end,
it takes 5 (hopelessly serial) operations (&lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt;, &lt;code&gt;|&lt;/code&gt;, &lt;code&gt;&amp;amp;&lt;/code&gt;, &lt;code&gt;-&lt;/code&gt; and &lt;code&gt;&amp;amp;&lt;/code&gt;) and a
conditional branch.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;****&lt;/code&gt; Testing whether any field in a word is filled with 0 may seem
incredibly obscure.  Apart from &lt;code&gt;(some #&#039;zerop
[packed-unboxed-vector])&lt;/code&gt;, what use is there for such code sequences?
One trick is to exploit &lt;code&gt;xor&lt;/code&gt;.  &lt;code&gt;xor&lt;/code&gt; lets us compare multiple fields at a
time: a field is 0 in &lt;code&gt;a xor b&lt;/code&gt; iff the corresponding fields in &lt;code&gt;a&lt;/code&gt; and &lt;code&gt;b&lt;/code&gt;
are identical (bit for bit).  Now that we can determine when at least
one pair of fields is equal, it&#039;s simple to implement, e.g., default
&lt;code&gt;FIND&lt;/code&gt; on specialised vectors without having to test each datum
separately (until the very end, when we know that one of the pairs is
equal, but not which).  As usual, a full implementation, capable of
dealing with &lt;code&gt;:start&lt;/code&gt;, &lt;code&gt;:end&lt;/code&gt; and displaced vectors is a lot more work.&lt;/p&gt;</description>
            
            <pubDate>Tue, 02 Sep 2008 23:54:37 -0700</pubDate>
        </item>
            
        <item>
            <title>Zach Beane: the dependency dance</title>
            <link>http://swik.net/Lisp/Planet+Lisp/Zach+Beane%3A+the+dependency+dance/cdjcx</link>
            <description>&lt;p&gt;I&#039;m working on a simple S3 client. I just finished grabbing all the
  deps and sub-deps I need:

&lt;ul&gt;
&lt;li&gt; alexandria.asd
&lt;li&gt; babel-streams.asd
&lt;li&gt; babel.asd
&lt;li&gt; cffi-grovel.asd
&lt;li&gt; cffi.asd
&lt;li&gt; chunga.asd
&lt;li&gt; cl+ssl.asd
&lt;li&gt; cl-base64.asd
&lt;li&gt; closure-common.asd
&lt;li&gt; cxml.asd
&lt;li&gt; drakma.asd
&lt;li&gt; flexi-streams.asd
&lt;li&gt; ironclad.asd
&lt;li&gt; puri.asd
&lt;li&gt; split-sequence.asd
&lt;li&gt; trivial-features.asd
&lt;li&gt; trivial-gray-streams.asd
&lt;li&gt; usocket.asd
&lt;/ul&gt;

&lt;p&gt;It was tiring. I am looking forward to the glorious future of Lisp
  distribution systems.</description>
            
            <pubDate>Tue, 02 Sep 2008 19:54:31 -0700</pubDate>
        </item>
            
        <item>
            <title>Geoff Wozniak: Slowly working through LiSP</title>
            <link>http://swik.net/Lisp/Planet+Lisp/Geoff+Wozniak%3A+Slowly+working+through+LiSP/cdgtl</link>
            <description>&lt;p&gt;As of Friday at around 11:30 a.m., I officially have the degree of &lt;a href=&quot;http://en.wikipedia.org/wiki/Doctor_of_philosophy&quot;&gt;Doctor of Philosophy&lt;/a&gt;.  To celebrate the end of an era for me, I spent the weekend relaxing with my wife at the lake.  Oh yes, and I worked through the first chapter of &lt;a href=&quot;http://pagesperso-systeme.lip6.fr/Christian.Queinnec/WWW/LiSP.html&quot;&gt;Queinnec&#039;s book&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Just for fun, I&#039;m translating as much of the code to Common Lisp as I can, although continuations could prove challenging.  Since it&#039;s a spare time project and I don&#039;t have the guilt of having to finish a thesis hanging over me, I don&#039;t mind.  If the Scheme to CL translation doesn&#039;t work out, I&#039;ll at least have to port some old Scheme code to new Scheme code.&lt;/p&gt;

&lt;p&gt;I should get around to posting the thesis in HTML format later this week, for those interested&lt;sup&gt;*&lt;/sup&gt;.  At the very least, a PDF version will make an appearance.&lt;/p&gt;

&lt;p&gt;&lt;sup&gt;*&lt;/sup&gt;Amazingly, a couple people have said they want to read it!  One of my colleagues said recently that a good thesis should collect dust (since it is the point from which new research starts), meaning no one should read it.  Here&#039;s hoping that violating this maxim doesn&#039;t mean the thesis is worthless.&lt;/p&gt;</description>
            
            <pubDate>Tue, 02 Sep 2008 05:55:06 -0700</pubDate>
        </item>
            
        <item>
            <title>Gary King: Announcing: some Lisp software updates! (finally)</title>
            <link>http://swik.net/Lisp/Planet+Lisp/Gary+King%3A+Announcing%3A+some+Lisp+software+updates%21+%28finally%29/cdd6u</link>
            <description>&lt;p&gt;I&amp;#8217;ve been wicked busy the last many months and the pace of my life looks to continue along the same tack (and in the same vein, even). That said, I really appreciate bug reports and patches and I will get them in something less than sidereal time so please keep &amp;#8216;em coming).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://common-lisp.net/project/trivial-http&quot;&gt;trivial-http&lt;/a&gt; : 1.3.0&lt;/p&gt;

&lt;p&gt;Fixed lame HTTP GET sending HTTP HEAD requests (ack!). Also added a &lt;a href=&quot;http://common-lisp.net/project/trivial-http/user-guide.html&quot;&gt;user-guide&lt;/a&gt; (well, let&amp;#8217;s be honest and call it the start of a user guide) and did some minor tweaking of all things. Progress.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://common-lisp.net/project/cl-containers&quot;&gt;cl-containers&lt;/a&gt; : 0.10.3&lt;/p&gt;

&lt;p&gt;Bug fixes to dlist-containers and other tweaks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[metatilities-base] : 0.6.4&lt;/p&gt;

&lt;p&gt;Aside from the unexciting &lt;code&gt;pathname-without-name+type&lt;/code&gt;; there is nothing to see here.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://common-lisp.net/project/moptilities&quot;&gt;moptilities&lt;/a&gt; : 0.3.10&lt;/p&gt;

&lt;p&gt;Mostly bug fixes to docstrings. &lt;/p&gt;

&lt;p&gt;Note that nothing should be read into the odd inverse version numbers for moptilities and cl-containers :-)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://common-lisp.net/project/trivial-shell/&quot;&gt;trivial-shell&lt;/a&gt; : 0.1.10&lt;/p&gt;

&lt;p&gt;Brought in Stephen Compall patches (thanks!); did some documenting and other minor cleanup. Finally exported &lt;code&gt;get-env-var&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enjoy.&lt;/p&gt;</description>
            
            <pubDate>Mon, 01 Sep 2008 11:54:35 -0700</pubDate>
        </item>
            
        <item>
            <title>Luís Oliveira: The features of Common Lisp</title>
            <link>http://swik.net/Lisp/Planet+Lisp/Lu%C3%ADs+Oliveira%3A+The+features+of+Common+Lisp/cczqq</link>
            <description>&lt;p&gt;Abhishek Reddy has compiled an interesting &lt;a href=&quot;http://abhishek.geek.nz/docs/features-of-common-lisp&quot;&gt;list of Common Lisp features&lt;/a&gt;. It&#039;s quite concise and includes examples for almost every feature described. It&#039;ll come in handy next time someone asks you what is it that attracts you to Lisp.&lt;/p&gt;</description>
            
            <pubDate>Thu, 28 Aug 2008 18:01:32 -0700</pubDate>
        </item>
            
        <item>
            <title>Geoff Wozniak: Behavioural synthesis, the (Lisp) thesis</title>
            <link>http://swik.net/Lisp/Planet+Lisp/Geoff+Wozniak%3A+Behavioural+synthesis%2C+the+%28Lisp%29+thesis/cczqp</link>
            <description>&lt;p&gt;On August 18, I successfully defended my PhD thesis entitled &lt;em&gt;Structuring data via behavioural synthesis&lt;/em&gt;.  I explored the idea of deriving data structure for objects in a system by examining the behavioural aspects of a system.  I did all the programming for the work in Common Lisp and did three things in the thesis to demonstrate how behavioural synthesis can work.&lt;/p&gt;

&lt;p&gt;The first was a framework for defining data types whose instances can change their internal structure to accommodate different conditions related to their usage.  This is done at the individual object level.  It allows for highly adaptive objects, but incurs significant overhead.  This demonstrated using limited context to control structural changes.&lt;/p&gt;

&lt;p&gt;The second approach used this framework to expand the contexts detected.  In particular, I showed how you can define data types that are the union of other data types, possibly with intersecting interfaces.  By considering where an object is created in the code and what is on the system stack, code is generated to capture this context.  By putting the context directly into the code, the overhead of detecting the conditions in the objects is removed.&lt;/p&gt;

&lt;p&gt;Finally, I demonstrated a more open-ended approach that offers up some interesting future work: building class hierarchies on-the-fly.  The idea is to write programs without class definitions, but still use classes and objects.  I augmented a Lisp system to handle three cases: no class defined, no slot defined and no method found.  Using various clues, I come up with a class hierarchy and try it out.  There are various limitations to the approach (no surprise!) but it&#039;s really interesting and worth some future study.  That said, there are certain conditions where it produces reasonable class hierarchies.&lt;/p&gt;

&lt;p&gt;The external examiner on the thesis was Richard P. Gabriel, who asked some good questions and gave me some ideas with what to do next with the work.  In general, I got the impression the examination committee liked the work, even though it was imprecise in some areas.  There are only some minor revisions to make before officially submitting it to the university.&lt;/p&gt;

&lt;p&gt;I&#039;m in the process of making the code available &amp;mdash; it needs some serious clean-up in places &amp;mdash; along with a tech report of the work.  When I have the revisions complete and its been submitted to the university, I&#039;ll post a copy of the thesis online.  Some may be interested in the introduction and literature survey.  (One examiner said I should look at publishing the survey.)  The more ambitious can dive into the technical elements.&lt;/p&gt;</description>
            
            <pubDate>Thu, 28 Aug 2008 18:01:32 -0700</pubDate>
        </item>
            
        <item>
            <title>Geoff Wozniak: Queinnec&#039;s book, at last!</title>
            <link>http://swik.net/Lisp/Planet+Lisp/Geoff+Wozniak%3A+Queinnec%27s+book%2C+at+last%21/cczqo</link>
            <description>&lt;p&gt;As a gift for successful completion of my thesis, a friend of mine gave me a copy of Queinnec&#039;s book, &lt;a href=&quot;http://pagesperso-systeme.lip6.fr/Christian.Queinnec/WWW/LiSP.html&quot;&gt;Lisp In Small Pieces&lt;/a&gt;.  If I had this book earlier, I probably would have finished my thesis a lot later.&lt;/p&gt;</description>
            
            <pubDate>Thu, 28 Aug 2008 18:01:32 -0700</pubDate>
        </item>
            
        <item>
            <title>ECL News: Project: automated testing of libraries with ECL</title>
            <link>http://swik.net/Lisp/Planet+Lisp/ECL+News%3A+Project%3A+automated+testing+of+libraries+with+ECL/cczqn</link>
            <description>Dear lispers,&lt;br/&gt;&lt;br/&gt;this message is for not only for ECL users looking for a place to contribute, but also for developers of libraries that want them to be tested with our implementation of Common Lisp.&lt;br/&gt;&lt;br/&gt;We have reached a point where the ANSI compatibility test suite is not enough. Undocumented or undefined behavior that changes between releases may cause some libraries to break in unexpected ways -- we have plenty of messages in the mailing list about them.&lt;br/&gt;&lt;br/&gt;So my idea is to add new directories to ecl-test for automating the downloading and testing of other libraries on a daily, weekly or monthly basis, depending on how things move on.&lt;br/&gt;&lt;br/&gt;As a guidance you may have a look at how ecl-test/ansi is implemented: Makefile checks for the existence of that directory and otherwise checks out with cvs a fresh new copy of the test suite. Tests are then loaded and run, and the output is logged into output/ecl/ansi.log. We could have similar directories for cffi, babel, flexi-streams, and other packages. It should not be that difficult.&lt;br/&gt;&lt;br/&gt;However, given that this is to be run on at least five different platforms, a few restrictions apply:&lt;br/&gt;&lt;br/&gt;1) Source code can only be retrieved using cvs, ftp or wget/curl&lt;br/&gt;2) Running the tests should not take more than half an hour on a computer with few resources: 512Mb, P4 (this is a typical configuration for my virtual machines)&lt;br/&gt;3) The test suite should be comprehensive enough.&lt;br/&gt;4) If possible, libraries should not have other dependencies.&lt;br/&gt;5) One should only test stable releases.&lt;br/&gt;&lt;br/&gt;If neither of these points is satisfied, then I do not see the point on going any further. However, not all restrictions are equally important. Points 1 and 3 are crucial, and 3 most so: why running a test suite when it is not able to produce a meaningful answer? Point 4 is not so relevant. If it cannot be satisfied by all libraries then the design might become a bit more complex. Point 5 can be negotiated: libraries that wish to be tested before release could be configured to look for an almost stable branch of the code.&lt;br/&gt;&lt;br/&gt;What I provide is a rather powerful computer (quad-core, 64 bits, 8GB), running kvm with at least the following virtual machines:&lt;br/&gt;&lt;br/&gt;* Windows XP + Microsoft Visual Studio 2008&lt;br/&gt;* Ubuntu Linux 64bits&lt;br/&gt;* Fedora 32bits&lt;br/&gt;* FreeBSD&lt;br/&gt;* NetBSD&lt;br/&gt;* OpenBSD&lt;br/&gt;&lt;br/&gt;Interested parties should contact us at the mailing list.&lt;br/&gt;&lt;br/&gt;Juanjo (&lt;a href=&quot;http://sourceforge.net/forum/forum.php?forum_id=859991&quot;&gt;0 comments&lt;/a&gt;)</description>
            
            <pubDate>Thu, 28 Aug 2008 18:01:32 -0700</pubDate>
        </item>
            
        <item>
            <title>François-René Rideau: GHARF</title>
            <link>http://swik.net/Lisp/Planet+Lisp/Fran%C3%A7ois-Ren%C3%A9+Rideau%3A+GHARF/cczqm</link>
            <description>&lt;p align=&quot;justify&quot;&gt;
As &lt;a href=&quot;http://fare.livejournal.com/130806.html&quot;&gt;previously announced&lt;/a&gt;,
I&#039;ve started my own business.
If you&#039;re looking for a software company that develops
distributed reflective systems, look no further.
&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;
Our purpose will be to develop the ideas from the TUNES project,
starting with the low-hanging fruits
in the hope to fund our longer-term goals.
&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;
Our long-term goal is to use reflection
(internalization of the knowledge and expertise
of computing semantics) to
improve semantics-based unification between programming languages,
and otherwise push ever higher the level of abstraction
at which programming may happen.
&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;
The low-hanging fruits, we think,
still lie in better automation in the development
and management of distributed computing systems,
particularly so as regard the building of systems
consistently manipulating large bodies of evolving persistent data.
&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;
We hope to build as our flagship product
a database system that scales semi-automatically.
Declarativeness, syntactic and semantic abstraction,
will allow for faster development as well as easier management.
Unlike existing &quot;relational&quot; or &quot;object&quot; databases,
we will decouple the data model from the transaction model,
allowing for enhanced robustness
as well as unequalled flexibility in adapting
the database to various application domains.
Based on a relatively efficient dynamic higher-order typed language,
and maintaining an explicit decoupling between monotonic (purely functional)
and linear (stateful) fragments of our computational logic,
we&#039;ll build a distributed system,
a reliable multicast facility
on top of which we can journal distributed transactions,
that can be used to construct various queryable views of the data.
&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;
Our first version will probably extend and productize Erlang-in-Lisp,
reuse Mnesia, and possibly combine these techniques
with Elephant, BKNR or another such existing system to persist objects.
Further versions may or may not be displace Common Lisp with
Scheme, Factor, Javascript, or our own COLA,
for total semantic control allowing for metaprograms
that aid with code-data co-evolution.
&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;
All software will &lt;em&gt;of course&lt;/em&gt; be Free Software,
published under a dual license bugroff/MIT,
and available on TUNES.org.
You&#039;ll be welcome to use it, improve on it,
and either give back to the community
or stubbornly hoard your improvements.
But if you need the world best specialists to tailor
our software to your needs,
build robust and usable applications,
and provide exceptional service,
then you know where to find us.
&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;
TUNES.org will continue to pursue its existence as an independent
non-profit organization.
Our company will be a separate for-profit entity
that happens to contribute to the TUNES project.
We are open to research and/or development contracts,
with the understanding that our core software
will be published as free software,
although special-purpose customizations might remain
an unpublished secret shared with our customers.
&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;
The current codename for our company is GHARF (rot13),
though this name is neither marketable
nor available in &lt;tt&gt;.COM&lt;/tt&gt;.
We have several ideas for an actual marketable name,
but will refrain from announcing anything until we have
secured the internet domain registration and setup an initial web site.
&lt;/p&gt;</description>
            
            <pubDate>Thu, 28 Aug 2008 18:01:32 -0700</pubDate>
        </item>
            
        <item>
            <title>Cusp Development: Making a small Common Lisp Project (in Cusp)</title>
            <link>http://swik.net/Lisp/Planet+Lisp/Cusp+Development%3A+Making+a+small+Common+Lisp+Project+%28in+Cusp%29/cczql</link>
            <description>In honor of my recent addition to Planet Lisp, and as a special thank you to Xach, I figured I&#039;d counter-blog his &lt;a href=&quot;http://xach.livejournal.com/130040.html&quot;&gt;old post&lt;/a&gt; on how to make a lisp project (in Slime). You can go read that if you want. Here&#039;s the Cusp way:&lt;br/&gt;&lt;br/&gt;&lt;b&gt;Make the project.&lt;/b&gt; Go to New &gt; Lisp Project. Enter the name of your project. You&#039;re done.&lt;br/&gt;&lt;br/&gt;&lt;b&gt;Write the code.&lt;/b&gt; You&#039;ll notice that a file named &quot;main.lisp&quot; has been opened for you. Put your lisp code there. You can compile the definitions as you write them (with Alt+C), but that&#039;s mostly a vestigial holdover from Slime. Cusp is smart. Save your file and it will automatically compile any new or changed top-level forms. (It&#039;ll even undefine functions that you&#039;ve deleted.)&lt;br/&gt;&lt;br/&gt;&lt;b&gt;Later on...&lt;/b&gt; If you close Cusp, when you come back you&#039;ll need to reload the project. To do this, right-click on the .asd file in the project, and choose &quot;Load Project.&quot; You may also need to change the package in the REPL to match the one for this project.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;h3&gt;So what is all this stuff?&lt;/h3&gt;&lt;br/&gt;You&#039;ve got all you need to start hacking, but you probably want to know what&#039;s going on behind the scenes. The New Project wizard creates a project folder with three files in it: main.lisp, defpackage.lisp, and [project name].asd. Here&#039;s what they do:&lt;br/&gt;&lt;br/&gt;&lt;b&gt;main.lisp&lt;/b&gt; is the main code file. Put the guts of your program here. You can, of course, create additional files as your project grows. More on that in a moment.&lt;br/&gt;&lt;br/&gt;&lt;b&gt;defpackage.lisp&lt;/b&gt; defines the package for this lisp project, which is basically the lisp equivalent of a namespace. You could pollute cl-user with your project internals, but that&#039;s just asking for trouble down the line. You&#039;ll note that main.lisp started out with &lt;code&gt;(in-package :[project-name])&lt;/code&gt;. You&#039;ll want to make sure any new files you add start that way, too.&lt;br/&gt;&lt;br/&gt;If you want to import symbols from another package into your project (so you can say &lt;code&gt;split&lt;/code&gt; rather than &lt;code&gt;cl-ppcre:split&lt;/code&gt;) put the name of that package into the &lt;code&gt;:use&lt;/code&gt; section. This is similar to &lt;code&gt;using&lt;/code&gt; in C++ or C#, or &lt;code&gt;import&lt;/code&gt; in Java. If your project turns into a library to be used by other projects, you would put any exported symbols into the &lt;code&gt;:export&lt;/code&gt; section. Notice that by default, you are already importing :cl.&lt;br/&gt;&lt;br/&gt;&lt;b&gt;[project-name].asd&lt;/b&gt; is best thought of as your project file. This tells Lisp what libraries to load up for your project, and what files are part of your project. You&#039;ll notice that defpackage and main are already listed in the &lt;code&gt;:components&lt;/code&gt; section. If you add more files to your project, make sure to tack them on to the end of that list. Files will be loaded in the order they are listed.&lt;br/&gt;&lt;br/&gt;Dependencies are also handled by the asd file. If, as in the earlier example, you want to use &lt;a href=&quot;http://www.weitz.de/cl-ppcre/&quot;&gt;cl-ppcre&lt;/a&gt;, make sure to add it to the &lt;code&gt;:depends-on&lt;/code&gt; section.&lt;br/&gt;&lt;br/&gt;Asd files can get &lt;a href=&quot;http://constantly.at/lisp/asdf/&quot;&gt;more complicated&lt;/a&gt; if you need, but this should be enough to take care of you in 95% of all cases. Happy hacking!</description>
            
            <pubDate>Thu, 28 Aug 2008 18:01:32 -0700</pubDate>
        </item>
            
        <item>
            <title>Lispjobs: SBCL guru sought (Alphacet)</title>
            <link>http://swik.net/Lisp/Planet+Lisp/Lispjobs%3A+SBCL+guru+sought+%28Alphacet%29/cczqk</link>
            <description>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br/&gt;&lt;p&gt;Rosario M. Ingargiola of Alphacet writes:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;SBCL Guru Sought&lt;/p&gt;
&lt;p&gt;We are looking for a consultant that has experience working with SBCL.  The initial project is as follows:&lt;/p&gt;
&lt;p&gt;1. Show us how to use the foreign function interface in SBCL to access C and FORTRAN via .so dynamic library files.&lt;/p&gt;
&lt;p&gt;2. Build a simple framework for loading and calling external libraries from SBCL (pre-loaded code we write and third-party libraries; not looking for automatic glue generation just hooks to make the process easier)&lt;/p&gt;
&lt;p&gt;3. Create build and deployment mechanisms for this part of our product which installs multithreaded SBCL and our application CL code.&lt;/p&gt;
&lt;p&gt;There would likely be other projects depending upon experience.   Working remotely and moonlighting is okay.  Please contact rosarioi@alphacet.com&lt;/p&gt;&lt;/blockquote&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/lispjobs.wordpress.com/184/&quot;/&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/lispjobs.wordpress.com/184/&quot;/&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/lispjobs.wordpress.com/184/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/lispjobs.wordpress.com/184/&quot;/&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/lispjobs.wordpress.com/184/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/lispjobs.wordpress.com/184/&quot;/&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/lispjobs.wordpress.com/184/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/lispjobs.wordpress.com/184/&quot;/&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/lispjobs.wordpress.com/184/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/lispjobs.wordpress.com/184/&quot;/&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/lispjobs.wordpress.com/184/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/lispjobs.wordpress.com/184/&quot;/&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=lispjobs.wordpress.com&amp;blog=504450&amp;post=184&amp;subd=lispjobs&amp;ref=&amp;feed=1&quot;/&gt;&lt;/div&gt;</description>
            
            <pubDate>Thu, 28 Aug 2008 18:01:32 -0700</pubDate>
        </item>
            
        <item>
            <title>Zach Beane: l1sp.org</title>
            <link>http://swik.net/Lisp/Planet+Lisp/Zach+Beane%3A+l1sp.org/cczqj</link>
            <description>&lt;p&gt;Inspired by &lt;a href=&quot;http://p3rl.org/&quot;&gt;p3rl.org&lt;/a&gt;, I&#039;ve just
  created &lt;a href=&quot;http://l1sp.org/&quot;&gt;l1sp.org&lt;/a&gt;.

&lt;p&gt;It has very little content of its own. Instead, it&#039;s a redirect
  service that provides relatively short, memorable URLs for index
  entries for a variety of Lisp software.

&lt;p&gt;For example, you probably can&#039;t remember that the URL for section
  11.1.2.1.2 in the hyperspec
  is &lt;tt&gt;http://www.lispworks.com/documentation/HyperSpec/Body/11_abab.htm&lt;/tt&gt;. But
  now you don&#039;t have to! You can just link
  to &lt;a href=&quot;http://l1sp.org/cl/11.1.2.1.2&quot;&gt;l1sp.org/cl/11.1.2.1.2&lt;/a&gt;
  instead. You can also link to &lt;a href=&quot;http://l1sp.org/cl/read-preserving-whitespace&quot;&gt;symbols&lt;/a&gt; or &lt;a href=&quot;http://l1sp.org/cl/~d&quot;&gt;format directives&lt;/a&gt; if you like.

&lt;p&gt;A number of other projects are indexed. The current list
  includes &lt;tt&gt;&lt;a href=&quot;http://l1sp.org/cl/file-string-length&quot;&gt;cl&lt;/a&gt;&lt;/tt&gt;,
 &lt;tt&gt;&lt;a href=&quot;http://l1sp.org/ccl/rlet&quot;&gt;ccl&lt;/a&gt;&lt;/tt&gt;
  (for the Clozure CL manual), 
 &lt;tt&gt;&lt;a href=&quot;http://l1sp.org/cffi/mem-ref&quot;&gt;cffi&lt;/a&gt;&lt;/tt&gt;, &lt;tt&gt;&lt;a href=&quot;http://l1sp.org/clim/present&quot;&gt;clim&lt;/a&gt;&lt;/tt&gt;,
 &lt;tt&gt;&lt;a href=&quot;http://l1sp.org/clisp/ext:saveinitmem&quot;&gt;clisp&lt;/a&gt;&lt;/tt&gt;,
 &lt;tt&gt;&lt;a href=&quot;http://l1sp.org/clx/open-display&quot;&gt;clx&lt;/a&gt;&lt;/tt&gt;,
 &lt;tt&gt;&lt;a href=&quot;http://l1sp.org/sbcl/sb-ext:save-lisp-and-die&quot;&gt;sbcl&lt;/a&gt;&lt;/tt&gt;,
  and &lt;tt&gt;&lt;a href=&quot;http://l1sp.org/hunchentoot/*reply*&quot;&gt;hunchentoot&lt;/a&gt;&lt;/tt&gt;.

&lt;p&gt;This isn&#039;t a search service, it&#039;s for when you know the project and symbol you&#039;re looking for, and want to get to its documentation quickly. For search, try &lt;a href=&quot;http://www.lispdoc.com/&quot;&gt;lispdoc.com&lt;/a&gt;.

&lt;p&gt;L1sp.org is new, and will evolve. I don&#039;t recommend making l1sp.org URLs a permanent part of your software&#039;s documentation, for example. But I hope the service will be handy if you are chatting with a friend and want to easily point to some documentation.

&lt;p&gt;If you have a suggestion for or question about l1sp.org, let me know.</description>
            
            <pubDate>Thu, 28 Aug 2008 18:01:32 -0700</pubDate>
        </item>
            
        <item>
            <title>Tim Ritchey: TRUENAME issues? Check your links</title>
            <link>http://swik.net/Lisp/Planet+Lisp/Tim+Ritchey%3A+TRUENAME+issues%3F+Check+your+links/cczqi</link>
            <description>&lt;p&gt;I&#039;ve been trying to get Paragent up and running on my laptop for DEMO, and was having a bunch of &lt;tt&gt;TRUENAME&lt;/tt&gt; issues that were pointing to locations in &lt;tt&gt;~/.sbcl/systems/&lt;/tt&gt;. It turns out I had accidentally forgotten the &lt;tt&gt;-s&lt;/tt&gt; when linking the asd files for a couple projects. Oops.&lt;/p&gt;</description>
            
            <pubDate>Thu, 28 Aug 2008 18:01:32 -0700</pubDate>
        </item>
            
        <item>
            <title>Tim Ritchey: OS X, SBCL and SLIME, Oh, My!</title>
            <link>http://swik.net/Lisp/Planet+Lisp/Tim+Ritchey%3A+OS+X%2C+SBCL+and+SLIME%2C+Oh%2C+My%21/cczqh</link>
            <description>&lt;p&gt;I ran into an issue with the latest SBCL and SLIME on OS X this morning, where I was getting a screenful of the following:&lt;/p&gt;

&lt;pre&gt;
WARNING:
   Releasing #S(SB-THREAD:MUTEX
                :NAME NIL
                :%OWNER NIL
                :LUTEX #), 
  owned by another thread: NIL
&lt;/pre&gt;

&lt;p&gt;&lt;a href=&quot;http://article.gmane.org/gmane.lisp.slime.devel/7534&quot;&gt;this&lt;/a&gt; thread has a workaround that gets things back to some normality. I still get the odd dropout when running under slime and compiling UCW. In particular, the whole setup doesn&#039;t appear to like Hungarian, as I pretty regularly get a dropped connection to &lt;tt&gt;*inferior-lisp*&lt;/tt&gt; and it is always at the line: &lt;tt&gt;compiling (DEFUN HUNGARIAN-PLURAL-OF ...)&lt;/tt&gt;.&lt;/p&gt;

&lt;p&gt;Once DEMO is off my plate, I may have to seriously sit down and see if there is anything I can do to make my favorite operating system, and my favorite CL implementation get along.&lt;/p&gt;</description>
            
            <pubDate>Thu, 28 Aug 2008 18:01:32 -0700</pubDate>
        </item>
            
        <item>
            <title>Andy Hefner: Interval sequences</title>
            <link>http://swik.net/Lisp/Planet+Lisp/Andy%C2%A0Hefner%3A+Interval+sequences/ccviq</link>
            <description>Lately I&#039;ve done some programming in &lt;a href=&quot;http://factorcode.org/&quot;&gt;Factor&lt;/a&gt;, and one feature I&#039;ve grown fond of is that integers are considered sequences, usable with map and other combinators. As an excuse to take the &lt;a href=&quot;http://www.doc.gold.ac.uk/~mas01cr/papers/ilc2007/sequences-20070301.pdf&quot;&gt;extensible sequences protocol&lt;/a&gt; for a spin, I implemented this in CL (or really SBCL, since I don&#039;t think any other implementations have implemented extensible sequences).&lt;br/&gt;&lt;br/&gt;The extensible sequences protocol requires that sequences be subtypes of the SEQUENCE class. I didn&#039;t like this at first, wanting to implement sequences directly on integers, but soon decided that wrapping things up in a class wasn&#039;t so bad - I can just write &lt;tt&gt;(below n)&lt;/tt&gt; instead of &lt;tt&gt;n&lt;/tt&gt;, and it suggested that I go a little further and implement intervals as sequences. Using the constructors &lt;tt&gt;below&lt;/tt&gt; and &lt;tt&gt;interval&lt;/tt&gt;, I can write the following:&lt;br/&gt;&lt;br/&gt;&lt;tt&gt;(map &#039;vector &#039;list #(a b c d e) (below 3))&lt;/tt&gt; =&amp;gt; #((A 0) (B 1) (C 2))&lt;br/&gt;&lt;tt&gt;(map &#039;list &#039;1+ (interval 20 25))&lt;/tt&gt; =&amp;gt; (21 22 23 24 25)&lt;br/&gt;&lt;br/&gt;Only a few definitions are needed to make this work:&lt;br/&gt;&lt;code&gt;&lt;pre&gt;

;;; Interval sequence class

(defclass interval-sequence (sequence standard-object)
  ((minimum :reader minimum :initform 0 :initarg :minimum)
   (length  :reader sequence:length :initarg :length)))

;;; Constructors
  
(defun below (n)
  (unless (&amp;gt;= n 0)
    (error &#039;type-error
           :datum n
           :expected-type &#039;(integer 0)))
  (make-instance &#039;interval-sequence :length n))

(defun interval (min max)
  (unless (&amp;lt;= min max)
    (error &quot;Interval minimum must be less than or equal to maximum&quot;))
  (make-instance &#039;interval-sequence :minimum min :length (- max min)))

;;; Core sequence protocol

(defmethod sequence:elt ((interval interval-sequence) index)
  (with-slots (minimum length) interval
    (unless minimum
      (error &quot;Attempt to read from an uninitialized interval&quot;))
    (when (or (&amp;lt; index 0) (&amp;gt;= index length))
      (error &#039;type-error
             :datum index
             :expected-type `(integer 0 ,(1- length))))
    (+ index minimum)))

(defmethod (setf sequence:elt) (new-value
                                (interval interval-sequence)
                                index)
  (with-slots (minimum length) interval
    (cond
      ((or (&amp;lt; index 0) (&amp;gt;= index length))
       (error &#039;type-error
              :datum index
              :expected-type `(integer 0 ,(1- length))))
      ((null minimum)
       (setf minimum (- new-value index))
       new-value)
      ((/= new-value (+ minimum index))
       (error &quot;Incompatible setf of interval element - expected ~A, got ~A&quot;
              (+ minimum index) new-value))
      (t new-value))))

(defmethod sequence:adjust-sequence ((interval interval-sequence) length 
                                     &amp;key; initial-element initial-contents)
  (declare (ignore interval length initial-element initial-contents))
  (error &quot;Interval sequences are immutable&quot;))

(defmethod sequence:make-sequence-like 
    ((interval interval-sequence) length
     &amp;key; (initial-element nil iep) (initial-contents nil icp))
  (declare (ignore initial-element initial-contents))
  (when (or iep icp)
    (error &quot;Can&#039;t create intervals using initial-element/initial-contents.&quot;))
  (make-instance &#039;interval-sequence :minimum nil :length length))
&lt;/pre&gt;&lt;/code&gt;&lt;br/&gt;An odd bit above is the notion of uninitialized sequences (where length is known, but not the minimum) and the behavior of &lt;tt&gt;(setf elt)&lt;/tt&gt;. Intervals are considered immutable, but &lt;tt&gt;(setf elt)&lt;/tt&gt; is permitted provided it would not change the sequence. It is also permitted when minimum is unset, in which case it completes initialization by setting minimum to &lt;tt&gt;(- newvalue index)&lt;/tt&gt;. Intended to support initialization of intervals by &lt;tt&gt;map&lt;/tt&gt;, this allows a neat trick:&lt;br/&gt;&lt;br/&gt;&lt;tt&gt;(map &#039;interval-sequence (lambda (x) (+ x 7)) (below 5))&lt;/tt&gt; =&amp;gt; #&amp;lt;INTERVAL-SEQUENCE [7,12)&amp;gt;&lt;br/&gt;&lt;br/&gt;I thought there was some chance that &lt;tt&gt;remove&lt;/tt&gt; would just work in the case where the element is on an end of the interval. It doesn&#039;t. The reason is that generic &lt;tt&gt;remove&lt;/tt&gt; is implementing by calling &lt;tt&gt;delete&lt;/tt&gt; on a copy of the sequence. As there is no way to distinguish destructive operations on a full copy during initialization from any other time, it seems like any immutable sequence has a bit more work to do in implementing the (non-destructive) utility functions.&lt;br/&gt;&lt;br/&gt;I&#039;ve filed my implementation away &lt;a href=&quot;http://vintage-digital.com/hefner/hacks/interval-sequence.lisp&quot;&gt;here&lt;/a&gt; in case anyone is interested.</description>
            
            <pubDate>Mon, 18 Aug 2008 23:32:04 -0700</pubDate>
        </item>
            
        <item>
            <title>Lispjobs: Compiler jobs at Hengsoft (Palatine, IL)</title>
            <link>http://swik.net/Lisp/Planet+Lisp/Lispjobs%3A+Compiler+jobs+at+Hengsoft+%28Palatine%2C+IL%29/cctni</link>
            <description>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br/&gt;&lt;p&gt;From comp.compilers:&lt;/p&gt;
&lt;p&gt;Date: Thu, 14 Aug 2008 11:07:36 -0500 &lt;br/&gt;
From: Frank Weil &amp;lt;frank.weil@hengsoft.net&amp;gt; &lt;br/&gt;
Subject: Compiler jobs at Hengsoft (Palatine IL) &lt;/p&gt;
&lt;p&gt;The Software Design Automation group, a core part of Hengsoft LLC, a &lt;br/&gt;
newly formed company with operations in Palatine, Illinois; Kiev, &lt;br/&gt;
Ukraine; St. Petersburg, Russia; and Tianjin, China; is hiring to fill &lt;br/&gt;
full-time research and development positions for its Palatine &lt;br/&gt;
location. &lt;/p&gt;
&lt;p&gt;The group&amp;#8217;s focus is the automatic transformation of high-level &lt;br/&gt;
specifications into efficient, product-quality code and the &lt;br/&gt;
development of supporting tools written largely in Common Lisp. This &lt;br/&gt;
transformation is driven by a knowledge base of both general-purpose &lt;br/&gt;
and domain-specific programming techniques. The current system has a &lt;br/&gt;
development history of more than 10 years and has successfully been &lt;br/&gt;
applied to produce code shipped in a number of commercial &lt;br/&gt;
telecommunications products. &lt;/p&gt;
&lt;p&gt;Responsibilities of these positions include the identification and &lt;br/&gt;
codification of domain-specific optimization and implementation &lt;br/&gt;
schemes, their integration into the existing code-generation &lt;br/&gt;
framework, and the development and testing of resultant &lt;br/&gt;
compilers. Experience in one or more of the following areas would &lt;br/&gt;
therefore be valuable: &lt;/p&gt;
&lt;p&gt;* Lisp programming &lt;br/&gt;
* Optimization techniques &lt;br/&gt;
* Program derivation &lt;br/&gt;
* Algorithm derivation &lt;br/&gt;
* Partial evaluation &lt;br/&gt;
* Type inferencing &lt;br/&gt;
* Datatype refinement &lt;br/&gt;
* Parallelization / Serialization &lt;/p&gt;
&lt;p&gt;Necessary skills include an understanding of implementation and &lt;br/&gt;
optimization techniques that go beyond mere programming experience, &lt;br/&gt;
and the ability to codify such knowledge in order for it to be applied &lt;br/&gt;
to specifications. Strong programming skills and modeling skills in &lt;br/&gt;
UML or SDL are helpful as well. We currently do not have specific need &lt;br/&gt;
for parsers, lexers, or back-end compiler techniques as a main &lt;br/&gt;
expertise. &lt;/p&gt;
&lt;p&gt;If your strengths lie in one or more of these (or related) areas and you &lt;br/&gt;
are interested in working in a dynamic and highly productive &lt;br/&gt;
environment, please send your resume to: &lt;/p&gt;
&lt;p&gt;Dr. Frank Weil &lt;br/&gt;
Hengsoft LLC &lt;br/&gt;
1530 E. Dundee Road &lt;br/&gt;
Palatine, IL   60074   USA &lt;/p&gt;
&lt;p&gt;e-mail: recruiting@hengsoft.net &lt;br/&gt;
fax: (847) 327-3896 &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;(Thanks, Rainer Josweg)&lt;/p&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/lispjobs.wordpress.com/181/&quot;/&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/lispjobs.wordpress.com/181/&quot;/&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/lispjobs.wordpress.com/181/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/lispjobs.wordpress.com/181/&quot;/&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/lispjobs.wordpress.com/181/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/lispjobs.wordpress.com/181/&quot;/&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/lispjobs.wordpress.com/181/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/lispjobs.wordpress.com/181/&quot;/&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/lispjobs.wordpress.com/181/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/lispjobs.wordpress.com/181/&quot;/&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/lispjobs.wordpress.com/181/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/lispjobs.wordpress.com/181/&quot;/&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=lispjobs.wordpress.com&amp;blog=504450&amp;post=181&amp;subd=lispjobs&amp;ref=&amp;feed=1&quot;/&gt;&lt;/div&gt;</description>
            
            <pubDate>Mon, 18 Aug 2008 10:09:42 -0700</pubDate>
        </item>
            
        <item>
            <title>Ingvar Mattsson: 18 Aug 2008</title>
            <link>http://swik.net/Lisp/Planet+Lisp/Ingvar+Mattsson%3A+18+Aug+2008/ccsuv</link>
            <description>&lt;a href=&quot;http://advogato.org/person/marnanel/
diary/231.html&quot;&gt;Here&lt;/a&gt;, &lt;a href=&quot;http://www.advogato.org/person/marnanel/&quot;&gt;marnanel&lt;/a&gt; writes 
about early mornings and it resonated.

&lt;p&gt; Due to an assortment of reasons, my primary &quot;I am alone, 
there is no external pressure&quot; hacking time tends to be 
from not-too-long after 6 am (depending on how promptly I 
can get up and go through the normal first-things-in-the-
morning routine), until about 07:30, when it&#039;s time to 
finish getting dressed and head towards the train station, 
for another exciting day in the office.

&lt;p&gt; That&#039;s also the first time period of the day when I can 
check my email and do a brief check on assorted web stuff. 
Most, if not all, of my coding is accomplished in these 
45-80 minutes of the day. At times, I am surprised I get 
anything finished...</description>
            
            <pubDate>Mon, 18 Aug 2008 06:08:53 -0700</pubDate>
        </item>
            
    </channel>
</rss>
