Conference paper Open Access

Writing a best-effort portable code walker in Common Lisp

Raskin Mikhail

DCAT Export

<?xml version='1.0' encoding='utf-8'?>
<rdf:RDF xmlns:rdf="" xmlns:adms="" xmlns:dc="" xmlns:dct="" xmlns:dctype="" xmlns:dcat="" xmlns:duv="" xmlns:foaf="" xmlns:frapo="" xmlns:geo="" xmlns:gsp="" xmlns:locn="" xmlns:org="" xmlns:owl="" xmlns:prov="" xmlns:rdfs="" xmlns:schema="" xmlns:skos="" xmlns:vcard="" xmlns:wdrs="">
  <rdf:Description rdf:about="">
    <rdf:type rdf:resource=""/>
    <dct:type rdf:resource=""/>
    <dct:identifier rdf:datatype=""></dct:identifier>
    <foaf:page rdf:resource=""/>
      <rdf:Description rdf:about="">
        <rdf:type rdf:resource=""/>
        <dct:identifier rdf:datatype="">0000-0002-6660-5673</dct:identifier>
        <foaf:name>Raskin Mikhail</foaf:name>
            <foaf:name>LaBRI, University of Bordeaux</foaf:name>
    <dct:title>Writing a best-effort portable code walker in Common Lisp</dct:title>
    <dct:issued rdf:datatype="">2017</dct:issued>
    <dcat:keyword>code walker</dcat:keyword>
    <dcat:keyword>macro expansion</dcat:keyword>
    <dcat:keyword>code transformation</dcat:keyword>
    <dct:issued rdf:datatype="">2017-04-04</dct:issued>
    <dct:language rdf:resource=""/>
    <owl:sameAs rdf:resource=""/>
        <skos:notation rdf:datatype=""></skos:notation>
    <dct:isVersionOf rdf:resource=""/>
    <dct:isPartOf rdf:resource=""/>
    <dct:description>&lt;p&gt;One of the powerful features of the Lisp language family is possibility to extend the language using macros.&amp;nbsp; Some of possible extensions would benefit from a code walker, i.e. a library for processing code that keeps track of the status of different part of code, for their implementation.&amp;nbsp; But in practice code walking is generally avoided.&amp;nbsp;&lt;br&gt; &lt;br&gt; In this paper, we study facilities useful to code walkers provided by &amp;lsquo;&amp;lsquo;Common Lisp: the Language&amp;rsquo;&amp;rsquo; (2nd edition) and the Common Lisp standard.&amp;nbsp; We will show that the features described in the standard are not sufficient to write a fully portable code walker.&lt;br&gt; &lt;br&gt; One of the problems is related to a powerful but rarely discussed feature.&amp;nbsp; The macrolet special form allows a macro function to pass information easily to other macro invocations inside the lexical scope of the expansion.&lt;br&gt; &lt;br&gt; Another problem for code analysis is related to the usage of non-standard special forms in expansions of standard macros. We review the handling of defun by popular free software Common Lisp implementations.&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt; We also survey the abilities and limitations of the available code walking and recursive macro expansion libraries.&amp;nbsp; Some examples of apparently-conforming code that exhibit avoidable limitations of the portable code walking tools are provided.&lt;br&gt; &lt;br&gt; We present a new attempt to implement a portable best-effort code walker for Common Lisp called Agnostic Lizard.&lt;br&gt; &amp;nbsp;&lt;/p&gt;</dct:description>
    <dct:accessRights rdf:resource=""/>
      <dct:RightsStatement rdf:about="info:eu-repo/semantics/openAccess">
        <rdfs:label>Open Access</rdfs:label>
        <dct:license rdf:resource=""/>
        <dcat:accessURL rdf:resource=""/>
All versions This version
Views 244244
Downloads 227227
Data volume 67.3 MB67.3 MB
Unique views 230230
Unique downloads 204204


Cite as